Unity3D基础42:AnyState大法
前文:https://blog.csdn.net/Jaihk662/article/details/88384315(状态机实现人物站立、跑步与后退动画切换)
一、AnyState
哪怕是最简单的角色,一般来讲都可能需要6-7个动画以上,例如一些最基本的:跑步、后退、受击、跳跃、攻击、死亡等等,这个时候,状态机的规模就已经不能算小了,而更主要的是假设有n个状态,它们之间连线可能有n²个这么之多,不但难以维护,每次光看就头皮发麻,状态机变成了蜘蛛网
为了解决这种问题,往往有3种简单解决方法:
①减少一些连线:例如从跳跃到跑步,它们之间可以没有连线,也就是从跳跃状态到跑步状态,中间必须要经过站立状态等等,优点的话当然就是线的数量变少了,但是缺点也很明显:代码实现变复杂、优化效果不明显需要死扣细节、容易出现BUG、动画过渡之间不够自然等等等等……
②分层管理,也就是新建子状态,这个不想多说,看似管理的挺好,但是结构仍然复杂,会有种自己骗自己的感觉,当然也没什么人用就是了,往往用了也不是最终目的
③AnyState大法:也就是本篇文章所讲的方法,一句话说就是一个AnyState向所有状态连线,一个例子如下:
AnyState的用法前面其实已经讲过了,就是所有状态的代表,如果AnyState向状态B连线,条件为A,那么同等于所有状态都向B连了一条条件为A的线
说白了,AnyState大法就相当于是动画池,不管你当前的状态,我要你现在干什么,你就立刻去干什么
PS:其实在正常的大型游戏项目里,也就是一个角色甚至有50多种动画的情况,往往以上三种方法都仍然不适用,这个时候是另有更复杂解决方案的,当然这里就不提了。。
二、状态设置与冲突
问题①:假设状态A向状态B和状态C各有一条连线,当两个连线条件同时满足时,会执行哪一个呢?
解决方法:选择状态A,调整条件列表中的顺序即可,在前面的会先被判定
问题②:选用了AnyState之后,我怎么调整任意两个状态之间的动画过渡?
其实很简单,只不过这个问题还真的会有不少人问
问题③:因为AnyState也包含了自己,所以当满足某个状态条件时,动画会不停的自己切换到自己,从而出现鬼畜的情况
这也是实现AnyState大法的一个常规做法:
- 定义一个枚举类代表当前角色的状态(这里可以参考前文的代码)
- 所有条件全部设置为触发器触发
- 如果必要的话可以编写一个状态转移矩阵,也就是一个二维数组,p[x][y] = true/false表示当前是x状态,是否可以转移到y状态,如果可以则SetTrigger,当然p[x][x] = false
- 搞定,然后就是自己的代码功底了(非常建议使用状态设计模式),动画过渡也别忘了调整好
问题④:运行测试的时候,状态机窗口看不到效果
点下状态机所属的GameObject......
Unity3D基础42:AnyState大法相关推荐
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D...
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...
- Unity3D基础2:新建模型
前文:https://blog.csdn.net/Jaihk662/article/details/86743037(Unity3D基础操作) 一.尺寸与方向 尺寸:默认的方块(Cube)长宽高都是1 ...
- 【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D
转自:https://www.cnblogs.com/neverdie/p/How_To_Learn_Unity3D.html(http://www.cnblogs.com/neverdie/) Un ...
- Unity3D基础知识之Camera摄像机及其属性
Unity3D基础知识之摄像机Camera 一.简介 Camera:附加了摄像机Camera组件的游戏对象,向玩家捕获和显示世界的设备,同时在一个场景中摄像机的数量不限. 组件:Transform:变 ...
- Unity3D基础知识笔记
Unity3D基础知识笔记 一.Unity简介 1)Unity3D概念 2)Unity3D的特点 二.Unity3D的发展历史 三.软件安装 一.Unity简介 1)Unity3D概念 Unity是由 ...
- Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)
Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作) 一.属性介绍 1.主面板Particle System (1)Duration:粒子发射周期 图中,5.00即在发射5秒后进入下一个 ...
- Unity3D基础41:状态机实现人物站立、跑步与后退动画切换
一.状态机的建立 大部分情况下,当游戏内玩家没有任何操作时,肯定都是站立不动的状态,然而事实上,玩家不可能和木头人一样完全静止,这样显得非常不真实,给玩家带来的体验当然也会很差,所以基本上所有有角色的 ...
- Unity3d基础知识之Texture纹理、Shader着色器、Material材质、Rendering Mode
Unity3d基础知识之Texture纹理.Shader着色器.Material材质.Rendering Mode 一.纹理.着色器与材质 Texture(纹理):应用于网格表面上的标准位图图像.Un ...
- 【Unity3D基础2-1】Unity3D从业介绍
一.引言 C#基础篇幅更新完毕,进入到Unity3D基础教程 这篇介绍Unity3D的从业方向 二.正文 Unity3D的就业方向有哪些? Unity3D是一款多平台.综合型游戏开发工具,我们熟知的& ...
最新文章
- 使用镜像加速 Rtools 下载与安装
- 终于有人把中医“数字化”了 | 极客视频
- 酷狗音乐的大数据实践
- 程序员修神之路--高并发下为什么更喜欢进程内缓存
- 上厕所时间超长也能被开除?法院:超出正常生理需求范围!
- CSS div 塌陷问题
- dp------最长公共子序列问题
- [HAOI2006] 聪明的猴子
- python获取文件修改时间_Python-获取文件最后修改时间 | 学步园
- MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现
- Word365英文版,文字垂直居中
- 世界一流学科排名计算机科学,2019上海软科世界一流学科排名计算机科学与工程专业排名哥伦比亚大学排名第22...
- 论文阅读《Characterizing BDS signal-in-space performance from integrity perspective》3
- activemq管理页面
- Nginx基础入门(一)
- html5及CSS的学习2
- 让人疑惑的STM32F4F7芯片
- JSONObject简介 - 月月鸟0820 - 博客园
- VTD解析XML( VTDGen、AutoPilot )
- 企业业务招待费的税前扣除,不要出现以下5个错误!
热门文章
- python处理excel的优势-用Python读写Excel文件的方式比较
- 学了python能干啥举例-第9p,Python是什么?学了Python能干什么?
- python画柱状图-python plotly画柱状图代码实例
- python有哪些用途-python是什么?python的用途
- python难学吗-我没有基础,能否学会Python?Python难吗?
- python基础代码大全-Python字典及基本操作(超级详细)
- 百度语音识别技术突破 巨头崛起
- js 异步执行_js执行机制:同步与异步(宏任务与微任务)
- Node-介绍与模块化
- 计算机网络实验5以太网链路帧实验,计算机网络实验-使用Wireshark分析以太网帧与ARP协议.docx...