【发布时间】: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次。