Unity中上下半身旋转问题

问题描述 投票:0回答:1

我遇到了一个与旋转相关的问题,这让我抓狂。

我对 3D 世界还是个新手,正在研究角色移动。目标是:

  • 让上半身面向玩家的视线方向(由与角色相关的鼠标位置决定,这部分按预期工作)
  • 根据玩家移动方向,使下半身朝向与外观相同的方向,并使用 lerp 使旋转平滑

当下半身目标方向与玩家运动正好相反时,就会出现问题(因为下半身应该向后移动,角度为 180°)。例如,用户正在查看右上角并向左笔直移动,因此其腿应该面向右方,因为他正在向后走。如果他向右移动并且面向右侧,那么下方的方向也是正确的,因为他正在向前移动。

正如您在所附视频中看到的,有时(当所需角度为 180° 时),下半身会向错误的方向旋转,这看起来很奇怪(当我在下面的视频中抬头时)。

Video of the issue

颜色有:

  • 黄色:用户的视线方向
  • 绿色:当前用户移动方向
  • 蓝色:当前角色前进方向
  • 红色:目标下半身方向

简化的更新代码如下所示:

    void Update()
      {
        // (...)
     
        // _look is the direction the user mouse is facing (yellow)
        // _move is the current direction the user is moving (green)
        // _lowerDirection is the final direction the character lower body should face (red, based on the user looking direction and its movement)
        // _characterMesh.transform.forward is the current direction the character is facing (blue)
     
        _characterMesh.transform.rotation = Quaternion.Lerp(
          _characterMesh.transform.rotation,
          Quaternion.LookRotation(_lowerDirection), Time.deltaTime * TURN_SPEED);
     
        // (...)
      }

我已经尝试了很多事情,但很难找到实现这一目标的好方法,有人可以帮助我吗?

c# unity-game-engine 3d rotation
1个回答
0
投票

除了像这样旋转它之外,您还可以使用 unity 的

lookAt()
功能。

您需要在与头部相同的矢量方向上使用

lookAt()
。 这应该可以解决你的问题。 查看文档

© www.soinside.com 2019 - 2024. All rights reserved.