You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改2D火箭粒子系统旋转且不改变已发射粒子运动方向?

解决2D火箭粒子系统随父物体旋转的问题

核心原因

粒子系统作为火箭的子物体时,默认使用**本地空间(Local)**模拟粒子运动,已发射的粒子会继承父物体(火箭)的旋转、位移变换,导致火箭转向时粒子跟着偏移。

解决方案

1. 修改粒子系统的模拟空间(最简便)

打开粒子系统的Inspector面板,找到「Particle System」主模块:

  • 将「Simulation Space」从 Local 改为 World
  • 调整「Start Rotation」为符合需求的世界空间方向(比如火箭向上飞行时,设为180度让粒子向下发射;若需跟随火箭实时调整方向,可绑定火箭的旋转值计算相对角度)

设置完成后,粒子发射后会以世界空间为基准运动,不再随火箭的旋转改变自身位置和运动方向。

2. 发射后解除粒子与火箭的父子关系

若需要保留本地空间模拟逻辑,可通过脚本让粒子生成后立刻脱离父物体:

// 挂载在粒子系统上的脚本
using UnityEngine;

public class DetachParticles : MonoBehaviour
{
    private ParticleSystem _particleSystem;

    void Start()
    {
        _particleSystem = GetComponent<ParticleSystem>();
        var mainModule = _particleSystem.main;
        mainModule.sendMessages = true; // 开启粒子生成消息触发
    }

    // 粒子生成时自动调用
    void OnParticleSpawn(GameObject particle)
    {
        particle.transform.parent = null; // 解除与火箭的父子关系
    }
}

注意:如果使用了自定义粒子预制体,需确保预制体没有依赖父物体的逻辑。

3. 将粒子系统设为独立物体,同步发射位置

把粒子系统从火箭的子物体层级移出,作为场景独立物体,通过脚本同步火箭的发射点位置与方向:

// 挂载在粒子系统上的脚本
using UnityEngine;

public class SyncThruster : MonoBehaviour
{
    public Transform rocketThrusterPoint; // 拖拽绑定火箭的推力发射点Transform

    void Update()
    {
        // 同步发射点位置
        transform.position = rocketThrusterPoint.position;
        // 同步粒子发射方向(匹配火箭当前旋转)
        var particleMain = GetComponent<ParticleSystem>().main;
        particleMain.startRotation = rocketThrusterPoint.rotation.eulerAngles.z * Mathf.Deg2Rad;
    }
}

这种方式下粒子系统完全独立,发射后的粒子不会受火箭旋转影响。


内容的提问来源于stack exchange,提问作者Aaspreet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:35:21