无法在其他统一脚本中调用公共静态方法

时间:2016-02-19 18:15:21

标签: c# unity3d unityscript

我有两个“敌人”精灵,当“玩家”精灵接触时,应该造成伤害。

PlayerStatus脚本只保存有关玩家健康状况的信息。 当触发EnemyAIController OnTriggerEnter2D方法时,我想在PlayerStatus脚本中调用一个方法,该方法会将健康状况减少x个数量。

我使用static修饰符将 TakeDamage 方法访问器公开。所以我可以致电$order_list,但这不起作用。

我收到错误: 访问非静态成员`PlayerStatus.TakeDamage(float)'

需要对象引用

我不想使用PlayerStatus.TakeDamage(float x),因为我读过这个很慢而且懒惰的做法。

我错过了什么吗?

PlayerStatus脚本:

findObjectByTag

EnemyAIController脚本:

public class PlayerStatus : MonoBehaviour {

    public float health = 3.0f;

    public static void TakeDamage(float damage){
        health -= damage;

    }

}

1 个答案:

答案 0 :(得分:3)

问题出在班级PlayerStatus内。在静态方法TakeDamage内部,您正在访问非静态变量health,这当然是无法完成的。

public static float health = 3.0f; // inside class PlayerStatus

应该可以帮助您解决错误。

否则,我建议你创建一个非静态方法TakeDamage,使用findObjectByTag,你可以在构造函数中执行一次(以避免性能损失)。只需将结果保存在class属性中,您可以在`OnTriggerEnter2D:

中访问它

(更多的是伪代码)

public class EnemyAIController : MonoBehaviour {

    private PlayerStatus _player;

    public EnemyAIController() {
        // call base() if neccessery
        _player = findObjectByTag("your player");
    }

    void OnTriggerEnter2D(Collider2D other) {

            Debug.Log("Reduce Player Health"); 
            this._player.TakeDamage (1.0f);

    }

}