Unity 脚本通信

情形:

有两个类,Player,GameUI,GameUI需要访问Player的health属性,来更新UI显示生命值

GameUI类中获得Player实例

1.

Player player
GameObject playerObject = GameObject.Find("Player");
player = playerObject.GetComponent<Player>();

通过名字找到GameObject,接下来用GetComponent方法来获取上面挂载的脚本类,现在player就是场景中Player类脚本的实例了(注意这里不同“Player”的含义)

如果为Player附加了“Player” tag,也可用FindGameObjectWithTag()方法寻找到Object

2.

player = FindObjectOfType<Player>();

这会直接返回脚本实例的引用,更为直接

 

无论何种方式,最后只需要调用 player.health 来访问属性即可

 

情形:

当player死亡时,会将自己destroy,这时需要让GameUI来绘制GameOver画面r

为了让player类不依赖于UI类的存在,需要使用“事件”

1.

在定义事件Action的类中,需要导入

using System;

声明事件

public event Action OnPlayerDeath;

在Player死亡,调用Destroy之前,调用事件,检查是否是null防止报错

if(OnPlayerDeath != null) {
    OnPlayerDeath();
}

在UI类中,将GameOver函数注册在事件内即可

player.OnPlayerDeath += GameOver;

 

posted @ 2020-10-10 11:21  瞬闪影  阅读(217)  评论(0编辑  收藏  举报