using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour {
private int SightDistancespeed = 15;
private bool CameraIsLock = false; //相機是否鎖定
private float RectSize = 50f; //矩形大小
private float CameraMoveSpeed=0.5f; //相機移動速度
private Transform Player; //player的Transform
private float CamerafieldOfView=60; //相機的錐形視野範圍
private Camera camera; //相機
//螢幕邊緣四個矩形
private Rect RectUp;
private Rect RectDown;
private Rect RectLeft;
private Rect RectRight;
void Start () {
//執行個體化螢幕邊緣的四個矩形出來
RectUp = new Rect(0,Screen.height-RectSize,Screen.width,Screen.height);
RectDown = new Rect(0,0,Screen.width,RectSize);
RectLeft = new Rect(0,0,RectSize,Screen.width);
RectRight = new Rect(Screen.width-RectSize,0,Screen.width,Screen.height);
<span style="white-space:pre"> </span>//在場景内查找Tag為Player的物體
Player = GameObject.FindGameObjectWithTag("Player").transform;
camera = this.GetComponent<Camera>();
}
void Update () {
//如果按下Y鍵鎖定相機再次按下解鎖。
if(Input.GetKeyDown(KeyCode.Y))
{
CameraIsLock = !CameraIsLock;
}
CameraMoveAndLock();//視角移動和鎖定
SightDistance();//視距的縮放
}
//視角移動
void CameraMoveAndLock()
{
//空格回到自己
if (Input.GetKey(KeyCode.Space))
{
transform.position = new Vector3(Player.position.x, transform.position.y, Player.position.z - 5f);
}
//如果沒有鎖定相機(視野)可以移動
if(CameraIsLock==false)
{
//如果滑鼠在螢幕上的位置包含在這個矩形裡
if (RectUp.Contains(Input.mousePosition))
{
transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z + CameraMoveSpeed);
}
if (RectDown.Contains(Input.mousePosition))
{
transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z - CameraMoveSpeed);
}
if (RectLeft.Contains(Input.mousePosition))
{
transform.position = new Vector3(transform.position.x - CameraMoveSpeed, transform.position.y, transform.position.z);
}
if (RectRight.Contains(Input.mousePosition))
{
transform.position = new Vector3(transform.position.x + CameraMoveSpeed, transform.position.y, transform.position.z);
}
//判斷相機移動的邊緣在哪裡,不能 超過設定的最遠距離
if (transform.position.z >= 70f)
{
transform.position = new Vector3(transform.position.x, transform.position.y, 70f);
}
if (transform.position.z <= -80f)
{
transform.position = new Vector3(transform.position.x, transform.position.y, -80f);
}
if (transform.position.x >= -5)
{
transform.position = new Vector3(-5, transform.position.y, transform.position.z);
}
if (transform.position.x <= -200f)
{
transform.position = new Vector3(-200, transform.position.y, transform.position.z);
}
}
else if (CameraIsLock == true)
{
//如果鎖定視角,相機視野顯示主角
transform.position = new Vector3(Player.position.x, transform.position.y, Player.position.z - 5f);
}
}
//中鍵滑輪拉遠拉近
void SightDistance()
{
float MouseScrollWheel = Input.GetAxis("Mouse ScrollWheel");
CamerafieldOfView += MouseScrollWheel * -SightDistancespeed;
CamerafieldOfView = Mathf.Clamp(CamerafieldOfView, 30, 60);
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, CamerafieldOfView, Time.deltaTime * SightDistancespeed);
}
}