错误 CS0120:非静态字段、方法或 属性 'InventoryUI.newDiamondText' 需要对象引用

Error CS0120: An object reference is required for the non-static field, method, or property 'InventoryUI.newDiamondText'

public class BuyableItem : MonoBehaviour
{
    public float PickUpRadius = 1f;
    public InventoryItemData ItemData;

    private SphereCollider myCollider;
    
    private void Awake()
    {
        myCollider = GetComponent<SphereCollider>();
        myCollider.isTrigger = true;
        myCollider.radius = PickUpRadius;
    }

    private void OnTriggerEnter(Collider other)
    {
        var inventory = other.transform.GetComponent<InventoryHolder>();
        
        if (!inventory) return;

        if (inventory.InventorySystem.AddToInventory(ItemData, 1))
        {
            Destroy(this.gameObject);
        }
    }

    public static void UpdateDiamondText(PlayerInventory playerInventory)
    {
        InventoryUI.newDiamondText.text = playerInventory.NumberOfDiamonds.ToString();
    }
}

我该如何解决这个问题?

Error CS0120: An object reference is required for the non-static field, method, or property 'InventoryUI.newDiamondText'

这意味着字段(或方法或其他任何东西)newDiamondText 不是静态的,但您正试图使用​​对 class InventoryUI 的静态引用来调用它而不是通过引用 class.

实例

如果您的意思是 newDiamondText 是静态的——即永远只有一个,而不是 class 的每个副本一个——您可以通过标记 newDiamondText 来解决问题作为 static.

否则,您需要通过引用 InventoryUI 的实例来访问它——例如像(但可能不完全是)这样的东西:

InventoryUI inventoryInstance = new InventoryUI();
inventoryInstance.newDiamondText.text = playerInventory.NumberOfDiamonds.ToString();