IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> unity脚本IEndGameObserver 接口interface -> 正文阅读

[游戏开发]unity脚本IEndGameObserver 接口interface

接口的作用就是所有订阅接口的代码当达成一定条件是都会执行此代码;

例如,玩家死亡之后,敌人全部都应有胜利的动画,就可以用此方法;

首先创建一个接口代码

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

public interface IEndGameObserver 
{
    void EndNotify();
}

因为他是接口所以是interface而不是一般的class

只需要在里面协商需要调用的方法即可

上面的using System.Collections;
using System.Collections.Generic;
using UnityEngine;也是不需要的可以删除;

在其他需要的敌人代码中需要添加此接口和对应的接口函数

public class EnemyController : MonoBehaviour,IEndGameObserver
{

    public void EndNotify()
    {
       
        anim.SetBool("Win", true);
        isChase = false;
        isWalk = false;
        attackTarget = null;
    }
}

必须要添加接口中的函数,

然后在GameMnager中添加所有的接口

GameManger是我创建的一个单例

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

public class GameManager : Singleton<GameManager>
{
    public CharacterStats playerStates;
    List<IEndGameObserver> endGameObservers = new List<IEndGameObserver>();

    public void RigisterPlayer(CharacterStats player)
    {
        playerStates = player;
    }
   public void AddObserver(IEndGameObserver observer)
    {
        endGameObservers.Add(observer);
    }
    public void RemoveObserver(IEndGameObserver observer)
    {
        endGameObservers.Remove(observer);
    }
    public void NotifyObserver()
    {
        foreach(var observer in endGameObservers)
        {
            observer.EndNotify();
        }
    }
}

public void AddObserver(IEndGameObserver observer)
? ? {
? ? ? ? endGameObservers.Add(observer);
? ? }是将有借口的敌人全部添加到列表中

public void RemoveObserver(IEndGameObserver observer)
? ? {
? ? ? ? endGameObservers.Remove(observer);
? ? }若敌人死亡就将该敌人的接口从列表中删除

然后在敌人的脚本中进行相关操作


? void OnEnable()
? ?{
? ?? ?GameManager.Instance.AddObserver(this); //敌人产生时添加到列表
? ? }
? ? void OnDisable()
? ? {
? ? ? ?
? ? ? ? GameManager.Instance.RemoveObserver(this);//敌人消失时从列表中删除
? ? }

这样列表中就有了所以敌人的接口

当玩家死亡时就可以玩家脚本中调用if (isDeath)
? ? ? ? ? ? GameManager.Instance.NotifyObserver();

?public void NotifyObserver()
? ? {
? ? ? ? foreach(var observer in endGameObservers)
? ? ? ? {
? ? ? ? ? ? observer.EndNotify();
? ? ? ? }
? ? }

遍历所有的敌人向他们宣告调用接口中导函数播放胜利动画;

这就是EndGameObserver 接口的作用,相当于一个广播站,所有的敌人订阅进入列表,当玩家死亡时,广播站向订阅的敌人发出死亡消息,他们胜利,产生喜悦

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 23:15:52  更:2021-07-14 23:16:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 18:31:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码