如何在 Unity 上播放死亡动画?
Posted
技术标签:
【中文标题】如何在 Unity 上播放死亡动画?【英文标题】:How can i play a death animation on Unity? 【发布时间】:2021-03-25 11:00:50 【问题描述】:我想给我的敌人播放死亡动画。基本上,他有一个空闲动画,我想在他死时播放死亡动画,一两秒后,游戏对象被删除。我是编码新手,所以一个基本的解决方案会更好:)。 这是我的编码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyHealthManager : MonoBehaviour
public int enemyHealth;
public GameObject deathEffect;
public int pointsOnDeath;
// Use this for initialization
void Start ()
// Update is called once per frame
void Update ()
if (enemyHealth <= 0)
Instantiate (deathEffect, transform.position, transform.rotation);
ScoreManager.AddPoints (pointsOnDeath);
Destroy (gameObject);
public void giveDamage(int damageToGive)
enemyHealth -= damageToGive;
【问题讨论】:
【参考方案1】:您可以添加一个名为 PlayAnimationAndDestroy() 的函数作为 void,并在其中放置 Destroy (this.gameObject, 2f) 和 animator.Play("deathAnim");
在 Destroy 中,逗号后面的数字是 Unity 等待销毁对象的时间,因此您需要检查时间轴中动画的持续时间并将该持续时间放入 Destroy ()。
另一种方法是在动画结束时按下动画内的录制按钮并更改公共变量。在脚本中,您将放置一个简单的 if(),如果该变量已更改,则销毁该对象。
第三种方法是使用动画事件 (https://docs.unity3d.com/Manual/script-AnimationWindowEvent.html),但对于您的使用,前两个选项更容易:)
【讨论】:
或者直接把死亡动画放到动画控制器中,设置触发器。没有退路,在动画结束时通过动画事件触发销毁 谢谢你们!【参考方案2】:欢迎来到 Unity!在您的项目中使用AnimatorController
并在您想要死的GameObject
上使用相应的Animator
组件也将成为您的朋友。
您可以查看 Unity 关于动画控制器 here 的精彩教程,但基本上,它是一个状态机。根据您的对象所处的状态,您可以控制哪些游戏对象动画处于活动状态,并且您可以在游戏逻辑中设置触发器以触发到另一个状态的转换。
这对于触发死亡动画等情况非常有用。
在您的情况下,您需要idle
的一种状态和death
的一种状态。您的death
和idle
状态之间会有联系。
您将设置一个名为 die
的触发器。当你的 die
触发器在游戏逻辑中被触发时,你可以让状态 idle
移动到状态 death
。
所以,第 1 步:
您将从编辑器中创建一个新的AnimatorController
Scriptable Object,然后在Animator
窗口中对其进行编辑。使用所需的动画制作所需的状态机,ScriptableObject
将保存在项目文件夹中。
第 2 步:在您想要影响的 GameObject
上添加一个 Animator
组件。它有一个 AnimatorController
组件 - 在此处添加您新创建的控制器。
第 3 步:在您的游戏逻辑脚本中,您将引用该 Animator
组件:
...
public int enemyHealth;
public GameObject deathEffect;
public int pointsOnDeath;
public Animator animComponent;
...
然后当你达到你的条件时,你会做这样的事情:
if (enemyHealth < 0)
animComponent.SetTrigger("die");
然后你的AnimatorController
将从你之前的状态移动到death
,你设置的动画就会播放。
祝你好运。
【讨论】:
非常感谢!AnimatorController
不是组件 .. 它是 ScriptableObject
.. 也没有 SetTrigger
.. 你是说 Animator
组件吗?进一步注意AnimatorController
仅存在于UnityEditor
命名空间中,并且在尝试构建应用程序时会抛出错误;)
@derHugo 很好,看起来我搞混了!自从我在 Unity 中使用这些组件以来已经有一段时间了。我编辑了我的答案以反映您需要在项目中设置AnimatorController
ScriptableObject
,然后稍后将Animator
组件附加到对象。以上是关于如何在 Unity 上播放死亡动画?的主要内容,如果未能解决你的问题,请参考以下文章
Unity Animator:Curves : 曲线运用的两个案例