自己琢磨的一个按C键摄像机变化代码程序,如下:
public class Cameras : MonoBehaviour
{
//定义3个摄像机相对于Player的Vector3变量
private Vector3 mainCameraOffset = new Vector3(0, 4, -6.5f);
private Vector3 leftCameraOffset = new Vector3(-1.7f, 0.9f, 0);
private Vector3 topCameraOffset = new Vector3(0, 300, 0);
public GameObject player;
public Camera[] cameras;
public int cameraIndex = 0;
// Start is called before the first frame update
void Start()
{
player = GameObject.Find("Player");
//设置0号摄像机可用,其他不可用
cameras[cameraIndex].enabled = true;
for (cameraIndex += 1; cameraIndex < cameras.Length; cameraIndex++)
{
cameras[cameraIndex].enabled = false;
}
cameraIndex = 0;
}
// Update is called once per frame
void Update()
{
//如果按下C键,cameraIndex自增
if (Input.GetKeyDown(KeyCode.C))
{
cameraIndex++;
//如果cameraIndex为最后一个摄像机索引,则循环到0号摄像机
if (cameraIndex == cameras.Length)
{
cameraIndex = 0;
cameras[cameras.Length - 1].enabled = false;
}
//按下C键下一个摄像机设置为可用
cameras[cameraIndex].enabled = true;
//如果cameraIndex不为0,则设置上一个摄像机不可用
if (cameraIndex != 0)
{
cameras[cameraIndex - 1].enabled = false;
}
}
}
void LateUpdate()
{
//按照不同的摄像机设置相对于Player的位置
switch (cameraIndex)
{
case 0:
Camera.main.transform.position = player.transform.position + mainCameraOffset;
break;
case 1:
Camera.main.transform.position = player.transform.position + leftCameraOffset;
break;
case 2:
Camera.main.transform.position = player.transform.position + topCameraOffset;
break;
default:
break;
}
}
}
其中Sence需创建一个Empty Gameobject为CameraManager,如图:
同时所有的Camera tag需设置为"MainCamera",同默认的MainCamera一致。