本文仅供本人学习自用)
1
【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 4.动画控制器制作_哔哩哔哩_bilibili
移动层的基本逻辑 ↓
我们在动画中再建一个层,并默认连一个空状态。这样底层权重为1的跳跃层默认不会影响我们的移动层。
在动画资源中,可以修改动画片段,只保留某一部分。
跳跃逻辑为上升-滞空-下落,所以只截取了完整动画片段中的一小部分。
null转跳跃,不需要等动画播放完,且过渡时间减少为0.1,用一个bool值isJump==true作为切换条件
跳跃转滞空,达到最高点,其实也就是跳跃动画播放完,所以不需要取消勾选,然后跳跃自动转滞空(后续写代码控制)
滞空转下落,则bool值 isFall==true来作为切换条件,滞空时间未知,所以不需要等待播放完毕,取消勾选。
下落转null,即isFall==fasle,且isJump==false时。经过测试,不需要等待下落动画播放完,直接切换回null。所以取消勾选
另外,从高台跳下时,我们应该直接下落。所以从null →下落。条件是isFall==true;当接触到地面时,又设回来,isFall==false。
当在下落过程中二段跳时,也需要再转回跳跃状态。连线无需过渡,且条件应为 isJump==true 和 isFall==false。
跳跃层的基本逻辑 ↓(其中JumpLayer层为本层,在RunLayer启用时,若启动了本层,会直接覆盖上层的动画。)
2
【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 5.角色移动逻辑_哔哩哔哩_bilibili
代码控制: float h 应作为成员变量,避免在Update当中重复创建。
为-1时,即向左,我们让人物的旋转参数=(0,-90,0)。如果不确定,可以在游戏场景中实际测试一下。
顺带一提,transform.rotation是一个四元数,所有要先转换。
为0时则不会发生改变,仍然保持之前的朝向。
而移动时,不论朝向如何,玩家永远只是往自己的正前方进行移动。如果无关左右判断,仅需要判断是否有所移动即可。在我们设置条件时,不要使用额外的判断条件,而是使用移动参数本身。
当没有移动时,参数为0;当有移动时,参数不为0。
如果输入不是零,则移动,是零,则不移动。
使用#region和#endregion
让代码便于整理和阅读。后续在这里面添加逻辑即可。
3
【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 6.角色跳跃逻辑_哔哩哔哩_bilibili
目前为止,用到的变量。 随着时间的增加,当前速度会越来越小,直到为负值时下落。
在单次按下空格键时,设置isJump,而且给当前速度赋值,它为初始值,也就是最大的时候。
当动画状态为jump时(在播放跳跃动画时),角色往上移动。其中当前速度是要不断减小的,这样当速度小于0时就进入了下落状态。
如果我们触碰到地面,他就会停下来。
判断地面的条件是,当前平台的Y值,与我们unity的碰撞器+标签判断法不太相同。
public float nowPlatformY;(不写默认=0)
直接改transform。position。y是改不了的,所以需要中介值。
这一步是为了避免落地时“落到地里面”,把它的位置修正。这个平台Y值后期是会改变的。
还是同一条原则,不要使用过多的if判断,而是直接设置他的值,并且让他与条件自身相关,可以让代码耦合度大大降低,而且准确。
关于二段跳:使用一个int来记数即可。 跳一次就index++,并且只有按下空格且index!=2时才能执行跳跃逻辑,落地时index重新=0。
4
【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 7.影子逻辑相关_哔哩哔哩_bilibili
5
平台逻辑,当玩家x值在平台的左右坐标之间,并且y轴大于等于平台的y轴(高度)时,就认为玩家是可以落到这个平台上面的。
使用Gizmos类,OnDrawGizmos 函数。可以在编辑器模式下绘制图形,达到数据可视化。
【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 10.平台数据类_哔哩哔哩_bilibili调用里面的绘制方法,需要两个参数,起始点和结束点。
因为两个都是Vector3类型,所以不能直接使用宽高变量(float
有的平台有影子,有的平台可以主动跳下,脚本定义一个公开的bool,在外界根据不同的平台去勾上就好了。