2.5k 2 分钟

# 配置文件读取器 获取文件内容:输入 StreamingAssets 下的文件路径,利用路径助手处理路径,读取文本文件(.txt),返还文件的内容(字符串) 读取配置文件的方法:根据提供的字符串和对应的处理方法处理字符串 WWW 和 UnityWebRequest 的写法不同,使用的时候二选一即可(建议使用 UnityWebRequest) Web 端利用 UnityWebRequest 读取文件,其他平台利用 IO 流读取(如果未经过路径助手处理,则只有 PC 端可以用 IO 流读取文件,其他平台仍然需要用 UnityWebRequest 读取文件) #...
6.7k 6 分钟

# 观前提醒 项目会在 GitHub 中开源,链接:https://github.com/Maikire/Unity/tree/main/UnityFramework/A simple ARPG character framework # 框架设计 角色状态类:角色的基础信息和基础行为(抽象类) 角色的动画:因为动画参数的名字可能会改变,所以单独做一个类储存名字 角色的移动方式:提供移动的方法,由输入控制类调用 输入控制:处理玩家的输入方式,例如:摇杆、键鼠、手柄......(本章以这个摇杆为例) 角色选择器(可选):选中目标后显示选中特效 # 代码 #...
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...
988 1 分钟

# 资源管理器 需要生成资源配置文件 利用配置文件读取器读取配置文件 对外提供查找文件的方法(输入文件名即可得到对应的文件) 代码如下: ResourceMangerusing System.Collections.Generic;using UnityEngine;namespace Common{ /// <summary> /// 资源管理器 /// </summary> public class ResourceManger { // 名称,路径 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...