情形:
有两个类,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;