2014年8月4日 星期一

Camera 自由視角移動腳本

Unity Lib現呈提供了Input.GetAxis現成的IO庫, 可以直接拿來使用,不需要再寫滑鼠底層的訊號腳本, 一個3d視角移動需要有靈敏度(sensitivity) 以及我們目前的 Axis 軸(x,y,z)
腳本如下:

using UnityEngine;
using System.Collections;

public class BetterLookAt : MonoBehaviour {
 
 // Use this for initialization
 void Start () {
   
 }
 float rotationy = 0F;
 // Update is called once per frame
 void Update () {
  float rotationx = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * 15F;//15 F = sensitivity
  rotationy += Input.GetAxis("Mouse Y") * 15F;
  rotationy = Mathf.Clamp(rotationy,-60,60);
  
  transform.localEulerAngles = new Vector3(-rotationy,rotationx,0);
 }
}

設計方法
Tag 1:  移動攝影機x軸 ->
目前Y軸的方向 (transform.localEulerAngles.y) + 新的地增值,取得滑鼠的Mouse X(1 ~ -1)(Input.GetAxis("Mouse X")) * 靈敏度f //取得y軸是為了能夠呈現自由斜線視角

Tag 2:  移動攝影機y軸 ->
預設rotation y是個0f,之後與Input.GetAxis("Mouse Y")相加在乘與靈敏度f

Tag 3: 限定rotation y 的值,否則會有無法預期的錯誤 ->
Mathf.Clamp是一個可以限定max,main值的函數, 傳入的值為 (被限定的值,最大值,最小值),被限定的值會受到最大值或最小值改變,其需要設定最大值是 -60 ~ +60

Tag 4: 傳送指定的值到視角的攝影機 localEulerAngles = new Vector3(-y,x,0); y為顛倒值

參考:
MSDN Mathf.Clamp: http://msdn.microsoft.com/zh-tw/library/hh308289.aspx
Unity API GetAxis: http://docs.unity3d.com/ScriptReference/Input.GetAxis.html
Unity API Mathf.Clamp: http://docs.unity3d.com/ScriptReference/Mathf.Clamp.html

沒有留言:

張貼留言

© ERIC RILEY , 自由無須告知轉貼
Background Japanese Sayagata by Olga Libby