国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity 觀察者模式(實例詳解)

這篇具有很好參考價值的文章主要介紹了Unity 觀察者模式(實例詳解)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

簡介

在Unity中實現(xiàn)觀察者模式,我們可以創(chuàng)建一個Subject(目標(biāo)/主題)類,它負(fù)責(zé)維護訂閱者列表,并且當(dāng)其狀態(tài)改變時通知所有觀察者。下面通過5個代碼示例來詳細(xì)展示如何在Unity C#腳本中應(yīng)用觀察者模式:

示例1 - 簡單的文本更新通知

using System.Collections;
using System.Collections.Generic;

// 觀察者接口
public interface IObserver
{
    void OnUpdate(string message);
}

// 被觀察者接口
public interface IObservable
{
    void Register(IObserver observer);
    void Remove(IObserver observer);
    void NotifyObservers(string message);
}

// 具體的被觀察者類
public class TextDisplay : MonoBehaviour, IObservable
{
    private List<IObserver> observers = new List<IObserver>();

    public void Register(IObserver observer)
    {
        observers.Add(observer);
    }

    public void Remove(IObserver observer)
    {
        observers.Remove(observer);
    }

    public void NotifyObservers(string message)
    {
        foreach (var observer in observers)
        {
            observer.OnUpdate(message);
        }
    }

    // 模擬狀態(tài)改變
    public void UpdateText(string newText)
    {
        Debug.Log("Text has been updated to: " + newText);
        NotifyObservers(newText);
    }
}

// 具體的觀察者類
public class ConsoleLogger : MonoBehaviour, IObserver
{
    public void OnUpdate(string message)
    {
        Debug.Log("Console Logger received update: " + message);
    }
}

// 使用示例
public class GameManager : MonoBehaviour
{
    public TextDisplay display;
    public ConsoleLogger logger;

    void Start()
    {
        display.Register(logger);
        display.UpdateText("Hello, World!");
    }
}

示例2 - 多觀察者監(jiān)聽游戲分?jǐn)?shù)變化

public interface IScoreObserver : IObserver
{
    void OnScoreChanged(int newScore);
}

public class ScoreManager : MonoBehaviour, IObservable
{
    private List<IScoreObserver> scoreObservers = new List<IScoreObserver>();

    public void Register(IScoreObserver observer)
    {
        scoreObservers.Add(observer);
    }

    public void Remove(IScoreObserver observer)
    {
        scoreObservers.Remove(observer);
    }

    public void NotifyScoreObservers(int newScore)
    {
        foreach (var observer in scoreObservers)
        {
            observer.OnScoreChanged(newScore);
        }
    }

    public void IncreaseScore(int points)
    {
        int currentScore = GetTotalScore(); // 假設(shè)這是一個獲取當(dāng)前分?jǐn)?shù)的方法
        int newScore = currentScore + points;
        SetTotalScore(newScore); // 假設(shè)這是一個設(shè)置總分?jǐn)?shù)的方法
        NotifyScoreObservers(newScore);
    }
}

public class ScoreUI : MonoBehaviour, IScoreObserver
{
    public void OnScoreChanged(int newScore)
    {
        GetComponent<Text>().text = "Score: " + newScore;
    }
}

public class HighScoreTracker : MonoBehaviour, IScoreObserver
{
    public void OnScoreChanged(int newScore)
    {
        if (newScore > PlayerPrefs.GetInt("HighScore"))
        {
            PlayerPrefs.SetInt("HighScore", newScore);
        }
    }
}

// 使用示例
public class GameInitializer : MonoBehaviour
{
    public ScoreManager scoreManager;
    public ScoreUI scoreUI;
    public HighScoreTracker highScoreTracker;

    void Start()
    {
        scoreManager.Register(scoreUI);
        scoreManager.Register(highScoreTracker);
        // 游戲過程中調(diào)用scoreManager.IncreaseScore()增加分?jǐn)?shù)
    }
}

示例3 - 事件系統(tǒng)實現(xiàn)觀察者模式

using UnityEngine.Events;

public class SubjectWithEvent : MonoBehaviour
{
    public UnityEvent<string> OnTextUpdated;

    public void UpdateText(string newText)
    {
        Debug.Log("Text has been updated to: " + newText);
        OnTextUpdated.Invoke(newText);
    }
}

public class ObserverUsingEvent : MonoBehaviour
{
    public SubjectWithEvent subject;

    void Start()
    {
        subject.OnTextUpdated.AddListener(OnTextUpdatedHandler);
    }

