Unity 3D:访问另一个C#类中的属性或方法
发表于2017-12-21
在开发Unity 3D 游戏的过程中,经常遇到在某个C#类中访问另一个C#类中的方法或属性;比如:在Eenmy.cs中访问PlayAttack.cs脚本中的TakeDamage(int damage)方法(该方法控制主角受伤的情况),以实现当敌人攻击主角时调用TakeDamage方法对主角进行受伤的处理。那么,如何实现访问另一个C#类中的属性呢?有下面常用的三种方法:
1. 设置PlayerAttack类为单例模式
// PlayerAttack脚本 public class PlayerAttack : MonoBehaviour { public static PlayerAttack _instance; // static关键字。 单例模式 void Awake(){ _instance = this;// 确保单例模式在使用前已被初始化 } public void TakeDamage(int damage){ // do something } }
// Enemy脚本 public class Enemy : MonoBehaviour { // void Attack(){ // 当敌人攻击主角时 PlayerAttack._instance.TakeDamage(20); } }
2. 把要访问的方法设置为静态方法
// PlayerAttack脚本 public class PlayerAttack : MonoBehaviour { public static void TakeDamage(int damage){ // do something } }
// Enemy脚本 public class Enemy : MonoBehaviour { // void Attack(){ // 当敌人攻击主角时 PlayerAttack.TakeDamage(20); } }
// PlayerAttack脚本 public class PlayerAttack : MonoBehaviour { public void TakeDamage(int damage){ // do something } }
// Enemy脚本 public class Enemy : MonoBehaviour { // void Attack(){ // 当敌人攻击主角时 // 首先需要获取挂PlayerAttack的主角 GameObject player = GameObject.FindGameObjectWithTag("PlayerBoy");// Unity中主角模型的标签为PlayerBoy player.SendMessage("TakeDamage", 20); } }