gpt4 book ai didi

animation - 在动画和脚本中为游戏对象制作动画

转载 作者:行者123 更新时间:2023-12-01 09:01:05 25 4
gpt4 key购买 nike

我有一款横版 2D 游戏。播放器(名为 Default)是一只四肢会说话的鸟,其中一个移动的肢体是它的眼球(名为 pupil),它有一个名为 的脚本眼睛 Controller

enter image description here

我想做的是:

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

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

虽然情况 2 始终有效 并且以某种方式防止学生从代码中更改。

I want the code to override the animation.

Bird Animator 结构:

enter image description here

播放器有一个 3 层的动画。

  1. Base Layer 是可加的,可以为翅膀添加动画效果。
  2. 嘴巴被权重 1 覆盖并动画说话(嘴巴、瞳孔和眉毛)。
  3. 腿被重量 1 覆盖并且没有任何内容

正如您在下面看到的,pupil.position 在 Mouth 层的Default TalkingDefault Eyeballing 状态下是动画的。

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

enter image description here

我做了什么:

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

当设置了一些触发器时,动画工作并且瞳孔动画正确;但是,当我在脚本中更改 pupil.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);
}

输出:

enter image description here

数周以来,我一直在为这个问题而苦苦挣扎,但找不到使它同时起作用的方法。如果我删除瞳孔动画,我可以用代码为它制作动画,但我也需要动画,因为它是一个复杂的动画。

最佳答案

您是否尝试过使用 LateUpdate() ?如果我没记错的话,执行顺序类似于 Update() > FixedUpdate() > Animation> LateUpdate() > 渲染

否则,您可以使用 AnimationClip.SampleAnimation 手动驱动动画但它会很重:)

关于animation - 在动画和脚本中为游戏对象制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41382351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com