目前我有以下两个问题:
第一个问题是,当我重置相机位置时,我还必须重置相机旋转。这是因为我的相机 偏移设置为z和y上稍微偏离我的播放器的位置 轴和显然这些值应根据我的相机而改变 旋转,虽然我不确定如何弄清楚那些价值观 应该。
我的第二个问题是我的轮播使用光线投影来查找中间部分 屏幕并确定它的旋转原点,虽然它似乎是 当旋转旋转时,略微偏离屏幕中间 如果它确实位于屏幕中间,原点也会移动 不应该完全静止吗?还有一个更好,更少 实现我想要的轮换的昂贵方式?
相关的代码:
void RotateCamera()
{
//Find midle of screen
Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));
RaycastHit hitInfo;
//Checks if ray hit something
if (Physics.Raycast(ray, out hitInfo))
{
//Rotate left and right
if (Input.GetKey(KeyCode.RightArrow))
{
transform.RotateAround(hitInfo.point, -Vector3.up, rotationSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.RotateAround(hitInfo.point, Vector3.up, rotationSpeed * Time.deltaTime);
}
}
//Draws Raycast
Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow);
}
void ResetCameraPosition()
{
//Reset and lock camera position
transform.rotation = Quaternion.identity;
transform.position = player.transform.position + cameraOffset;
}
答案 0 :(得分:0)
使用Camera.ScreenToWorldPoint创建一个'目标'在屏幕中间绕其转动。删除所有不需要的光线投射内容,并用以下内容替换相关位:
float rotationSpeed = 45; // or whatever speed
float distance = 5f; // or whatever radius for the orbit
Vector3 target = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, distance));
if (Input.GetKey(KeyCode.RightArrow))
{
transform.RotateAround(target , -Vector3.up, rotationSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.RotateAround(target , Vector3.up, rotationSpeed * Time.deltaTime);
}