Starry的Unity笔记
文章平均质量分 92
StarryJam
这个作者很懒,什么都没留下…
展开
-
Unity通用有限状态机的从零搭建手册(八):最终试炼
本章作为整篇文章的的最后一节,将使用我们搭建的状态机系统完成一个相对复杂的综合案例,以测试该系统在工程中的可行性,以及记录一些在实际应用当中的问题作为我们未来改进方向的参考。案例中与状态机系统无关的一些细节会尽量较少着墨,文章末尾我会把项目地址贴上感兴趣的读者可以下载下来运行和阅读代码。需求分析该案例中玩家和电脑AI会各自通过指令的方式控制一个单位进行移动和射击,玩家通过WASD控制移动,鼠标控制射击方向,AI则会在玩家与一定范围内时追击玩家,并在足够靠近时进行射击。我们的状态机系统将会被应用在单位的行原创 2022-03-15 22:54:55 · 1653 阅读 · 1 评论 -
Unity通用有限状态机的从零搭建手册(四):优化之路(1)
Unity通用有限状态机的从零搭建手册(四):优化之路(1)核心痛点计算机的发明是为了替人类完成无聊的复杂劳作,解放生产力,软件工程的发展更是给软件提出了可维护性强易使用等要求,如果一个程序在使用时过于繁琐,那他一定有可以改进的空间。上一章的Demo我们已经尝试了应用我们写好的状态机,但是不难发现其实有很多的问题,比如配装前需要的用new去新建许多实例,并且所有的状态和条件都散落在各个文件中,后期维护的时候很难一下子看到这个类所拥有的所有状态,这些问题会阻碍我们状态机应用在一个稍有规模的项目当中。本章就原创 2022-03-15 22:38:13 · 2378 阅读 · 0 评论 -
Unity通用有限状态机的从零搭建手册(七):新的挑战
复合状态机来试想一个问题:如果一个游戏角色有待机、移动、攻击、死亡四个状态,他们之间的转化关系应该是什么样的?一般来说待机、移动、攻击这三者是可以互相转化的,而死亡状态则可以由这三种状态单项转化而来:如果我们继续丰富角色的行为,比如施法、跳跃、下蹲,无论这些类的转化关系如何,无一例外地它们都会有一条指向死亡的箭头,这样的状态转化关系图势必变得十分繁琐,但如果我们把除了死亡之外的全部状态都包含于叫做存活的父状态中呢?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-coK原创 2022-03-15 22:48:41 · 1182 阅读 · 0 评论 -
Unity通用有限状态机的从零搭建手册(六):优化漫漫(3)
经过了上两章的努力,状态机的结构已经有不错的优化,我们加入了工厂模式,大幅精简了繁琐的配置过程结,然后又使用了反射机制,进一步给工厂做了一次“工业革命”,完成了状态的自动化生产。而这一章我们将针对用法上再进行一次优化。获得主体的完全控制权之前的小方块Demo中我们的状态机看似已经比较完善,但是其实忽略了实际在投入使用过程中会遇到的一些问题,我们来看Cube类中的成员变量和属性:为了让状态类可以控制主体,条件类可以读取主体的一些信息,我们将他们的访问权限设成了public,而真正的项目中,一个类很多的原创 2022-03-15 22:47:50 · 1365 阅读 · 0 评论 -
Unity通用有限状态机的从零搭建手册(三):雏形初见
状态机的创建和初始化在上一章我们完成了框架的搭建,但是并没有提及如何创建一个完整的状态机以及如何初始化它,这一章我们就来尝试解决这一问题。上一章中提到状态机如果脱离主体将失去意义,所以我们状态机的构造函数需要一个主体的参数,并且我们不希望外部可以改动状态机的主体,我们将set访问器改为private:/// <summary>/// 状态机/// </summary>public class FiniteStateMachine<T> : IFSM<T&原创 2022-03-15 22:45:39 · 2125 阅读 · 1 评论 -
Unity通用有限状态机的从零搭建手册(五):优化漫漫(2)
Unity通用有限状态机的从零搭建手册(五):优化之路(2)引入C#反射机制前面我们已经实现了用ID来代替新建实例的配置过程,而这一点的前提是我们可以通过ID在一个状态机中唯一确定一个状态(或条件);而上次优化并没有完全解决矛盾而是将其转移到了工厂当中。那么我们是不是可以用相似的思路来彻底解决这一问题呢?我们可以发现状态类和状态ID其实也是一一对应的关系,那么一定有一种方式可以让程序自动化地生成实例,而不需要每次新增类型的时候人为地添加映射关系,我们遵循”只要是让人觉得麻烦的地方就一定有偷懒余地“的原则原创 2022-03-15 22:42:52 · 1677 阅读 · 0 评论 -
Unity通用有限状态机的从零搭建手册(二):框凿地筑基
Unity通用有限状态机的从零搭建手册(二):框架搭建三大基础类创建上一章末尾梳理了一下几个最重要的类的职责,这一章我们将以此为基础构建一个框架首先在Unity中创建FiniteStateMachine、State、Condition三个类因为我们要搭建的是通用的状态机,保证任何的类都可以适用而不需要针对不同的类重新编写,所以我们首先要做的就是给这三个类定义为模板类,并且去掉MonoBehaviour的继承,然后备注一下将要实现的功能://状态机类public class FiniteStat原创 2022-03-15 22:33:13 · 1855 阅读 · 0 评论 -
Coroutine的浅析和简单实现
前言最近接了UI的活,需要配合美术把做好的UI接入到游戏里,考虑到未来一定会有UI动画的需求,我希望在设计UI架构的时候将简单的动画需求分离出来交给美术编辑,解放自己的生产力,于是做了一套简易的UI动画类。实现了动画类之后我遇到了第二个棘手的问题:为了方便美术预览,一定不能让他运行游戏的时候才能看到动画的效果,那我的生产力是解放了,美术的工作反而会变得更麻烦,这是我不希望看到的,然而我的整套UI和动画都是基于协程实现的,可是Unity的协程只允许Monobehavier开启,而且编辑器模式下是没发启原创 2022-03-15 22:21:20 · 472 阅读 · 0 评论 -
Coroutine的打开和关闭
Unity携程的一些打开关闭方式的实验原创 2022-03-15 22:15:42 · 614 阅读 · 0 评论