【问题标题】:How can i play a death animation on Unity?如何在 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;
    }
}

【问题讨论】:

    标签: c# unity3d animation


    【解决方案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 组件附加到对象。
    猜你喜欢
    • 2015-09-19
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多