美好的一天!今天,我想简要地谈谈使用事件来摆脱垃圾并为代码提供复杂和动态的功能。 应该注意的是,本文的重点是希望更多地了解事件系统的初学者。
我们将使用声音控制系统的示例来分析整个问题。 该系统将允许我们启用/禁用游戏设置中的音乐和声音。
在创建用于管理声音和音乐设置的管理器类之前,我们将创建一个简单的可序列化类。 它将用作保存在JSON中的数据模型。
using System.Collections; using System.Collections.Generic; using UnityEngine;
现在,您可以开始编写经理类了。 我们将在第一个场景中安装它。 该管理器将是一个全局对象,并且在从一个场景移动到另一个场景时不会被删除。
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO;
现在经理已经准备就绪,您可以在初始场景上创建一个空对象并将其命名为例如
“ _AUDIO_MANAGER” ,然后将我们的经理类添加到其中。 您只需在对象上调用添加组件菜单,然后选择
“游戏管理器” =>“音频管理器”,即可完成此操作 。
之后,我们需要编写一个组件,该组件将通过AudioSource停靠到每个对象。
using System.Collections; using System.Collections.Generic; using UnityEngine;
这样,我们可以控制游戏中的声音/音乐。 该示例没有以任何方式说明如何正确执行操作,而仅演示了Unity3D中事件系统和侦听器的操作。
最后,我想谈谈我们刚刚使用的内容。 在下面的示例中,声明了用于创建侦听器的委托:
public delegate void AudioSettingsChanged(); public event AudioSettingsChanged OnAudioSettingsChanged;
您可以在特定条件下设置听众的演奏,并在满足这些条件时执行某些方法。
在代表的帮助下,我们创建了监听器,您可以创建回调函数。 这对于异步方法尤其有用(例如,在发送异步POST请求时)。
希望您发现我的一点经验对这件事有用,并且您可以将此示例应用于您的项目。 我也会很乐意回答您的问题(如果某人不了解某事)。