跳粒子效果

时间:2015-11-24 22:19:52

标签: c# unity3d

我有一个关于制作跳跃粒子的问题,就像玩家跳跃时的尘埃云,这是我的播放器脚本:

public class PlayerMovement : MonoBehaviour {
    public float speed = 5f;
    public Transform groundCheck;
    public LayerMask groundLayer;
    bool grounded = false;
    Animator anim;
    Rigidbody2D rgbd;

    void Start () {
        anim = GetComponent<Animator> ();
        rgbd = GetComponent<Rigidbody2D> ();
    }

    void Update () {
    }

    void FixedUpdate (){
        grounded = Physics2D.OverlapCircle (groundCheck.position, 0.2f, groundLayer);
        float movex = Input.GetAxis ("Horizontal");
        rigidbody2D.velocity = new Vector2 (movex * speed, rigidbody2D.velocity.y);

        if (movex > 0){
            transform.localScale = new Vector2(1,transform.localScale.y);
        } else if (movex < 0){
            transform.localScale = new Vector2(-1,transform.localScale.y);
        }

        if (Input.GetKey (KeyCode.UpArrow)){
            if (grounded == true){
                rgbd.AddForce (new Vector2(0f, 4f),ForceMode2D.Impulse);
            } else {
                grounded = false;
            }
        }

        anim.SetFloat ("speed", Mathf.Abs (movex));
        anim.SetBool ("grounded", grounded);

        }
}

我希望他在半空中只激活粒子系统一次。我已经尝试了一些东西,但是当玩家在空中时,粒子系统从未停止过。

1 个答案:

答案 0 :(得分:3)

大多数人所做的是根据每个需要创建一个新的粒子系统副本,然后再将其销毁。

所以你需要的是一个全新的粒子系统。展开排放标签。在那里将速率设置为0(每秒0个粒子)。 费率下方应该有一个名为 Bursts 的空列表。添加一个爆发。将时间设置为0.0(默认情况下应设置)和粒子数量,以满足您的需要。每当粒子系统运行时,它将射出1个粒子。请注意,如果循环为ON,则突发将在每个循环开始时发生。

到目前为止一切顺利。现在从中制作预制件(如果需要,请观看教程)。然后,在您的代码中声明一个 Game Object 变量,它将为您提供粒子系统:

public GameObject jumpParticles;

返回Unity,将预制件送入检查员的Jump Particles插槽。现在它已准备就绪,可以在任何需要的地方进行复制和粘贴。因此,为此创建一个方法:

void SpawnJumpParticles(Vector3 pos){
    GameObject tmpParticles = (GameObject)Instantiate(jumpParticles, pos, Quaternion.identity); //look up how to use Instantiate, you'll need it a lot
    Destroy(tmpParticles, 3f);
}

此代码将在3秒内生成粒子并自动降级。函数中的 pos 参数是创建粒子的位置。剩下的就是从你开始跳转的代码中调用它。我会把它留给你:)祝你好运。