美文网首页成都匠心互动
Unity3D粒子沿路径运动

Unity3D粒子沿路径运动

作者: 爱喝粥的西瓜 | 来源:发表于2017-06-20 00:15 被阅读65次

最开始的时候,想制作沿着路劲运动的闪光箭头,由于对于粒子的应用有一些简单的了解,在制作中,首先想到是使用粒子的特性。来制作,苦于unity3D的粒子系统particleSystem没有沿路径运动的选项,遂决定自己动手,丰衣足食。
具体代码如下
<pre>
using UnityEngine;
using System.Collections;

[RequireComponent(typeof(ParticleSystem))]
public class MyPartileFlow : MonoBehaviour
{
// 粒子系统
ParticleSystem _particleSystem;
// 粒子
ParticleSystem.Particle[] _particle;
// 粒子个数
int arrCount = 0;
// 粒子运动路径
public Transform[] target;//运动路径
// 粒子速率
public float speed = 5;
// 到中转点的距离检测
public float nearClose = 0.1f;
void Awake()
{
_particleSystem = GetComponent<ParticleSystem>();
_particleSystem.simulationSpace = ParticleSystemSimulationSpace.World;
_particle = new ParticleSystem.Particle[_particleSystem.maxParticles];
}
void Update()
{
if (target.Length != 0 && _particleSystem && _particleSystem.isPlaying)
{
arrCount = _particleSystem.GetParticles(_particle);//获取到当前激活的粒子
//Debug.Log(arrPar[0].lifetime);
for (int i = 0; i < arrCount; i++)
{
for(int j = 0; j < target.Length; ++j)
{
if (j < target.Length - 1)
{
Vector3 dir = target[j + 1].position - target[j].position;
dir = dir.normalized;
// 如果粒子刚刚被发射出来,赋予粒子指向第一个目标点的速度
if ((target[0].position - _particle[i].position).magnitude < nearClose)
_particle[i].velocity = (target[1].position - target[0].position).normalized * _particleSystem.startSpeed;
if (_particle[i].velocity.normalized == dir)
{
// 如果粒子靠近了某个目标点
if((target[j + 1].position - _particle[i].position).magnitude <= nearClose )
{
// 如果到了最后的目标点,粒子保持当前速度一直向前
if ((j + 2) >= target.Length)
continue;
// 如果没有,改变粒子的速度指向下一个目标点
dir = target[j + 2].position - target[j + 1].position;
dir = dir.normalized;
_particle[i].velocity = dir * _particle[i].velocity.magnitude;
_particle[i].position = target[j + 1].position;
}
}
}
}
}
_particleSystem.SetParticles(_particle, arrCount);//再把更新过的粒子数据设置回去
}
}
}
</pre>
在制作的过程中,原本是想用粒子的生命值,来判定粒子是否刚出生,可是在实际的使用中,发现粒子的生命值变化较为诡异,达不到想要的效果,不知是自己的使用的方式不对,还是对粒子生命的理解有偏差,如果有前辈大能,能指点一二,小生当铭感于心。

相关文章

  • iOS objective-c 粒子效果,加载动画

    先来看看效果: 动画实现: 该动画由一组运动的粒子组成。 粒子先沿螺线圈(半径逐渐变大的圆弧)运动,再沿圆圈运动。...

  • Unity3D粒子沿路径运动

    最开始的时候,想制作沿着路劲运动的闪光箭头,由于对于粒子的应用有一些简单的了解,在制作中,首先想到是使用粒子的特性...

  • 关于div沿斜线运动的animation动画

    参考文章:CSS3: 利用分层动画让元素沿弧形路径运动 问题: 要使div沿水平或者竖直方向移动是很简单就能实现的...

  • 粒子运动

    https://jparticles.js.org/#/examples/quick_start 很棒的效果

  • 12.有心力场中的运动

    两个粒子的运动,可以化为单个粒子在有心力场中的运动,所以总是要考察有心力场中粒子的运动。 将两个粒子的哈密顿量经过...

  • 粒子动画

    粒子动画 效果:随机绘制一条路径,点击开始按钮,粒子动画 实现思路 1.搞个画板绘制路径,自定义view 2.给自...

  • 希格斯粒子现形。

    粒子物理学家寻找新粒子的终极武器就是对撞机。科学家将粒子加速,给予它们极高的运动能量,然后将两束相向运动的粒子瞄准...

  • 不存在时间旅行

    时间是什么?事物的变化,宇宙间所有粒子的不断运动就是时间。 宇宙间所有的粒子不断的运动...

  • swift 实现粒子运动效果

    粒子运动的实现: 创建发射器 CAEmitterLayer 创建粒子 CAEmitterCell 实现如下: 欢迎...

  • 14.平面波的分解

    沿某一确定方向以一确定的动量作自由运动的粒子,在经典力学中,其轨迹就是一条直线,而在量子力学中,其波函数其实就是平...

网友评论

    本文标题:Unity3D粒子沿路径运动

    本文链接:https://www.haomeiwen.com/subject/swanqxtx.html