7k 6 分钟

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

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

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

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

# 目的 C# 下传统的数组不支持 Linq 库,所以制作一个助手类,用来实现 Linq 库中的部分功能 # 代码 需要提前知道的知识点 委托 泛型委托 泛型方法 泛型约束 扩展方法 Lambda 表达式(非必要,调用的时候可能会用到) 排序算法(本篇中使用的是选择排序,算法的选择依据具体情况而定) 代码如下: ArrayHelpernamespace Common{ /// <summary> /// 提供一些数组常用的功能 /// </summary> public static class ArrayHelper...
2.9k 3 分钟

# 单例模式 属于创建型模式,是常用的设计模式之一。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 适用性:场景中存在唯一的对象,需要频繁的使用 CSharp 类与 Unity 脚本之间是有差别的,接下来将分开介绍 # CSharp 类 # 懒汉式,线程不安全 这种方式是最基本的实现方式 按需加载 /...
12k 11 分钟

# 观前提醒 项目会在 GitHub 中开源,链接:https://github.com/Maikire/Unity/tree/main/UnityFramework/A simple Unity UI framework # UI 框架 这是一个简单的 UI 框架,用于统一管理 UI 和 UI 事件 # 需求分析 UI 窗口(Canvas)的统一管理(记录 / 隐藏所有窗口,提供查找窗口的方法) UI 事件管理 UI 流程控制(例如:打开多个 UI 窗口时,按下 Esc 关闭最后打开的窗口) # 核心类 UI 管理类 UIManager 用于管理(记录 /...
5.8k 5 分钟

# 变换组件助手类 在游戏开发的过程中,经常需要对变换组件(Transform)进行各种操作,所以可写一个工具类,需要什么方法直接调用即可。 为了更简单的调用,可以使用扩展方法 # 代码 代码如下: TransformHelperusing System.Collections.Generic;using UnityEngine;namespace Common{ /// <summary> /// 变换组件助手类 /// </summary> public static class TransformHelper {...
4.1k 4 分钟

# JSON 解析 有关 JSON 的介绍,请看这篇文章 JSON 解析需要用到反射,这样就能实现 JSON 以及对应变量的动态更新。 JSON 的本质是一个字符串,因为有指定的格式,所以可以按照符号来切分(比如:':' 和 ' " ' 和 ',' )。这样就能获得变量的名字和对应的值。 由于字符串需要经常变动,所以使用 StringBuilder 代码如下: JSON解析 public class JsonHelper{ private static StringBuilder...