我正在制作游戏,但无法从其他脚本中引用函数。
我有第一个脚本,其中有碰撞功能。我还有第二个应用统计数据的地方。
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;
}
这只是一个 常见的拼写错误 :),PlayerData 是您的班级,playerData 是您找到的对象的参考变量。
此外,如果您在调用函数时执行 int -1 操作,health 实际上会上升 因为会减去伤害。
我也会删除硬编码值并使用[SerializeField]
让它显示在检查器中playerData 也可以是私有引用,因此它不会显示在检查器中(这可能会造成混淆),因为检查器输入将在 Start() 中被丢弃,我假设没有其他脚本正在访问它
[SerializeField] private int damage = 1;
playerData.HPmodifiers(damage);
您也可以参观 https://learn.unity.com/ ,这是一个充满免费课程和简短教程的惊人资源。