Unity3D沿着另一个对象的y轴方向旋转角色

thigvfpy  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(160)

我想沿着另一个游戏对象的y轴(绿色)旋转角色。
这是我的系统图片。

我想在红色箭头指示的方向旋转字符(见图,它不是x轴)。
我看了其他的问题,尝试了很多代码,但还是没有达到预期的效果。
这是我最新的代码,创建了上面的图片。
右边的图片是我想要的,但左边的图片不是。
任何建议都是感激不尽的。谢谢!

IEnumerator RotateToDirection(){
  var targetRotation = new Vector3(0, ArrowObject.transform.localEulerAngles.y, 0);

  var elapsedTime = 0.0f;
  var waitTime = 1f;
  while (elapsedTime < waitTime)
  {
      elapsedTime += Time.deltaTime;

      Character.transform.localEulerAngles
      = Vector3.Lerp(Character.transform.localEulerAngles, targetDirection, (elapsedTime / waitTime));

      yield return null;
  }
}
hi3rlvi2

hi3rlvi21#

不使用eulerAngles
当您读取.eulerAngles属性时,Unity会将四元数旋转的内部表示转换为欧拉角。因为有多种方法可以使用欧拉角来表示任何给定的旋转,所以您读取的值可能与您指定的值有很大的不同。如果您试图逐渐增加值来生成动画,这可能会导致混淆。
从你的图像看,你似乎想让角色的前向轴与另一个对象的up轴对齐,所以你可能会使用例如Quaternion.LookRotation这样的东西。

var startRotation = Character.transform;
var targetDirection = ArrowObject.transform.up;
var targetRotation = Quaternion.LookRotation(targetDirection);

for(var timePassed = 0f; timePassed< 1f; timePassed += Time.deltaTime)
{
    Character.transform.rotation = Quaternion.Lerp(startRotation, targetRotation, timePassed / 1f);
    yield return null;
}

Character.transform.rotation = targetRotation;

相关问题