前言
项目中使用的基本角色控制脚本是由 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
谢谢分享
感谢分享
有个疑问 粒子系统是如何汉化的~
@尼普顿:unity hub在安装时有语言的扩展选项,或者官网上也有中文本地包,下下来安装一下就有中文页面了
正在找相关教程,感谢分享~
很棒棒!!
@Onyx:感谢