1. ホーム
  2. c#

[解決済み] Unity Error [error CS0120: 非静的なフィールド、メソッド、またはプロパティ 'Zoney.setMonney(int)' に対してオブジェクト参照が必要です] [重複] 。

2022-01-31 20:30:07

質問

このエラーが出続けるのですが、この文脈で何が静的で、何が静的でないのかもわからないのですが?インスタンスの設定や大文字小文字のチェックなどの解決策を試しましたが、同じエラーが出るだけです。ショップスクリプトでモニー値を変更したいのですが、正しいU.I.を設定するまではデバッグに書き込まれます。

ゾーニースクリプトです。

    using UnityEngine;
    using UnityEngine.UI;
    
    public class Zoney : MonoBehaviour
    {
        public Text Money;
        public int Monney;
        private string Mony;
        
        // Start is called before the first frame update
        void Start()
        {
            Money = GetComponent<Text>();
        }

        public void setMonney(int Change) 
        {
            Monney = Change;
        }   
        
        // Update is called once per frame
        void Update()
        {          
            Mony = Monney.ToString();
            Money.text = Mony;
        }
    }

ショップスクリプトです。

    using UnityEngine;
    
    public class Shop : MonoBehaviour
    {
        public int Change;
    
        // Start is called before the first frame update
        void Start()
        {
        }
    
        // Update is called once per frame
        void Update()
        {
          Change += 1;
          Zoney.setMonney(Change);
          Debug.Log(Change);
        }
    }

解決方法は?

Zoneyはクラスなので、使用する前にまずそのインスタンスを作成する必要があります。

MonoBehaviourを派生させたクラスのインスタンス化

また、非常に重要なことですが、ショップオブジェクトを更新して、メンバーオブジェクトとしてZoneyインスタンスを持つようにする必要があります。 つまり

public class Shop : MonoBehaviour
{
    private Zoney;


    public int Change;

    // Start is called before the first frame update
    void Start()
    {
        _HiddenZoney = gameObject.Addcomponent<Zoney>();
    }

    // Update is called once per frame
    void Update()
    {
        Change += 1;
        _HiddenZoney.setMoney(Change);
        Debug.Log(Change);
    }
}

警告を発してくれた @derHugo に感謝します!