问题:Unity粒子系统(Particle System)移动时发射粒子(RateOverDistance)不起效

问题

期望在人物移动时生成粒子,停止移动时不再生成


期望的效果.gif

查到Unity的粒子系统(Particle System)中有属性RateOverDistance:根据移动距离发射粒子,不移动时不发射。恰好可满足当前需求

实际使用时发现,不管怎么移动都不发射粒子,但RateOverTime(随时间推移发射粒子)的功能是正常的

解决方案

粒子系统有一属性:EmitterVelocity,它有2种模式

  • Transform:通过Transform中Position的变化计算粒子系统的移动速度
  • Rigidbody:将刚体(若有)的速度作为粒子系统的移动速度

看了上述解释即可想到,若EmitterVelocity设置为Rigidbody模式,当该粒子系统没有刚体时,系统会认为该发射器是不动的,因此移动速度为0,因此移动距离为0:因此RateOverDistance不会发射粒子

所以将EmitterVelocity设置为Transform即可

解决过程

实践时,当发现RateOverDistance不起效时,没有深究,而是考虑通过自行控制粒子对象的显隐来实现期望效果

但发现,若在人物停止移动的时候隐藏粒子对象,所有粒子会立刻全部消失,非常突然,表现不好


表现不好的效果.gif

最终还是老老实实地搜索RateOverDistance不起效的原因,简单地(修改了一个已有的属性项)解决了这个问题

反思

问题确定后,若解决不了,不要轻易尝试更换问题(这是逃避真正问题的一种表现)

不解决真正的问题,它会一直折磨着你,通过各种方式来干扰你以凸显它的存在,逼迫你必须面对它

仔细研究问题会发现,其实它可能并没有那么难

与其通过各种旁门左道去避开真正的问题,不如迎难而上
确认无能为力(该问题真的无解)后,再思考如何拉近现实与期望的差距
尽可能逼近那个并不存在(或凭借当前力量和现状无法得到)的最优解决方案

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么...
    编程小火鸡阅读 3,924评论 2 34
  • 转自:https://blog.csdn.net/dingxiaowei2013/article/details/...
    豆铮阅读 1,309评论 0 2
  • 1.Rigidbody overview 刚体是可以让一个GameObject(以下简称游戏对象)表现出物理行为的...
    HelloWorld_de97阅读 515评论 0 0
  • Unity技术面试题 一:什么是协同程序? 答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话...
    沐冉阅读 2,921评论 1 19
  • 有些事情,难以启齿。 其实,也没什么好羞涩的。 大家都上过班,都了解彼此的心情。 努力工作,剩下的留给天意。 敢于...
    乌龟的慢生活阅读 194评论 0 0