我有一个关于制作跳跃粒子的问题,就像玩家跳跃时的尘埃云,这是我的播放器脚本:
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);
}
}
我希望他在半空中只激活粒子系统一次。我已经尝试了一些东西,但是当玩家在空中时,粒子系统从未停止过。
答案 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 参数是创建粒子的位置。剩下的就是从你开始跳转的代码中调用它。我会把它留给你:)祝你好运。