繁体   English   中英

在 Unity 中使用按钮启动粒子系统

[英]Starting a Particle System in Unity with Buttons

大家好,我用 Unity 的粒子系统制作了火箭发射粒子,但我知道如何在按下推力引擎按钮时激活它(W 和向上箭头是我的按钮) 这是我的代码;

public class Rocket : MonoBehaviour
{
    
    private Rigidbody2D rb;
    
    public float amount;
    public float MaxVelocity = 3;
    public float RotationSpeed = 3;

    




    // Start is called before the first frame update
    void Start()
    {
       rb = GetComponent<Rigidbody2D>();


    }

    public void ThrustForward(float amount)
    {
        Vector2 force = transform.up * amount;

        rb.AddForce(force);
        
   

    }

    // Update is called once per frame
    void Update()
    {
        float Yaxis = Input.GetAxis("Vertical");
        float Xaxis = Input.GetAxis("Horizontal");

       
        ThrustForward(Yaxis);
        Rotate(transform, Xaxis * RotationSpeed);
         

    }   
    private void ClampVelocity()
    {
        float x = Mathf.Clamp(rb.velocity.x, -MaxVelocity, MaxVelocity);
        float y = Mathf.Clamp(rb.velocity.y, -MaxVelocity, MaxVelocity);

        rb.velocity = new Vector2(x, y);
      

    }


   

    private void Rotate(Transform t,float amount)
    {
        t.Rotate(0, 0, amount);
     
    }
   

}

请帮助我如何使用按钮统一启动粒子系统谢谢!!

如果你有一个粒子系统,你可以在你的代码中创建一个变量,如下所示:

public ParticleSystem particle;

你可以通过使用带有 .Play() 的变量来播放粒子系统,例如,如果你按照我的建议创建了一个像上面那样的变量,你可以随时播放粒子系统。

我们的做法非常简单。
 particle.Play();


直接解决方案


从您的脚本中删除所有内容并尝试使用以下代码覆盖它
public class Rocket : MonoBehaviour { private Rigidbody2D rb; public ParticleSystem particle; public float amount; public float MaxVelocity = 3; public float RotationSpeed = 3; // Start is called before the first frame update void Start() { rb = GetComponent<Rigidbody2D>(); } public void ThrustForward(float amount) { Vector2 force = transform.up * amount; rb.AddForce(force); particle.Play(); } // Update is called once per frame void Update() { float Yaxis = Input.GetAxis("Vertical"); float Xaxis = Input.GetAxis("Horizontal"); ThrustForward(Yaxis); Rotate(transform, Xaxis * RotationSpeed); // You Can Do Exactly Same Thing For Arrow Key // To Get Better Rusults Try Messing With The Particle System's Settings } private void ClampVelocity() { float x = Mathf.Clamp(rb.velocity.x, -MaxVelocity, MaxVelocity); float y = Mathf.Clamp(rb.velocity.y, -MaxVelocity, MaxVelocity); rb.velocity = new Vector2(x, y); } private void Rotate(Transform t,float amount) { t.Rotate(0, 0, amount); } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM