前言
项目中使用的基本角色控制脚本是由Unity Learn中的官方教程John Lemon's Haunted Jaunt(很不错的教程)中的示例控制脚本改进而来。其基本思路是根据输入计算一个2维向量lookDirection作为角色的“面向”,并根据这一向量移动刚体以及播放动画。
它能够保证对于任意角度,角色的移动速度都保持一致,并且这一向量对于脚印效果的实现很重要。
如有疑问可以查阅底部的教程链接或直接下载脚本。
部分脚本参考
基本思路:
首先来梳理一下想要的人物足迹的特性:
- 在人物移动时生成,并在一段特定时间后消失,最好有个淡出效果
- 足迹会沿人物移动轨迹左右交互排列
- 足迹的指向与人物移动方向相同,也就是说在人物转向时,足迹也应旋转对应的角度
第一反应:建一个脚印的prefab,利用动画器实现淡出效果,用脚本实现脚印的生成、销毁、镜像与旋转。之后深入一想脚本大概要怎么写,感觉头大的不行,又想到了Hierarchy里面被FootStep12345678塞得满满当当的壮丽场面..还是换个方法吧
转念一想:unity的粒子系统似乎可以满足所有特性:生成淡出销毁全自动,跟随人物也是基本操作,比较存疑的就是用脚本控制粒子的镜像与旋转。
之后当然就是搜索有没有现成的轮子可以用,别说,还真在unity forums找到了一个官方比较完美的粒子系统足迹效果。唯一的问题就是它是一个3D示例,而我的游戏则是纯2D。
所以现在的问题就是如何将这一方案转换在2D中实现。
先来分析一下它的实现脚本:
用来生成脚印粒子的核心代码是Update()中的这一部分:
其中比较重要的有两个量:transform.right与transform.rotation
transform.right:物体X轴的方向,垂直于物体的面向。脚印需要在此方向上左右偏移。
transform.rotation.eulerAngles.y:物体Y轴方向上的的旋转角度,在这个示例中也是它的移动方向旋转的角度。
俯视角的2D游戏中并不经常直接操作角色对象的旋转,所以这两个量在脚本中没有意义,需要找一个与它们类似的变量来替代它们的功能。
而在之前的角色控制脚本中,恰恰有一个很重要的二维向量:lookDirection,从某种意义上它就是角色的“面向”,能够起到与3D中的transform.front类似的效果。
果断使用lookDirection向量进行等效替换:
transform.right与transform.front垂直,也就是说我们需要一个与lookDirection垂直的向量。
而两向量垂直怎么算来着?X1X2+Y1Y2=0嘛。
transform.right * gap * dir 等效替换为 new Vector3(lookDirection.y * gap * dir, -lookDirection.x * gap * dir, -5)
transform.rotation.eulerAngles.y为物体面向旋转的角度,那么直接计算lookDirection与Vector2(0, 1)向量的夹角就完事了。
transform.rotation.eulerAngles.y 等效替换为 Vector2.Angle(new Vector2(0, 1), lookDirection)
OK!脚本的基本思路完成了,之后就是设置粒子系统了。
创建足迹系统使用的脚印材质:
创建一个默认材质,然后将它的shader更改为Legacy Shaders/ Particles/ Alpha Blended,将脚印的sprite拖拽到选框中。重命名为footPrint。
设置粒子系统:
在Player对象下新建一个粒子系统,并命名为FootStep
如图设置粒子系统:
最后,根据情况修改角色控制脚本并调整参数
之后就是快乐的测试->改代码->测试->改代码循环往复...
最终效果:
第一次写教程,啰里啰嗦写得不好还请见谅哈
链接:
- 官方提供的使用Ringbuffer实现的3D脚印效果示例:https://pan.baidu.com/s/1g9s9GIiILRZpMVeQ640_5Q 提取码:e8g6
- 项目中使用的Charactor Controller脚本(项目本身太大了就不放了):https://pan.baidu.com/s/1a6A46aG1fD2ub3d__P4Nvg 提取码:rqn1
参考:
- https://learn.unity.com/tutorial/wan-jia-jiao-se-di-2-bu-fen?projectId=5dfa9a5dedbc2a26d1077ca8#5e391a9dedbc2a00227146d5 John Lemon's Haunted Jaunt 玩家角色 第二部分
- https://forum.unity.com/threads/particle-system-ringbuffer-demo.740207/ Particle System Ringbuffer demo
暂无关于此日志的评论。