我设法从我的动画师那里获得一个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;
}
这部分工作正常,如下所示
这是失败的部分
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;
}
}
答案 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>();
。