3.8k 3 分钟

# 简单介绍 # UIBulider 的使用 UIElement 是一种类似于 Html 形式进行界面开发的方式,创建的 EditorWidow 包括以下 3 个文件。 C#- 代码控制界面逻辑 类似于 js Uss - 样式控制器 类似于 Css Uxml - 基础骨架模板 类型 Html UIBulider界面 # 双击 Asset 打开编辑窗 public class DialogGraphEditWindow : EditorWindow{ private static VisualElement rootMain; [OnOpenAsset(1)]...
3.3k 3 分钟

状态机是对状态模式的一种使用。用于独立处理在各个状态的具体情况和转换关系。 # 开始 当我们需要处理带流程响应的问题时,可以将其抽象为状态问题。 例如下图的我们需要处理 OnEnter、OnUpdate、OnExit 三个部分。 # 有限状态机 有且仅有可能处于一种状态,解决状态区分和转换问题。 有限状态机是下列几种状态机的基础,下面的状态机都基于有限状态机进行相关功能的扩充。 # 转换方式 在状态机中,我们需要使用一种转换方式来进行状态切换,在 Unity 的 Animator 中使用条件参数进行跳转。我们可以使用类似事件的方式来跳转、或者使用任意能够保证正确进行 原状态到目标状态...
1.9k 2 分钟

# 说明 在 URP 中 Unity 通过定义 RenderFeature 来编写自定义后处理效果,实现 SRP渲染管线 。 Error: Evaluation failed: TypeError: Cannot read property 'initialize' of undefined at __puppeteer_evaluation_script__:3:32流程如上 # Step1 编写后处理 Shader # Setp2 编写 Render Feature # Render Feature Render Feature 是一个处理集,继承自...
1.1k 1 分钟

将指令抽象为一组字节码,通过字节码的排列组合定义游戏行为,使得玩家或者策划能够自由设计游戏行为(例如 AI)。 数据驱动 让游戏逻辑脱离编码的限制,赋予数据 行为。 class Program { static void Main(string[] args) { // 使用这样的一种数据驱动的模式来编程,让游戏逻辑脱离编码的限制,赋予数据 行为 // // 使用堆栈存储指令,每次将堆栈中的指令出栈执行再入栈,直到栈空 var stack = new Stack<int>(); var actlist = new...
2.8k 3 分钟

通过创建一个类来支持新类型的灵活创建,其每个实例都代表一个不同的对象类型。 # 问题 试着想象一下,如果我们来设计一个怪物的数据我们会如何? 名称 种族 生命值 攻击力 … 以及我们的 Attack 行为。 可以想到诸如这些的属性,在以这些数据的基础上来派生更多的特殊化数据。 # 传统设计 按照我们的常规思维,我们很容易想到如下的设计方案。 public abstract class MosterBase{ public string Name { get; set; } public int Hp { get;...
55 1 分钟

Ase 是一个节点化的 Shader 编辑插件,支持各种渲染管线。 Ase 创建 Shder 后的主界面如下图所示: 详细说明
134 1 分钟

之前我打包 vs 开发的小项目时都会将 Debug 整个文件夹复制下来使用。 最近突然发现,可以使用另一种方式来方便的打包项目。 在需要发布的项目右键选择发布即可。 虽然这种方式生成的 exe 没有安装过程,可能不太规范,但是很容易操作。 安装后的程序可以在 windows 的程序列表中查看
2.1k 2 分钟

# 复杂光照 在之前的学习中,我们使用的都是单一光照,实际在游戏中可能存在多个光源,不同的光源会互相影响构成真正的光照系统,在这一节我们将实现一个真正可用的光照模型。 # 渲染路径 Rendering Path 📖 决定了光照是如何应用到 Unity Shader 中的。 我们只有为 Shader 正确地选择和设置了需要的渲染路径,该 Shader 的光照计算才能被正确执行。 🏷渲染路径的分类 前向渲染路径(Forward Rendering Path) 延迟渲染路径(Deferred Rendering Path) 顶点照明渲染路径(Vertex Lit Rendering...
2.9k 3 分钟

InputSystem 是 Unity 新推出的输入管理系统。 相比传统的输入系统, InputSystem 支持对设备拔插状态监听和自定义按键映射。 # 以代码的方式运行 # 简单使用 以下为获取使用游戏手柄的方式。 // 获取最后使用的游戏手柄var gamePad = Gamepad.current;// print(gamePad.name);// 持续判断按键按下if (gamePad.dpad.up.isPressed){ print("按下 上");}// 按下一次执行一次if...