如果我的代码中没有 "static",为什么会出现错误 CS0120?

Why am I getting error CS0120 if I have no "static" in my code?

我正在制作一款 FPS 游戏,我正在为枪支尝试一些脚本,但 Unity 一直显示错误 CS0120,但问题是我没有使用任何“静态”或需要它的东西,至少我我觉得我没用。

主要代码:

{
    public float damage = 10f;
    public float range = 100f;

    public Camera fpsCam;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            Shoot();
        }
    }

    void Shoot()
    {
        RaycastHit hit;
        if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
        {
            Debug.Log(hit.transform.name);

            healthPoints hp = hit.transform.GetComponent<healthPoints>();
            if(hp != null)
            {
                //Here is where I get the error
                healthPoints.TakeDamage(damage);
            }

        }
    }

}

惠普代码:

public class healthPoints : MonoBehaviour
{
    public float health = 100f;

    public void TakeDamage(float amount)
    {
        health -= amount;

        if (health <= 0f)
        {
            Die();
        }
    }

    void Die()
    {
        Destroy(gameObject);
    }
}

“错误 CS0120 非静态字段、方法或 属性 需要对象引用 'healthPoints.TakeDamage(float)'”

此代码片段的问题在于,您必须使用实例化对象 hp,而不是 class healthPoints 来调用 non-static 方法 TakeDamage():

if(hp != null)
{
   // Here is where I get the error
   hp.TakeDamage(damage);
}

只有 class 的静态方法可以在不首先实例化 class 的对象的情况下访问。