使用 Unity 粒子系统实现 2D 人物足迹效果

作者:Onyx
2020-03-31
28 27 6

前言

项目中使用的基本角色控制脚本是由 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

如图设置粒子系统:


最后,根据情况修改角色控制脚本并调整参数

之后就是快乐的测试 -> 改代码 -> 测试 -> 改代码循环往复...

最终效果:


第一次写教程,啰里啰嗦写得不好还请见谅哈

链接:

  1. 官方提供的使用 Ringbuffer 实现的3D 脚印效果示例:
    https://pan.baidu.com/s/1g9s9GIiILRZpMVeQ640_5Q
    提取码:e8g6
  2. 项目中使用的 Charactor Controller 脚本(项目本身太大了就不放了):
    https://pan.baidu.com/s/1a6A46aG1fD2ub3d__P4Nvg
    提取码:rqn1

参考:

  1. https://learn.unity.com/tutorial/wan-jia-jiao-se-di-2-bu-fen?projectId=5dfa9a5dedbc2a26d1077ca8#5e391a9dedbc2a00227146d5
    John Lemon's Haunted Jaunt 玩家角色 第二部分
  2. https://forum.unity.com/threads/particle-system-ringbuffer-demo.740207/
    Particle System Ringbuffer demo

本文为用户投稿,不代表 indienova 观点。

近期点赞的会员

 分享这篇文章

Onyx 

奇怪的人。 

您可能还会对这些文章感兴趣

参与此文章的讨论

  1. ayunero 2020-03-31

    谢谢分享

  2. 尼普顿 2020-04-01

    感谢分享
    有个疑问 粒子系统是如何汉化的~

    • Onyx 2020-04-01

      @尼普顿:unity hub在安装时有语言的扩展选项,或者官网上也有中文本地包,下下来安装一下就有中文页面了

  3. JY046 2020-04-03

    正在找相关教程,感谢分享~

  4. CodingGhost 2020-04-03

    很棒棒!!

  5. 尼普顿 2020-04-05

    @Onyx:感谢

您需要登录或者注册后才能发表评论

登录/注册