unity3d 如何在其他脚本上引用函数?

svmlkihl  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(178)

我正在制作一个游戏,但无法从其他脚本引用该函数。
我有一个第一个脚本,其中有一个碰撞函数。我有一个第二个,其中统计应用。
OnCollisionEnter接近时,我如何施加伤害?

public PlayerData playerData;

void Start()
{
    playerData = FindObjectOfType<PlayerData>();
}

private void OnCollisionEnter2D(Collision2D other)
{
    if (other.collider.tag == "Player")
    {
        PlayerData.HPmodifiers(int -1);
    }
}

PlayerData脚本如下所示:

public int CurrentHealth = 10;
public int MaxHealth = 10;

public void HPmodifiers(int Damage)
{
    CurrentHealth -= Damage;
}
xxhby3vn

xxhby3vn1#

这只是一个常见拼写错误:),PlayerData是您的类,playerData是您对找到的对象的引用var。
同样,如果你在函数调用中使用int -1,生命值实际上会上升,因为伤害被减去了。
我还将
删除硬编码值****,并使用[SerializeField]**使其显示在检查器中

****playerData也可以是私有引用,这样它就不会显示在检查器中(这可能会让人感到困惑),因为检查器输入将在Start()中被丢弃,我假设没有其他脚本正在访问它

[SerializeField] private int damage = 1; 
playerData.HPmodifiers(damage);

你也可以访问https://learn.unity.com/,这是一个非常棒的资源,里面有免费的课程和简短的教程。

w8f9ii69

w8f9ii692#

您需要获取组件并通过它调用方法。

private void OnCollisionEnter2D(Collision2D other)
{
    if (other.collider.tag == "Player")
    {
        if (other.collider.TryGetComponent(out PlayerData pData))
        {
            pData.HPmodifiers(-1);
        }
    }
}

相关问题