如何在 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 的一种状态。您的deathidle 状态之间会有联系。

您将设置一个名为 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 中使用这些组件以来已经有一段时间了。我编辑了我的答案以反映您需要在项目中设置AnimatorControllerScriptableObject,然后稍后将Animator 组件附加到对象。

以上是关于如何在 Unity 上播放死亡动画?的主要内容,如果未能解决你的问题,请参考以下文章

Unity Animator:Curves : 曲线运用的两个案例

如何在统一的每个按键上重复动画(Unity3d,C#)

如何在不重复Unity动画的情况下通过Animator提高动画播放速度

unity 我的动画总是只播放第一帧无限卡

Unity Animator只播放一次

unity3d 如何用GUI按钮播放动画脚本怎么写