unity 简单的观察者模式示例

观察者模式相关介绍
博客围绕观察者模式展开,但具体内容缺失。观察者模式是程序设计方法中的一种设计模式,在信息技术领域有重要应用。

### Unity观察者模式的实现与使用方法 观察者模式Unity 中是一种常用的设计模式,用于实现事件驱动机制和解耦对象之间的依赖关系。以下是一个完整的示例代码及教程,展示如何在 Unity 中实现观察者模式。 --- #### 1. 核心结构设计 观察者模式的核心包括三个部分: - **主题(Subject)**:维护观察者的列表,并提供注册、移除和通知观察者的方法。 - **观察者(Observer)**:定义一个接口或基类,用于接收来自主题的通知。 - **具体实现**:具体的主题和观察者类,实现相应的逻辑[^1]。 --- #### 2. 示例代码 以下是一个简单Unity 示例,演示如何通过观察者模式实现事件通知功能。 ##### (1)定义 `IObserver` 接口 ```csharp public interface IObserver { void OnNotify(string message); } ``` ##### (2)定义 `ISubject` 接口 ```csharp using System.Collections.Generic; public interface ISubject { void RegisterObserver(IObserver observer); void RemoveObserver(IObserver observer); void NotifyObservers(string message); } ``` ##### (3)实现具体的主题类 `TriggerSubject` ```csharp using System.Collections.Generic; using UnityEngine; public class TriggerSubject : MonoBehaviour, ISubject { private List<IObserver> observers = new List<IObserver>(); public void RegisterObserver(IObserver observer) { if (!observers.Contains(observer)) { observers.Add(observer); } } public void RemoveObserver(IObserver observer) { if (observers.Contains(observer)) { observers.Remove(observer); } } public void NotifyObservers(string message) { foreach (var observer in observers) { observer.OnNotify(message); } } private void OnTriggerEnter(Collider other) { if (other.CompareTag("Player")) { NotifyObservers("Player triggered the event!"); } } } ``` ##### (4)实现具体的观察者类 `ColorObserver` ```csharp using UnityEngine; public class ColorObserver : MonoBehaviour, IObserver { public void OnNotify(string message) { Debug.Log($"ColorObserver received: {message}"); GetComponent<Renderer>().material.color = Color.red; } } ``` ##### (5)实现另一个观察者类 `TextObserver` ```csharp using UnityEngine.UI; using UnityEngine; public class TextObserver : MonoBehaviour, IObserver { public Text uiText; public void OnNotify(string message) { Debug.Log($"TextObserver received: {message}"); uiText.text = message; } } ``` ##### (6)挂载脚本到场景中 - 创建一个空对象并挂载 `TriggerSubject` 脚本。 - 创建一个立方体作为触发器,并设置其标签为 `Player`。 - 创建一个 `ColorObserver` 对象(例如一个球体),并将其材质绑定到脚本。 - 创建一个 `TextObserver` 对象,并将 UI 文本组件绑定到脚本。 ##### (7)注册观察者 在 `GameManager` 或其他管理类中,确保观察者被正确注册: ```csharp public class GameManager : MonoBehaviour { public TriggerSubject triggerSubject; public ColorObserver colorObserver; public TextObserver textObserver; private void Start() { triggerSubject.RegisterObserver(colorObserver); triggerSubject.RegisterObserver(textObserver); } private void OnDisable() { triggerSubject.RemoveObserver(colorObserver); triggerSubject.RemoveObserver(textObserver); } } ``` --- #### 3. 运行效果 当玩家角色进入触发器范围时: - `ColorObserver` 的颜色会变为红色。 - `TextObserver` 的 UI 文本会显示 "Player triggered the event!"。 --- ### 优势总结 观察者模式具有以下优势[^2]: - **松耦合**:主题不需要知道观察者的具体实现细节。 - **可扩展性**:可以轻松添加或移除观察者,而无需修改主题代码。 - **事件驱动**:支持多播通知,多个观察者可以独立响应主题的变化。 此外,在 Unity 中使用观察者模式时,需要注意取消注册观察者以避免内存泄漏[^5]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值