设计模式--观察者模式(一)

1.unity 目录结构如下:

2. canvas 下挂如下四个脚本

Subject.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


/// <summary>
/// 事件派发类,所有发生的事件都是由这个类来派发的
/// </summary>
/// 
public class Subject : MonoBehaviour {

    public delegate void ObserverTest();
    public static event ObserverTest ObserverTestEvent;

    private void Start()
    {
        Button btn = transform.Find("Button").GetComponent<Button>();
        btn.onClick.AddListener(OnClick);
    }
    public void OnClick(){
        if (ObserverTestEvent != null)
        {
            ObserverTestEvent();
        }
    }
}

ButtonObserver.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ButtonObserver : MonoBehaviour {

	// Use this for initialization
	void Start () {
        // 注册事件
        Subject.ObserverTestEvent += ChangeButton; 
	}
	
    public void ChangeButton(){
        Button button = transform.Find("Button (1)").GetComponent<Button>();
        Image image = button.GetComponent<Image>();
        Text text = button.GetComponentInChildren<Text>();
        image.color = Color.yellow;
        text.text = "On Change Button Color";
    }
    private void OnDestroy()
    {
        // 结束时注销事件
        Subject.ObserverTestEvent -= ChangeButton;
    }
}

TextObserver_1.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextObserver_1 : MonoBehaviour {

	// Use this for initialization
	void Start () {
        Subject.ObserverTestEvent += ChangeText;
	}
	
    /// <summary>
    /// 改变文本内容
    /// </summary>
    public void ChangeText(){
        Text text = transform.Find("Text").GetComponent<Text>();
        text.text = "Hi,第一个李胜福";
    }


    private void OnDestroy()
    {
        Subject.ObserverTestEvent -= ChangeText;
    }
}

TextOberver_2.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextOberver_2 : MonoBehaviour {

	// Use this for initialization
	void Start () {
        Subject.ObserverTestEvent += ChangeText;
	}
	
    /// <summary>
    /// 改变第二个文本的内容
    /// </summary>
    void ChangeText(){
        Text text =  transform.Find("Text (1)").GetComponent<Text>();
        text.text = "Hi,第二个李胜福";
    }

    private void OnDestroy()
    {
        Subject.ObserverTestEvent -= ChangeText;
    }
}

3.效果图如下:

文章参考地址:https://blog.csdn.net/qq_28221881/article/details/54709329

猜你喜欢

转载自blog.csdn.net/qq_39097425/article/details/83475505