    void OnDestroy()
    {
        subject.OnTextUpdated.RemoveListener(OnTextUpdatedHandler);
    }

    void OnTextUpdatedHandler(string message)
    {
        Debug.Log("Received text update: " + message);
    }
}

示例4 - 泛型觀察者和可序列化的事件系統(tǒng)

[System.Serializable]
public class GenericEvent<T> : UnityEvent<T>
{
}

public class ObservableGeneric<T> : MonoBehaviour
{
    public GenericEvent<T> OnStateChanged;

    public T State { get; private set; }

    public void ChangeState(T newState)
    {
        State = newState;
        OnStateChanged?.Invoke(newState);
    }
}

public class ObserverForGeneric<T> : MonoBehaviour
{
    public ObservableGeneric<T> observable;

    public void Awake()
    {
        observable.OnStateChanged.AddListener(StateChangedHandler);
    }

    public void OnDestroy()
    {
        observable.OnStateChanged.RemoveListener(StateChangedHandler);
    }

    void StateChangedHandler(T newState)
    {
        Debug.Log($"New state received: {newState}");
    }
}

// 使用示例
public class ExampleUsage : MonoBehaviour
{
    public ObservableGeneric<int> healthObservable;
    public ObserverForGeneric<int> healthObserver;

    void Start()
    {
        healthObserver.observable = healthObservable;
    }
}

示例5 - 使用C#委托簡化版

public class SimpleObservable
{
    public delegate void MessageEventHandler(string message);

    public event MessageEventHandler OnMessageEvent;

    public void SendMessage(string message)
    {
        OnMessageEvent?.Invoke(message);
    }
}

public class SimpleObserver : MonoBehaviour
{
    public SimpleObservable observable;

    void Start()
    {
        observable.OnMessageEvent += HandleMessageEvent;
    }

    void OnDestroy()
    {
        observable.OnMessageEvent -= HandleMessageEvent;
    }

    void HandleMessageEvent(string message)
    {
        Debug.Log("Received message: " + message);
    }
}

// 使用示例
public class SimpleExample : MonoBehaviour
{
    public SimpleObservable messageSource;
    public SimpleObserver messageRecipient;

    void Start()
    {
        messageRecipient.observable = messageSource;
        messageSource.SendMessage("Hello from the Observable");
    }
}

以上每個示例都展示了觀察者模式的基本原理:當(dāng)被觀察者的狀態(tài)發(fā)生改變時,它會通知所有已注冊的觀察者進行相應(yīng)的響應(yīng)或更新操作。

python推薦學(xué)習(xí)匯總連接:
50個開發(fā)必備的Python經(jīng)典腳本(1-10)

50個開發(fā)必備的Python經(jīng)典腳本(11-20)

50個開發(fā)必備的Python經(jīng)典腳本(21-30)

50個開發(fā)必備的Python經(jīng)典腳本(31-40)

50個開發(fā)必備的Python經(jīng)典腳本(41-50)
————————————————

?最后我們放松一下眼睛
unity實現(xiàn)觀察者,unity C#設(shè)計模式詳解,unity,觀察者模式,c#文章來源地址http://www.zghlxwxcb.cn/news/detail-834248.html

