unity 3D粒子系统雪花效果
Unity 3D Particle System Snow effect
在 unity 3D 中,我构建了一个 2d 跑步者,我在其中创建了一个粒子系统,该系统从屏幕外主摄像机右上角的单个位置发射像雪花一样的粒子。
我将粒子发射器连接到主摄像头,因此屏幕上总是有像雪一样的粒子,但是,随着主摄像头速度的增加,粒子发射器的速度也会增加,最终开始向屏幕外发射粒子.
如何更改发射器的设置,使发射器的速度不影响粒子的方向。最后,为了了解更多细节,我将发射器的形状设置为圆锥体,并将模拟 space 设置为世界。任何帮助将不胜感激
您可以更改 ParticleSystem 组件的 Simulation Space 设置:Particle System main module.
编辑
因为一开始我没有注意到你希望粒子速度随着 相机 加速而增加(我的坏...)这里有一种你可以伪造效果的方法:
public class TestScript : MonoBehaviour
{
#region Attributes
[SerializeField]
private float m_MaxTransformSpeed;
[SerializeField]
private float m_MinStartSpeed;
[SerializeField]
private float m_MaxStartSpeed;
private ParticleSystem m_Particles;
private Vector3 m_PreviousPosition;
#endregion
#region MonoBehaviour
protected void Start()
{
m_Particles = GetComponent<ParticleSystem>();
}
protected void Update()
{
Vector3 cameraSpeed = transform.position - m_PreviousPosition;
m_Particles.startSpeed = Mathf.Clamp(m_MinStartSpeed + (m_MaxStartSpeed - m_MinStartSpeed) * cameraSpeed.magnitude / m_MaxTransformSpeed, m_MinStartSpeed, m_MaxStartSpeed);
m_PreviousPosition = transform.position;
}
#endregion
}
您可以保存 N 个旧位置并获取 N 个增量的平均速度值,而不是仅基于最新帧或直接将脚本发送给 Camera 的移动量(如果您手动移动它)。
在 unity 3D 中,我构建了一个 2d 跑步者,我在其中创建了一个粒子系统,该系统从屏幕外主摄像机右上角的单个位置发射像雪花一样的粒子。
我将粒子发射器连接到主摄像头,因此屏幕上总是有像雪一样的粒子,但是,随着主摄像头速度的增加,粒子发射器的速度也会增加,最终开始向屏幕外发射粒子.
如何更改发射器的设置,使发射器的速度不影响粒子的方向。最后,为了了解更多细节,我将发射器的形状设置为圆锥体,并将模拟 space 设置为世界。任何帮助将不胜感激
您可以更改 ParticleSystem 组件的 Simulation Space 设置:Particle System main module.
编辑 因为一开始我没有注意到你希望粒子速度随着 相机 加速而增加(我的坏...)这里有一种你可以伪造效果的方法:
public class TestScript : MonoBehaviour
{
#region Attributes
[SerializeField]
private float m_MaxTransformSpeed;
[SerializeField]
private float m_MinStartSpeed;
[SerializeField]
private float m_MaxStartSpeed;
private ParticleSystem m_Particles;
private Vector3 m_PreviousPosition;
#endregion
#region MonoBehaviour
protected void Start()
{
m_Particles = GetComponent<ParticleSystem>();
}
protected void Update()
{
Vector3 cameraSpeed = transform.position - m_PreviousPosition;
m_Particles.startSpeed = Mathf.Clamp(m_MinStartSpeed + (m_MaxStartSpeed - m_MinStartSpeed) * cameraSpeed.magnitude / m_MaxTransformSpeed, m_MinStartSpeed, m_MaxStartSpeed);
m_PreviousPosition = transform.position;
}
#endregion
}
您可以保存 N 个旧位置并获取 N 个增量的平均速度值,而不是仅基于最新帧或直接将脚本发送给 Camera 的移动量(如果您手动移动它)。