簡體   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