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