我设法从我的动画师那里得到一个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);
}
“ 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 回答
Unity告诉你在哪里以及为什么一些事情变坏你没注意到这一点 .
你提到它是这部分
animation.AddClip(animationClip, "HA1");
这是正确的 .在调用
animation.AddClip(animationClip, "HA1");
之前,很可能在代码中有animation = GetComponent<Animation>();
.该错误意味着
GetComponent<Animation>();
失败,因为您的脚本没有附加Animation
组件 .您必须将
Animation
附加到相同的GameObjectPlayer1
脚本,然后才能调用GetComponent<Animation>();
. 当它失败时,动画变为null
,这意味着你无法调用它的任何功能 .您也可以使用
gameObject.AddComponent<Animation>();
从代码而不是编辑器附加Animation
现在您可以获取组件并添加剪辑 .
EDIT :
更新更新的代码后:
您当前正在将
Animation
组件添加到 g GameObject,因此您必须从 g GameObject获取组件而不是this.gameObject
.将
animation = GetComponent<Animation>();
更改为animation = g.GetComponent<Animation>();
.