C# 如何将粒子系统附着到sprite上的点

C# 如何将粒子系统附着到sprite上的点,c#,unity3d,particle-system,C#,Unity3d,Particle System,我有一个围绕一个点旋转的游戏对象,并将粒子系统(连接到子节点)连接到它,当我改变旋转方向(游戏对象朝相反方向移动)时,我的粒子系统不会随游戏对象翻转并继续在顶部(它应该在底部) 所以我在这上面花了很多时间,也许你知道一些解决方法。希望屏幕能让事情变得更清楚 第一方向: 第二方向: 您可以通过两种方式解决此问题: 通过将y旋转更改为-180,然后更改为0,而不是使用其他方法或动画来翻转角色。这样子对象也会移动,并且会工作 将partcyle系统的渲染模式更改为“世界空间”,然后查看它是否正在移

我有一个围绕一个点旋转的游戏对象,并将粒子系统(连接到子节点)连接到它,当我改变旋转方向(游戏对象朝相反方向移动)时,我的粒子系统不会随游戏对象翻转并继续在顶部(它应该在底部)

所以我在这上面花了很多时间,也许你知道一些解决方法。希望屏幕能让事情变得更清楚

第一方向:

第二方向:


您可以通过两种方式解决此问题:

  • 通过将y旋转更改为-180,然后更改为0,而不是使用其他方法或动画来翻转角色。这样子对象也会移动,并且会工作

  • 将partcyle系统的渲染模式更改为“世界空间”,然后查看它是否正在移动。或者,如果要使用动画更改翻转,则可以录制动画,以便手动更改粒子系统的位置。通过这种方式,您将翻转粒子,并为动画翻转粒子


  • 您可以通过两种方式解决此问题:

  • 通过将y旋转更改为-180,然后更改为0,而不是使用其他方法或动画来翻转角色。这样子对象也会移动,并且会工作

  • 将partcyle系统的渲染模式更改为“世界空间”,然后查看它是否正在移动。或者,如果要使用动画更改翻转,则可以录制动画,以便手动更改粒子系统的位置。通过这种方式,您将翻转粒子,并为动画翻转粒子


  • 所以我试图实现第1种方式,类似这样的东西(下面的代码),但它给出了一个奇怪的结果。(vec正在改变我的游戏对象旋转到相反方向的点,flipShip()只是将精灵翻转y)。我真不明白它怎么了。事实上,如果我在inspector中将Z旋转更改180,它将正常工作然后尝试使用脚本更改Z,它将使Partycle移动到Yeah,这就是我试图做的(在我看来),但它没有按照我想要的方式工作。喜欢它而不是以某种随机方式改变旋转180度。在一个方法调用中,它工作正常,下一个旋转90,下一个根本不旋转。Idk为什么它会发生应该澄清一下,我现在谈论的是我的游戏对象,粒子和飞船旋转的很好,正如我所希望的,但是现在飞船没有翻转,Hahaj必须在检查器中检查你需要的旋转(x,y,z和数量,180),然后在脚本中如果(按下按钮)this.transform.rotation=Quaternion.Euler(将0放在你不想旋转的轴上,将-180或180放在右边)例如,thi.transform,Rotation=Quaternion.Euler(0180,0),然后另一个if,transform.Rotation全部归零,所以我尝试实现第1种方式,类似于这样的方式(下面的代码),但它给出了一个奇怪的结果。(vec正在改变点我的游戏对象正在旋转到相反方向,flipShip()只是将精灵翻转y)。我真的不明白它有什么问题。实际上,如果我在inspector中将Z旋转180,它会正常工作然后尝试用脚本更改Z,它会将Partycle移动到是的,这就是我试图做的(在我看来),但它并没有像我想的那样工作。喜欢它,而是以某种随机方式改变旋转,而不是180度。在一个方法调用中,它工作正常,下一个旋转90度,下一个根本不旋转。Idk为什么它会发生应该澄清一下,我现在说的是我的游戏对象,粒子按照我的意愿随飞船旋转,但现在飞船没有翻转hahaJust检入检查器将选择您需要的旋转(x、y、z和数量,180),然后在脚本中选择(按下按钮)this.transform.rotation=Quaternion.Euler(将0放在您不想旋转的轴上,将-180或180放在右侧),例如thi.transform,rotation=Quaternion.Euler(0180,0)然后是另一个if,将transform.rotation全部设置为零
    public void changeDirection()
    {
        flipShip();
        vec = new Vector3(0, 0, -vec.z);
    
        var rotationVector = new Vector3(transform.rotation.x, transform.rotation.y, 
        180+transform.rotation.z);
    
        transform.rotation = Quaternion.Euler(rotationVector);
    }