到了這里,關(guān)于Unity 觀察者模式(實例詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Unity實戰(zhàn)100例】人物狀態(tài)欄UI數(shù)據(jù)刷新—MVC觀察者模式

    目錄 一.創(chuàng)建Model層數(shù)據(jù)模型 二.創(chuàng)建View層關(guān)聯(lián)UI組件 三.創(chuàng)建Controller層使得V和M數(shù)據(jù)關(guān)聯(lián) 源碼:

    2024年02月13日
    瀏覽(59)
  • 用C++11打造智能觀察者模式:詳解實現(xiàn)步驟完整示例代碼

    用C++11打造智能觀察者模式:詳解實現(xiàn)步驟完整示例代碼

    ? 觀察者模式是一種行為設(shè)計模式,其中一個對象(主題)維護其依賴對象(觀察者)的列表,當(dāng)主題的狀態(tài)發(fā)生變化時,它通知所有觀察者。以下是一個使用C++11實現(xiàn)觀察者模式的簡單例子: 定義觀察者接口(Observer): ?創(chuàng)建一個觀察者接口,該接口包含觀察者需要實現(xiàn)

    2024年01月25日
    瀏覽(25)
  • 【觀察者設(shè)計模式詳解】C/Java/JS/Go/Python/TS不同語言實現(xiàn)

    【觀察者設(shè)計模式詳解】C/Java/JS/Go/Python/TS不同語言實現(xiàn)

    觀察者模式(Observer Pattern)是一種行為型模式。它定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。 觀察者模式使用三個類Subject、Observer和Client。Subject對象帶有綁定觀察者到Client對象和從Client對象解綁觀察

    2023年04月21日
    瀏覽(24)
  • 【設(shè)計模式】第十二章:觀察者模式詳解及應(yīng)用案例

    【設(shè)計模式】第十二章:觀察者模式詳解及應(yīng)用案例

    【設(shè)計模式】七大設(shè)計原則 【設(shè)計模式】第一章:單例模式 【設(shè)計模式】第二章:工廠模式 【設(shè)計模式】第三章:建造者模式 【設(shè)計模式】第四章:原型模式 【設(shè)計模式】第五章:適配器模式 【設(shè)計模式】第六章:裝飾器模式 【設(shè)計模式】第七章:代理模式 【設(shè)計模式

    2024年02月13日
    瀏覽(28)
  • JavaScript 簡單實現(xiàn)觀察者模式和發(fā)布-訂閱模式

    JavaScript 簡單實現(xiàn)觀察者模式和發(fā)布-訂閱模式

    大家好,我是南木元元,熱衷分享有趣實用的文章。今天來聊聊設(shè)計模式中常用的觀察者模式和發(fā)布-訂閱模式。 觀察者模式定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都將得到通知。 如何理解這句話呢?來舉個生活中的例子

    2024年02月12日
    瀏覽(638)
  • Java設(shè)計模式-觀察者模式-SpringBoot實現(xiàn)

    Java設(shè)計模式-觀察者模式-SpringBoot實現(xiàn)

    項目:https://gitee.com/KakarottoChen/blog-code.git 的:JavaSpringListener Java觀察者模式是一種設(shè)計模式,用于實現(xiàn)對象之間的一對多依賴關(guān)系。在觀察者模式中,當(dāng)一個對象的狀態(tài)發(fā)生變化時,它的所有依賴對象(觀察者)都會自動收到通知并進行相應(yīng)的更新。 觀察者模式由以下幾個核

    2024年02月08日
    瀏覽(89)
  • Go和Java實現(xiàn)觀察者模式

    在監(jiān)控系統(tǒng)中,我們需要采集監(jiān)控指標(biāo)的信息,假設(shè)當(dāng)采集的指標(biāo)信息超過閾值時我們需要對該監(jiān)控指標(biāo)持久化到 數(shù)據(jù)庫中并且進行告警。 本文通過指標(biāo)采集持久化和告警來說明觀察者模式的使用,使用Go語言和Java語言實現(xiàn)。 觀察者模式是一種行為型設(shè)計模式,它定義了一

    2024年02月16日
    瀏覽(18)
  • 如何用C++11實現(xiàn)觀察者模式

    觀察者模式是一種設(shè)計模式,定義了對象之間的一對多關(guān)系。當(dāng)一個對象狀態(tài)發(fā)生改變時,它的依賴者都會收到通知并自動更新。在C++11中,可以通過以下方式實現(xiàn)觀察者模式: 首先,我們需要創(chuàng)建一個觀察者接口,其中包含一個更新方法。這個接口可以被多個觀察者類實現(xiàn)

    2024年02月15日
    瀏覽(33)
  • 「觀察者(Observer)」設(shè)計模式 Swift實現(xiàn)

    「觀察者(Observer)」設(shè)計模式 Swift實現(xiàn)

    觀察者設(shè)計模式(Observer Pattern)是一種行為型設(shè)計模式,它定義了對象之間的一種一對多的依賴關(guān)系,使得當(dāng)一個對象的狀態(tài)發(fā)生變化時,所有依賴于它的對象都會受到通知并自動更新。 在這種模式中,被觀察者對象(Subject)存儲其觀察者對象(Observer)列表,并提供了用

    2024年02月16日
    瀏覽(25)
  • ts:簡單實現(xiàn) mobx 的觀察者模式 observable

    mobx 狀態(tài)管理器 訂閱者: 管理 變化后 回調(diào)的函數(shù)列表 觀察者:將傳入的 數(shù)據(jù)監(jiān)聽 起來,并且在 有變化時 , 執(zhí)行 訂閱者管理的 函數(shù)列表

    2024年02月12日
    瀏覽(90)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包