让相机统一跟踪球而无需相机转动

时间:2020-05-29 19:44:59

标签: c# unity3d

我正在统一从事高尔夫游戏,在那里我有一个摄像头根据鼠标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;
}

相机对象是球对象的子对象,并且在施加力时随球滚动。我尝试从球对象上拆下相机对象,这会破坏相机对象(它不再跟随球,因为它不再是孩子了)。

有什么想法可以使我的代码保持现在的美观和简单,并防止摄像机在跟随球的同时滚动?

1 个答案:

答案 0 :(得分:2)

一种解决方案可能是将gameObject 2个孩子放在球内,一个让球旋转,另一个让照相机。这样,摄像机将跟随不旋转的父gameObject(但您应该更新位置)。

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

'NoneType' object has no attribute 'rules'
Traceback (most recent call last):
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\knack\knack\cli.py", line 215, in invoke
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 631, in execute
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 695, in _run_jobs_serially
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 688, in _run_job
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\six\six.py", line 703, in reraise
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 665, in _run_job
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 324, in __call__
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\__init__.py", line 574, in default_command_handler
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli\azure\cli\command_modules\cdn\custom.py", line 396, in add_action
AttributeError: 'NoneType' object has no attribute 'rules'