【问题标题】:Having a camera follow a ball in unity without having the camera roll让相机在没有相机胶卷的情况下统一跟随球
【发布时间】:2020-05-30 03:50:05
【问题描述】:

我正在统一开发一款高尔夫游戏,其中我有一个基于鼠标 x 和 y 输入绕球旋转的摄像头。相机控制器代码工作正常,直到我开始对球施加力。请参阅下面的相机控制器代码:

void ControlCamera() 
{
    // Do Nothing if Locked
    if (cameraLocked)
        return;

    // Handle Zoom
    myCamera.transform.position = Vector3.MoveTowards(myCamera.transform.position, transform.position, Input.mouseScrollDelta.y);

    // Handle Y Transformation
    Transform yTransform = myCamera.transform;
    yTransform.RotateAround(transform.position, Vector3.left, Input.GetAxis("Mouse Y") * cameraSensitivity);
    if (yTransform.rotation.eulerAngles.x < maxXRot && yTransform.rotation.eulerAngles.x > minXRot)
    {
        myCamera.transform.rotation = yTransform.rotation;
        myCamera.transform.position = yTransform.position;
    }

    // Handle X Transformation
    myCamera.transform.RotateAround(transform.position, Vector3.down, Input.GetAxis("Mouse X") * cameraSensitivity);

    // Prevent Z Skew
    Quaternion currentRotation = myCamera.transform.rotation;
    float xRot = currentRotation.eulerAngles.x;
    float yRot = currentRotation.eulerAngles.y;
    currentRotation.eulerAngles = new Vector3(xRot, yRot, 0);
    myCamera.transform.rotation = currentRotation;
}

相机对象是球对象的子对象,当施加力时会随着球滚动。我尝试将相机对象与破坏相机对象的球对象分离(它不再跟随球,因为它不再是孩子)。

有什么想法可以让这段代码保持现在的美观和简单,并在仍然跟随球的同时防止相机滚动?

【问题讨论】:

  • 谁在乎轮换?球沿直线移动。所以相机应该沿着这条线以一定的速度移动。您必须将旋转速度转换为沿线的速度。因此,如果球的直径为 10 并且每秒旋转一次。那么速度是每秒10次。

标签: c# unity3d


【解决方案1】:

一种解决方案可能是在球内设置 2 个子对象,一个带有将旋转的球,另一个带有相机。这样相机将跟随不旋转的父游戏对象(但您应该更新位置)。

另一个,也是我最喜欢的一个是不要将相机放在球的游戏对象上,只是从球的位置更新相机的位置,只是位置,而不是旋转。比如:

public class CameraFollow : MonoBehaviour 
{
      public GameObject ball;

      void Update() 
      {
          Vector3 pos = ball.transform.position;
          transform.position = pos;
      }
  }

【讨论】:

  • 完美,我将它分配给了一个跟随相机的空游戏对象,而相机是这个游戏对象的子对象。非常感谢。
猜你喜欢
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多