【问题标题】:Unity RotateAround() in combination with a specific directionunity RotateAround() 结合特定方向
【发布时间】:2019-01-08 13:50:22
【问题描述】:

我正在尝试围绕一个角色旋转我的相机,使其需要面对的特定方向。例如,我希望我的相机围绕我的角色旋转,并在它面向另一个对象的正轴时停止旋转。 所以我认为我需要 RotateAround() 和 LookRotation() 之间的组合。 RotateAround() 围绕角色旋转相机,LookRotation() 使相机也朝向该对象。

问题是:我不希望我的相机移动或旋转远离我的角色。

我尝试了几件事,最深思熟虑的是:

private void RotateCamera()
{
    Quaternion currentCameraRotation = _camera.transform.rotation;
    Quaternion futureCameraRotation = Quaternion.LookRotation(_hitObstacleStartingPoint.transform.forward);
    float rotationAngle;
    Vector3 rotationAxis;
    Quaternion.FromToRotation(currentCameraRotation.eulerAngles, futureCameraRotation.eulerAngles).ToAngleAxis(out rotationAngle, out rotationAxis);
    _camera.transform.RotateAround(_character.transform.position, _camera.transform.up, rotationAngle);
}

但这最终导致我的相机到处旋转..

提前致谢!

编辑:我很抱歉我的糟糕解释。 这是一个小图。

【问题讨论】:

  • 我认为这需要澄清一下。您“不希望 [您的] 相机移动或旋转远离 [您的] 角色”,并且您还希望使相机也面向另一个对象。你的意思是你想要两个对象都在视图中,但角色应该总是直接居中?您还可以先说“我希望我的相机围绕我的角色旋转,并在它面向另一个对象的前轴时停止旋转。”这听起来有点不同。您能否绘制一张图表或制作一些屏幕截图来更好地确定您想要的具体内容?
  • @Foggzie 很抱歉给您带来不便,我添加了一张图片以更好地解释我的意思。
  • 您可能需要按 Time.deltaTime 缩放旋转角度
  • @MichaelG 我试过了,它确实会旋转,但是一旦相机与前方物体对齐,它就不会停止旋转。

标签: c# unity3d camera rotation


【解决方案1】:

如果你计算当前旋转角度和目标旋转角度之间的距离,你可以随着时间的推移围绕枢轴旋转。

见下文:

private void RotateCamera()
{
    Quaternion currentCameraRotation = _camera.transform.rotation;
    Quaternion futureCameraRotation = Quaternion.LookRotation(obstacleObject.transform.forward, obstacleObject.transform.up);

    float angleDelta = Quaternion.Angle(currentCameraRotation, futureCameraRotation);

    _camera.transform.RotateAround(this._character.transform.position, _camera.transform.up, angleDelta * rotationSpeed * Time.deltaTime);        
}

为了帮助可视化正在发生的事情:

void OnDrawGizmos()
{
    Gizmos.color = Color.green;
    Gizmos.DrawLine(_camera.transform.position, _camera.transform.forward * 20 + _camera.transform.position);

    Gizmos.color = Color.red;
    Gizmos.DrawLine(obstacleObject.transform.position, obstacleObject.transform.forward * 20 + obstacleObject.transform.position);
}

如果您的障碍物围绕 x,z 旋转,这将不起作用;它总是假设一个身份前向向量。

【讨论】:

  • 感谢您帮助我,我真的很感激。我决定只使用固定的摄像头来避免这个问题(见下面的答案)
【解决方案2】:

我最终在我的场景中使用了固定的相机点。它避免了这个问题,所以我不认为这个问题已经解决了,但是我在这个项目上有一个截止日期,我不能再在这个问题上花费太多时间了。感谢那些帮助过我的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多