繁体   English   中英

在 Unity 中触发动画

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM