首页 文章

无法将animationClip附加到动画

提问于
浏览
0

我设法从我的动画师那里得到一个animationClip . 但是当我尝试将animationClip附加到动画时它会失败 .

我不知道为什么

public AnimationClip GetAnimationClip(string name)
     {
         if (!anim)
             return null;

         foreach (AnimationClip clip in anim.runtimeAnimatorController.animationClips) {
             if (clip.name == name)
                 return clip;
         }

         return null;
     }

这部分工作正常,如下所示

animationClip fails to attach to animation

这是失败的部分

if (ready) {
             for (int j = 0; j < 9; j++) 
             {
                 if (player1Attacks [j] == 1) {
                     animationClip = GetAnimationClip("Armature|HAttack1");
                     animation.AddClip(animationClip, "HA1");
                     animation.PlayQueued ("HA1", QueueMode.PlayNow);
                 }

animation.AddClip(animationClip, "HA1"); ”是失败的部分 .

从上图中可以看到,找到了动画片段,但它无法附加到动画中 .

为什么?

整码:

using UnityEngine;
using System.Collections;

public class PlayerScript : MonoBehaviour {

    Animator anim;
    public AnimationClip animationClip;
    public Animation animation;
    int[] player1Attacks;
    int[] player1Defences;

    GameObject g;

    bool ready;



    // Use this for initialization
    void Start () 
    {
        anim = GetComponent<Animator> ();
        animationClip = GetComponent<AnimationClip>();
        g = new GameObject ();
        g.AddComponent<Animation>();
        animation = GetComponent<Animation>();



        player1Attacks = new int[9];

        ready = false;


    }

    // Update is called once per frame
    void Update () 
    {
        if (New.done == true) 
        {

            for (int i = 0; i < 9; i++) {
                player1Attacks [i] = New.actions [i]; ready = true;
            }
        }

        if (ready) {
            for (int j = 0; j < 9; j++) 
            {
                if (player1Attacks [j] == 1) {
                    animationClip = GetAnimationClip("Armature|HAttack1");
                    animation.AddClip(animationClip, "HA1");
                    animation.PlayQueued ("HA1", QueueMode.PlayNow);
                }




            }
        }

    }

    public AnimationClip GetAnimationClip(string name)
    {
        if (!anim)
            return null;

        foreach (AnimationClip clip in anim.runtimeAnimatorController.animationClips) {
            if (clip.name == name)
                return clip;
        }

        return null;
    }


}

1 回答

  • 1

    MissingComponentException:“Player1”游戏对象没有附加“动画”,但是脚本正在尝试访问它 . 您可能需要向游戏对象“Player1”添加动画 . 或者您的脚本需要在使用之前检查组件是否已连接 .

    Unity告诉你在哪里以及为什么一些事情变坏你没注意到这一点 .

    你提到它是这部分 animation.AddClip(animationClip, "HA1"); 这是正确的 .

    在调用 animation.AddClip(animationClip, "HA1"); 之前,很可能在代码中有 animation = GetComponent<Animation>(); .

    该错误意味着 GetComponent<Animation>(); 失败,因为您的脚本没有附加 Animation 组件 .

    您必须将 Animation 附加到相同的GameObject Player1 脚本,然后才能调用 GetComponent<Animation>(); . 当它失败时,动画变为 null ,这意味着你无法调用它的任何功能 .

    您也可以使用 gameObject.AddComponent<Animation>(); 从代码而不是编辑器附加 Animation

    现在您可以获取组件并添加剪辑 .

    animation = GetComponent<Animation>();
    animation.AddClip(animationClip, "HA1");
    

    EDIT

    更新更新的代码后:

    您当前正在将 Animation 组件添加到 g GameObject,因此您必须从 g GameObject获取组件而不是 this.gameObject .

    animation = GetComponent<Animation>(); 更改为 animation = g.GetComponent<Animation>(); .

相关问题