Unity:跟随玩家的主摄像机要朝上



我让一个玩家在一个球体上移动,并且让我的相机跟随玩家。当我移动过球体绝对顶部或底部的极点时,场景会快速旋转,以便相机(和场景)的向上方向保持在显示器的顶部。有没有一种方法可以简单地把它关掉?我宁愿这个场景没有全局的上下概念,只有相对的上下。如果没有一个简单的方法,有没有一个不那么简单的方法来避免旋转?这里是我的Update()代码,以防有帮助。谢谢!

void Update()
{
Vector3 waypointTunnelDirection = Geometry.Scale(waypoints[waypointIndex] - transform.position, 0.01f);
Vector3 waypointSurfaceStepPosition = Geometry.Scale(transform.position + waypointTunnelDirection, 0.5f);
transform.position = Geometry.Scale(Vector3.MoveTowards(transform.position, waypointSurfaceStepPosition, maxSpeed), 0.5f);
if (Vector3.Distance(transform.position, waypoints[waypointIndex]) < 0.01f) {
waypointIndex = (waypointIndex + 1) % waypoints.Length;
}
mainCamera.transform.position = Geometry.Scale(transform.position, 2.0f);
Vector3 targetDirection = transform.position - mainCamera.transform.position;
mainCamera.transform.rotation = Quaternion.LookRotation(Vector3.RotateTowards(mainCamera.transform.forward, targetDirection, 99, 99));
}

首先将相机控制逻辑放入相机组件的更新函数中。通过这样做,你可以让你的相机模块化,这样它就更容易在其他游戏中重用。

与其使用球体作为临时玩家,不如使用任何具有明显顶部和前部的对象来进行测试和调试。然后让你的玩家在世界中移动,然后再制作镜头逻辑,因为玩家的方向对于正确地定位镜头是必要的。

要移动玩家,只需在它的变换中移动它。向前移动,然后重新调整球员的方向。四元数。LookRotation:

void Update()
{
transform.position = transform.position + transform.forward * Time.deltaTime * speed;
Vector3 up = transform.position;     // Assuming the center of the sphere world is (0,0,0)
Vector3 forward = Vector3.Cross(transform.right, up);
transform.rotation = Quaternion.LookRotation(forward, up);
}

旋转你的播放器,旋转它自己的变换。Vector3:

transform.RotateAround(Vector3.zero, transform.up, angularSpeed*Time.deltaTime);

现在你可以更新你的相机在它的更新功能:

public class Camera : MonoBehavior
{
public GameObject player;
public float camHeight;
public float camDistance;
void Update()
{
Transform pt = player.transform;
// Set camera Position;
Vector3 camOffset = -pt.forward * camDistance + pt.up * camHeight;
transform.position = pt.position + camOffset;
// Set camera orientation
transform.LookAt(pt.position, pt.up);
}
}

最新更新