[英]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.