Unity 3D:访问另一个C#类中的属性或方法

在开发Unity 3D 游戏的过程中,经常遇到在某个C#类中访问另一个C#类中的方法或属性;比如:在Eenmy.cs中访问PlayAttack.cs脚本中的TakeDamage(int damage)方法(该方法控制主角受伤的情况),以实现当敌人攻击主角时调用TakeDamage方法对主角进行受伤的处理。那么,如何实现呢?有下面常用的三种方法:

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);
	}
}
3. 通过 SendMessage方法传递参数( SendMessage用法

// 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);
	}
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值