Unity代码控制粒子运动轨迹路径极简代码!

不说废话直接上代码,使用方法就是添加到粒子系统的Object下的脚本,然后在nodes中添加位置就可以了!

using UnityEngine;
using System.Collections.Generic;
using System.Linq;

public class TestParticleMovement : MonoBehaviour
{
    public List<Vector3> nodes;
    private Vector3[] directions;
    private ParticleSystem particles;
    void Awake()
    {
        
        // 确保第一个位置是粒子发射起始位置
        if (nodes[0] != transform.position)
        {
            nodes.Insert(0, transform.position);
        }
        // 设置生存时间为经过的点数
        var mian = GetComponent<ParticleSystem>().main;
        mian.startLifetime = nodes.Count - 1;

        //自动生成方向,代表粒子速度,使粒子在一个生命周期内到达每个指定node
        directions = new Vector3[nodes.Count-1];
        for (int i = 0; i < nodes.Count-1; i++)
            directions[i] = nodes[i+1] - nodes[i];
    }
    void Start()
    {
        
    }

    void Update()
    {
        // 获取所有粒子
        particles = GetComponent<ParticleSystem>();
        ParticleSystem.Particle[] particleList = new ParticleSystem.Particle[particles.particleCount];
        int partCount = particles.GetParticles(particleList);
        for (int i = 0; i < partCount; i++)
        {
            // 计算粒子当前的生命
            float timeALive = particleList[i].startLifetime - particleList[i].remainingLifetime;
            // 设置粒子的方向速度为下一个node
            if((int)timeALive < directions.Count())
                particleList[i].velocity = directions[(int)timeALive];
        }
        particles.SetParticles(particleList, partCount);
    }

}

确保粒子模拟控件是“世界”,不然可能出现坐标系错误

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值