首页 > 解决方案 > 使用按钮在 Unity 中启动粒子系统

问题描述

大家好,我用 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);
     
    }
   

}

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

标签: c#visual-studiounity3d

解决方案


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

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);
     
    }
   

}



推荐阅读