[英]Triggering animations in Unity
不知道我在這里做錯了什么,我試圖統一觸發 animation 編輯:問題不在於敵人在 animation 播放之前被摧毀,因為敵人甚至沒有被摧毀
播放器.cs
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Enemy")
{
Blue blue = collision.gameObject.GetComponent<Blue>();
if (action == State.jump || action == State.fall)
{
blue.JumpedOn();
blue.Death();
jumpVelocity = multiplier * jumpVelocity;
rb.velocity = Vector2.up * jumpVelocity;
}
}
}
敵人.cs
public void JumpedOn(){
action = State.death;
anim.SetBool("Death", true);
}
public void Death() {
Destroy(this.gameObject);
}
在動畫師 window 中也設置了條件,如果死亡 = true 播放 animation參見此處
當我刪除
blue.JumpedOn();
其他行將正常運行
blue.Death();
jumpVelocity = multiplier * jumpVelocity;
rb.velocity = Vector2.up * jumpVelocity;
我認為您應該嘗試在blue.JumpedOn();
之間添加一些延遲。 和blue.Death();
.
您需要在 JumpedOn() 和 Death() 之間放置一個延遲,因為您在同一幀中調用它們,object 在 animation 有機會播放之前被破壞。 一個很好的方法是協程,它對於延遲代碼的執行非常有價值。
private IEnumerator coroutine;
IEnumerator WaitAndDestroy(GameObject _callingObject, float _waitTime)
{
yield return new WaitForSeconds(_waitTime);
_callingObject.Destroy();
}
public void Death() {
coroutine = WaitAndDestroy(gameObject, 1.5f);
StartCoroutine(coroutine);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.