这几天一直在学习设计模式这方面,单例模式,简单工厂模式,观察者模式这三个比较简单易懂的设计模式,今天先说说观察者模式。这是用事件来响应。场景中建两个球,当一个球下落到地面的时候,另一个球弹起往上运动。
public class ObjectBall : MonoBehaviour {
public event EventHandler<EventArgs> BallDownEvent;//添加球落地事件
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
/// <summary>
/// 添加触发事件方法
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
EventArgs arg = new EventArgs();
if (BallDownEvent != null)
{
BallDownEvent(this, arg);
}
}
}
}
//另一个球所带脚本
public class ObserverBall : MonoBehaviour {
public float Force = 0.01f;
// Use this for initialization
void Start () {
//加入响应事件
GameObject.Find("Ball").GetComponent<ObjectBall>().BallDownEvent += Jump;
}
// Update is called once per frame
void Update () {
}
/// <summary>
/// 事件处理程序/响应事件
/// </summary>
/// <param name="go"></param>
/// <param name="arg"></param>
void Jump(object go,EventArgs arg)
{
GetComponent<Rigidbody>().AddForce(Vector3.up*Force,ForceMode.Impulse);
}
}