繁体   English   中英

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

[英]Unity: animation event does not change animated object`s transform

我想让一个敌人在向他射击时看着玩家,我将这个 function 称为 animation 事件:

    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),model 将在拍摄 animation 期间相应地旋转。 此外,如果我在拍摄 animation 开始之前以相同的方式从另一个脚本中旋转 model,它也会起作用。

因此,出于某种原因,尝试专门从 animation 事件中旋转 model 对我不起作用。 我尝试检查打开和关闭约束,应用和禁用根运动,但没有效果。 我确信我犯了一些明显的错误,但我就是想不通。

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

其他解决方法包括将游戏对象包装在空游戏对象中,即我的动画师为对象的 position 设置动画,我也想在代码中更改它,所以我的结构是:

animatedContainer
    |- actualObjectAlsoAnimatedFromCode

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM