在动画和脚本中为游戏对象设置动画

Biz*_*han 3 animation unity-game-engine

我有一个横向滚动的 2D 游戏。玩家(名为Default)是一只会说话的鸟,它的四肢都是会说话的鸟,移动的四肢之一是它的眼球(名为pupil),它有一个名为 的脚本EyeController

在此处输入图片说明

我想要做的是:

  • 案例 1:鸟应该盯着目标变换并用眼睛跟随它。(这是在EyeController脚本中的代码中完成的。您可以在我的问题末尾找到它)
  • 情况 2:当我在 Bird 的动画师中设置触发器时,它会启动眼球动画,并且还有另一个触发器可以转到默认动画。(见下图,两个箭头出来,所以触发器可以随时改变动画)Any State

问题是:情况 1 仅在没有动画播放时才有效。一旦动画开始,它就会停止用眼睛跟随。

虽然案例 2 总是有效,并且以某种方式防止学生从代码中改变。

我希望代码覆盖动画。

鸟类动画师结构:

在此处输入图片说明

播放器具有 3 层动画。

  1. 基础层是可添加的并为翅膀设置动画。
  2. Mouth 被权重 1 覆盖并动画说话(嘴巴、瞳孔和眉毛)。
  3. 腿被权重 1 覆盖并且里面没有任何东西

正如你在下面看到的那样,在图层中的默认说话默认眼球 状态下,瞳孔.位置是动画的Mouth

Not Talking状态(Mouth图层中的默认状态,此处未显示其动画)具有空动画。

在此处输入图片说明

我做了什么:

我关闭Write Defaults了所有动画。我知道它会重置动画师范围内的动画值。

当设置了一些触发器时,动画工作并且瞳孔正确地动画;但是,当我在脚本中更改 student.localPosition 时,它不会更改瞳孔的 localPosition。

EyeController脚本的一部分:

//sight controller calls this method in its FixedUpdate
public void LookAt(Vector3 direction)
{
    //transform.localPosition = direction;
    transform.localPosition = new Vector3(1, 1, 0);//just to make sure direction isn't 0,0,0

    UnityEngine.Debug.Log("change!");
}

//I tried Update() : same results
void FixedUpdate()
{
    //When I read localPosition it's always 0,0,0
    UnityEngine.Debug.Log(transform.localPosition);
}
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明

数周以来,我一直在为这个问题而苦苦挣扎,但无法找到一种使其双向工作的方法。如果我删除瞳孔动画,我可以用代码为其设置动画,但我也需要动画,因为它是一个复杂的动画。