Unity:动画事件不会更改动画对象的变换

时间:2019-10-28 10:56:58

标签: c# unity3d animation events

我希望敌人在射击玩家时看着他,我从动画事件中调用此功能:

    public void ShootPlayer
    {
        thisTr.LookAt(playerTr);
        thisTr.rotation = Quaternion.Euler(0, thisTr.rotation.eulerAngles.y, 0);
        GameObject newArrow = Instantiate(straightFlightArrow, shootPoint.position, transform.rotation);
        em.canMove = true;
    }

它确实会被调用,但是模型的旋转不会改变。奇怪的是,如果我在Start()中调用thisTr.LookAt(playerTr),则模型将在拍摄动画期间相应地旋转。另外,如果我在拍摄动画开始之前以相同的方式从另一个脚本旋转模型,它也将起作用。

由于某种原因,尝试从动画事件中专门旋转模型对我不起作用。我尝试检查打开和关闭,应用和禁用根运动的约束,但是没有效果。我确信我犯了一些明显的错误,但我无法弄清楚。

1 个答案:

答案 0 :(得分:1)

不能从代码中设置要设置动画的属性(即被动画引擎禁止)。有一个解决方法,但是它很丑-您需要在LateUpdate()中进行更新(因此,是在动画引擎对其进行转换之后),并且您必须跟踪更新的值,并在每一帧都覆盖它(因为否则,引擎将使用计算出的内容覆盖您的下一帧。

其他解决方法是将GameObjects包装在空的GameObjects中,即我的动画师动画化了对象的位置,我也想在代码中更改它的位置,所以我的结构是:

animatedContainer
    |- actualObjectAlsoAnimatedFromCode

据我所知,这也适用于某些时候被禁止但在当前动画中不一定更改的属性(我认为这是您的案例所面临的问题)。