当前位置: 首页 > news >正文

【Unity笔记02】订阅事件-自动开门

流程

当玩家移动到触发区域的时候,门自动打开

事件系统

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class EventSystem : MonoBehaviour
{public static EventSystem Instance { get; private set; }public event Action<int> onDoorEnter;public event Action<int> onDoorExit;private void Awake(){if (Instance == null){Instance = this;}else{Destroy(gameObject);}Debug.Log("EventSystem initialized.");}public void OpenDoor(int id){if (onDoorEnter != null){onDoorEnter(id);}}public void CloseDoor(int id){if(onDoorExit != null){onDoorExit(id);}}
}

门-订阅事件,取消订阅 

当物体销毁的时候要取消订阅

订阅事件的时候,接受参数的方法要一样

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;public class Door : MonoBehaviour
{[SerializeField] private int ID;private Vector3 originPos;public void Start(){EventSystem.Instance.onDoorEnter += DoorOpen;EventSystem.Instance.onDoorExit += DoorClose;originPos=gameObject.transform.position;}private void OnDisable(){EventSystem.Instance.onDoorEnter -= DoorOpen;EventSystem.Instance.onDoorExit -= DoorClose;}public void DoorOpen(int id){if(ID==id){Debug.Log("向上移动");// 从当前位置向上移动3个单位gameObject.transform.DOMove(new Vector3(originPos.x, originPos.y+3f, originPos.z), 1f);}}public void DoorClose(int id){if (ID==id){gameObject.transform.DOMove(originPos, 1f);}}
}

触发区域 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TriggerArea : MonoBehaviour
{[SerializeField] private int ID;private void OnTriggerEnter(Collider other){Debug.Log("进入触发区域");EventSystem.Instance.OpenDoor(ID);}private void OnTriggerExit(Collider other){EventSystem.Instance.CloseDoor(ID);}
}

 

http://www.dtcms.com/a/266498.html

相关文章:

  • 模型部署与推理--利用libtorch模型部署与推理
  • Redisearch接入SpringBoot项目使用
  • MySQL 中 -> 和 ->> 操作符的区别
  • github上部署自己的静态项目
  • 【狂飙AGI】第7课:AGI-行业大模型(系列1)
  • jsonCPP 开源库详解
  • CentOS配置网络
  • RocketMQ延迟消息是如何实现的?
  • 深度学习基础1
  • 基于Android的财务记账App
  • 【wps】 excel 删除重复项
  • AI 应用于进攻性安全
  • linux_git的使用
  • MySQL 8.0:窗口函数
  • 【Unity开发】Unity实现对模型移动、缩放、旋转操作的功能
  • 基于Docker构建OrangePi5 SDK环境
  • 408第三季part2 - 计算机网络 - 计算机网络基本概念
  • 闲庭信步使用SV搭建图像测试平台:第二十九课——绘制正弦波的图片
  • Android 实现底部弹窗
  • Datasophon的Ranger安装时数据库踩坑及问题解决
  • NeighborGeo:基于邻居的IP地理定位(三)
  • NeighborGeo:基于邻居的IP地理定位(二)
  • 【WEB】Polar靶场 6-10题 详细笔记
  • Jenkins-Email Extension 插件插件
  • 前端开发-前置知识
  • Android WebView 性能优化指南
  • Vue2中的keep-alive:组件状态缓存与性能优化实战指南
  • Android发展历程
  • Android 安装使用教程
  • [论文精读]StruQ: Defending Against Prompt Injection with Structured Queries