无法将animationClip附加到动画上

时间:2016-06-03 03:17:49

标签: c# animation unity3d

我设法从我的动画师那里获得一个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);
                 }

&#34; animation.AddClip(animationClip, "HA1");&#34;是失败的部分。

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

为什么?

整个代码:

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 个答案:

答案 0 :(得分:1)

  

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

Unity告诉你哪些事情以及为什么一些事情变得糟糕你没注意到这一点。

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

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

该错误表示GetComponent<Animation>();失败,因为您的脚本没有附加Animation个组件。

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

您还可以使用Animation

从代码而非编辑者附加gameObject.AddComponent<Animation>();

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

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

修改

更新更新的代码后:

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

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