23k 21 分钟

# 观前提醒 项目会在 GitHub 中开源,链接:https://github.com/Maikire/Unity/tree/main/UnityFramework/A simple ARPG skill framework # 做框架之前的一些准备 在开始写框架之前需要有一些准备好的资源 # 角色 模型和动作 使用这个角色框架 基于动画事件行为类给动画添加事件 Animator 如图所示: # UI 使用这个 UI 框架 使用这个摇杆控制角色的移动 有关 UI 事件的代码在下文中会讲到 规定:按钮的名字必须是技能的 ID UI 如图所示: # 技能预制件 预制件需要放在...
3.1k 3 分钟

# 对象池 作用:将物体放到一个集合中,可以循环利用 适用性:适合频繁生成和销毁的物体,比如:子弹、技能、特效...... 对象池只有一个,所以使用单例模式 循环利用时需要做初始化,不同的物体有不同的初始化方法,所以使用接口 代码如下: ObjectPoolnamespace Common{ // 可重置的 public interface IResettable { void OnReset(); } /// <summary> /// 对象池 /// </summary> public...
991 1 分钟

# 资源管理器 需要生成资源配置文件 利用配置文件读取器读取配置文件 对外提供查找文件的方法(输入文件名即可得到对应的文件) 代码如下: ResourceManagerusing System.Collections.Generic;using UnityEngine;namespace Common{ /// <summary> /// 资源管理器 /// </summary> public class ResourceManager { // 名称,路径 private static...
1.5k 1 分钟

# 生成资源配置文件 作用:查找 Resource 目录中的文件(本文以预制件为例),在 StreamingAssets 文件夹中生成配置文件(指定配置文件的格式为:文件名 = 文件路径) 注意:代码文件需要放到 Editor 文件夹中 GenerateResourceConfigusing System.IO;using UnityEditor;/// <summary>/// GenerateResourceConfig/// </summary>public class GenerateResourceConfig :...
3.1k 3 分钟

# Unity 协同程序 (Coroutine) # 定义 具有多个返回点 (yield),可以在特定时机分步执行的函数。 # 原理 协程运行在 Unity 的主线程中,Unity 每帧处理 GameObject 中的协同函数,直到函数执行完毕。 当一个协同函数启动时,本质是创建迭代器对象,调用 MoveNext () 方法,执行到 yield 暂时退出,待满足条件后再次调用 MoveNext () 方法,执行后续代码,直至遇到下一个 yield 为止,如此循环至整个函数结束。 # 作用 延时调用 分解操作 # 语法 通过 MonoBehaviour 中的 StartCoroutine...
1.5k 1 分钟

# 枚举器 如果某个类没有实现接口 IEnumerable,当对这个类的对象使用 foreach 时,我们就会得到一个错误提示: 编译器错误 CS1579 若要使用 foreach 语句循环访问某个集合,该集合必须满足以下要求: 它必须是一个接口、类或结构。 它必须包含一个返回类型的公共 GetEnumerator 方法。 返回类型必须包含一个名为 Current 的公共属性和一个名为 MoveNext 的公共方法。 查找官方文档后发现: GetEnumerator 是在 IEnumerable 中定义的 Current 和 MoveNext 是在 IEnumerator 中定义的 #...
7k 6 分钟

# 事件(Event) 事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。 C# 中使用事件机制实现线程间的通信。 提示: 事件多用于桌面、手机等开发的客户端编程,因为这些程序经常是用户通过事件来 “驱动” 的 各种编程语言对这个机制的实现方法不尽相同 Java 语言里没有事件这种成员,也没有委托这种数据类型。Java 的 “事件” 是使用接口来实现的 MVC、MVP、MVVM 等模式,是事件模式更高级、更有效的...
3.9k 4 分钟

# C# 委托(Delegate) C# 中的委托类似于 C 或 C++ 中函数的指针,但它是函数指针的 “升级版”。 委托是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变,可同时指向多个函数方法。 委托特别用于实现事件和回调方法。所有的委托都派生自 System.Delegate 类。 # 委托的声明 委托是一个类(类的声明可以在其他类的外面或里面) 类是数据类型,所以委托也是一种数据类型 声明的方式与一般的类不同 委托所封装的方法必须类型兼容 声明委托 // 委托的关键字:delegatepublic delegate string...
1.7k 2 分钟

# C# 反射(Reflection) 动态获取类型信息,动态创建对象,动态访问成员的过程。 # 优缺点 优点: 反射提高了程序的灵活性和扩展性。 降低耦合性,提高自适应能力。 它允许程序创建和控制任何类的对象,无需提前硬编码目标类。 缺点: 性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。 使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。 #...
1.3k 1 分钟

# 代码 需要提前知道的知识点 委托和事件 动画和动画事件 代码如下: AnimationEventBehaviourusing System;using UnityEngine;using UnityEngine.Events;namespace Common{ /// <summary> /// 动画事件行为类 /// </summary> public class AnimationEventBehaviour : MonoBehaviour { // 在特定时机取消动画或触发事件 //...