【无标题】

观察者模式例子

当主人公的血量为零时,触发多个系统的反应,包括播放死亡动画、播放死亡音效、重置世界数据和更新存档。

1. 定义事件和委托

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public delegate void Pointer(object obj,EventArgs args);
public class Player : MonoBehaviour
{
    public event EventHandler PlayerDied;
    // Start is called before the first frame update

    public int health;
    public int Health
    {
        get { return health; }
        set
        {
            health = value;
            if (health <=0 )
            {
                OnPlayerDied();
            }
        }
    }
    public Player()
    {
        health = 100;
    }
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    protected virtual void OnPlayerDied()
    {
        PlayerDied?.Invoke(this, EventArgs.Empty);
    }
}

2、 定义观察者 音效、世界、动画、缓存系统

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

public class AnimationSystem : MonoBehaviour
{
    public void OnPlayerDied(object sender, EventArgs e)
    {
        Debug.Log("Playing death animation.");
        // 实际播放动画的代码
    }
}


using UnityEngine;
using System;

public class SoundSystem : MonoBehaviour
{
    public void OnPlayerDied(object sender, EventArgs e)
    {
        Debug.Log("Playing death sound effect.");
        // 实际播放音效的代码
    }
}


using UnityEngine;
using System;

public class WorldSystem : MonoBehaviour
{
    public void OnPlayerDied(object sender, EventArgs e)
    {
        Debug.Log("Resetting world data.");
        // 实际重置世界数据的代码
    }
}

using UnityEngine;
using System;

public class SaveSystem : MonoBehaviour
{
    public void OnPlayerDied(object sender, EventArgs e)
    {
        Debug.Log("Updating save data.");
        // 实际更新存档的代码
    }
}

3. 订阅事件

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

public class GameManager : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        AnimationSystem animationSystem = gameObject.AddComponent<AnimationSystem>();
        SoundSystem soundSystem = gameObject.AddComponent<SoundSystem>();
        WorldSystem worldSystem = gameObject.AddComponent<WorldSystem>();
        SaveSystem saveSystem = gameObject.AddComponent<SaveSystem>();

        Player player = gameObject.AddComponent<Player>();

        player.PlayerDied += animationSystem.OnPlayerDied;
        player.PlayerDied += soundSystem.OnPlayerDied;
        player.PlayerDied += worldSystem.OnPlayerDied;
        player.PlayerDied += saveSystem.OnPlayerDied;
    }

   
}

在这里插入图片描述

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值