短編RPG制作(Unity2D)【第65回】装備その8


装備

購入機能の作成

まず、装備のステータスを反映させる処理を書きました。
装備が変更されるとそれを検知して攻撃力を更新します。
(まだ動かしてないので正しいかどうかわからない……)

    private void Update()
    {
        // 装備を変更した際にステータスに反映する
        if (currentWeapon != equipedWeapon)
        {
            if (equipedWeapon ==  null)
            {
                attack = baseAttack + forceAttackLv;
            }
            float coefficient = (100.0f + (float)equipedWeapon.GetStatus()) / 100.0f;
            Debug.Log(coefficient);
            attack = (int)((baseAttack + forceAttackLv) * coefficient);
        }
    }

そして、一度購入したらボタンの機能が変更するように実装します。
これはEnum型を使って条件分岐することで、簡単に実装できました。

    public void OnClickBuyButton()
    {
        // 購入処理
        if ( value <= PlayerParameter.gold && _state == StateEnum.unpurchased )
        {
            _state = StateEnum.purchased;
            _text.text = "装備する";
            PlayerParameter.gold -= value;           
        }

        // 装備処理
        if (_state == StateEnum.purchased)
        {
            _state = StateEnum.equiped;
            _text.text = "外す";
            onEquip.Invoke();
            // 他に装備している武器があったら、そのボタンを「装備する」に戻す必要あり
        }
    }

「onEquip」をコールバック関数にして処理を実装したいと考えています。(ボタン操作を排他的にするには都合が良さそうなので)
しかし、今回はどのボタンを押したか伝達する必要があり、関数に引数としてボタンのID番号を渡す必要があります。
以前実装したコールバック関数の型では引数を使えないようなので、「デリゲート」と呼ばれるものを勉強する必要がありそうです。

そういうわけで、明日はデリゲートを勉強したいと思います。

この記事が気に入ったらサポートをしてみませんか?