1. 程式人生 > >Unity 移動攝像機到目標位置

Unity 移動攝像機到目標位置

今天實現了一個小功能,通過移動攝像機實現定位功能功能描述:一開始攝像機處於初始位置,通過點選滑鼠選擇目標物體將攝像機拉近到目標物體,實現定位功能,
還可以通過迴歸按鈕使攝像機迴歸到初始狀態。
using UnityEngine;
using System.Collections;

public class Sce_09_InstrumentLocating : MonoBehaviour {
	public string InstrumentID;
	//儀表元件
	private Transform obj0;
	private Transform obj1;
	private Transform obj2;
	//攝像機元件
	public Transform Cam_transform;
	private Vector3 Cam_pos0;
	public float smoothTime = 0.5F;
	private Vector3 velocity = Vector3.zero;
       //偏移量
       private Vector3  offset = new Vector3 (10, 10, -10);
	public bool isMove;

	void MyFunction1(string instrumentid)
	{
		InstrumentID=instrumentid;
		isMove = true;
	}

	void Start () {
		obj1 = GameObject.Find ("壓力錶1").transform;
		obj2 = GameObject.Find ("壓力錶2").transform;
		Cam_transform = Camera.main.transform;
		Cam_pos0 = Cam_transform.position;  //儲存攝像機初始座標
		isMove = false;

	}
	void Update()
	{
				//平滑阻尼的使用
				if (isMove) {
			   if (InstrumentID == "0") {
				 Cam_transform.position = Vector3.SmoothDamp (Cam_transform.position, Cam_pos0, ref velocity, smoothTime);
			           }
						if (InstrumentID == "1") {
				Vector3 obj1Position = obj1.position;
				Cam_transform.position = Vector3.SmoothDamp (Cam_transform.position, obj1Position+ offset, ref velocity, smoothTime);
						}

						if (InstrumentID == "2") {
				Vector3 obj2Position = obj2.position;
				Cam_transform.position = Vector3.SmoothDamp (Cam_transform.position, obj2Position + offset, ref velocity, smoothTime);
						}	
				}
		}
	void OnGUI(){
		//本地按鈕測試定位
		if (GUILayout.Button ("迴歸", GUILayout .Width (80), GUILayout .Height (30))) 
		{
			InstrumentID ="0";
			isMove=true;
		}
		if (GUILayout.Button ("1號儀表", GUILayout .Width (80), GUILayout .Height (30))) 
		{
			InstrumentID ="1";
			isMove=true;
		}
		if (GUILayout.Button ("2號儀表", GUILayout .Width (80), GUILayout .Height (30))) 
		{
			InstrumentID ="2";
			isMove =true;
		}

	}

}