考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了
C#篇、unity通用篇、unity3D篇、unity2D篇
。
- 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的同学入门。
- 【unity通用篇】:主要讲解unity的基础通用的知识,包括unity界面、unity脚本、unity资源管理、unity动画、unity摄像机等,适合unity初学者入门。
- 【unity3D篇】:主要讲解unity3D的知识,unity3D角色、unity3D物理系统、unity3D光照等,适合只想做2D游戏的开发者学习。
- 【unity2D篇】unity2D篇:主要讲解unity2D的知识,包括unity2D角色、unity2D物理系统、unity2D光照等,适合只想做3D游戏的开发者学习。
这样方便大家按需选择性的去学习,比如有编程基础的大概率可以直接从unity通用篇开始入门,没有编程基础的建议从C#篇开始学习。只想做2D游戏的话,可以直接从unity2D篇开始学习,3D篇大概率就不需要看了,节约学习时间成本。
文章目录
- 什么是子状态机
- 创建子状态机
- 编辑子状态机
- 注意:子状态机和外部状态的相互连接方式。
- 实战
- 专栏推荐
- 完结
什么是子状态机
子状态机可以将一组相关的动画提取出来,放入同一个状态机内。它的主要作用就是某一个状态是由多个动作状态组合而成的复杂状态,比如某一个技能它是由3段动作组合而成的,跳起、攻击、落下。当我们释放这个技能时会连续播放这3个动作,那么我们完全可以把它们放到一个子状态机中。
比如人物拿枪有一套动画,拿刀有一套动画,就可以创建两个子状态机,把不同的动画放到子状态机里,再在子状态机之间创建过渡,实现不同武器的切换,动画也进行切换
创建子状态机
在Animator Controller窗口中右键->Create Sub-State Machine
编辑子状态机
双击进入子状态机。可以看到,子状态机与普通的状态机几乎相同,唯一的区别在于多了一个回到上层的入口((Up)Base Layer)。
注意:子状态机和外部状态的相互连接方式。
- 假如没有创建子状态机和上一层状态的连接的话,会一直卡在子状态机最后一个动画状态一直播放最后一帧。
- 如果连线选择的是状态机的BaseLayer的话,播完子状态机的动画回到上一层的默认动画。
- 连线时也可以手动选择切换到上一层的哪个动画
连线完回到上一层也会自动添加连线。
灰色代表着切换不过去的状态。
实战
我们尝试将跳跃动画放入一个子状态机中。首先创建一个子状态机,命名为Jump,然后双击进入。
接下来导入跳跃的动画。一般跳跃动画有三个,分别是起跳、降落、落地
。
因为在跳跃过程中,落地的时机是不确定的,因此我们将Land设置为当前状态机的默认状态,且从Fall到Land的切换不需要等待动画片段播放完成。
添加一个isLand参数,用来判断当前是否落地。如果落地,则执行从Fall到Land状态的切换。
然后在代码中通过Animator.CrossFade()方法触发该状态机。该方法需要传入子状态机名称和过渡时间。
_animator.CrossFade("Jump",0.1f);
看下效果
可以发现落地后会暂停一会儿才会切换到奔跑动作,这是因为落地动画播放完成后,状态先转换到Idle,然后再转换到Move导致的。
我们可以将Land直接连接到上层的Idle和Move,使其能够快速切换到相应的状态。
看下效果
专栏推荐
地址 |
---|
【零基础入门unity游戏开发——C#篇】 |
【零基础入门unity游戏开发——unity通用篇】 |
【零基础入门unity游戏开发——unity3D篇】 |
【零基础入门unity游戏开发——unity2D篇】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架/工具集开发】 |
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!