我希望敌人在射击玩家时看着他,我从动画事件中调用此功能:
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),则模型将在拍摄动画期间相应地旋转。另外,如果我在拍摄动画开始之前以相同的方式从另一个脚本旋转模型,它也将起作用。
由于某种原因,尝试从动画事件中专门旋转模型对我不起作用。我尝试检查打开和关闭,应用和禁用根运动的约束,但是没有效果。我确信我犯了一些明显的错误,但我无法弄清楚。
答案 0 :(得分:1)
不能从代码中设置要设置动画的属性(即被动画引擎禁止)。有一个解决方法,但是它很丑-您需要在LateUpdate()中进行更新(因此,是在动画引擎对其进行转换之后),并且您必须跟踪更新的值,并在每一帧都覆盖它(因为否则,引擎将使用计算出的内容覆盖您的下一帧。
其他解决方法是将GameObjects包装在空的GameObjects中,即我的动画师动画化了对象的位置,我也想在代码中更改它的位置,所以我的结构是:
animatedContainer
|- actualObjectAlsoAnimatedFromCode
据我所知,这也适用于某些时候被禁止但在当前动画中不一定更改的属性(我认为这是您的案例所面临的问题)。