爲什麼極品飛車等等遊戲,都可以通過系統設置很方面地根據自己喜歡設置操作方式,有人喜歡用箭頭來控制沒有喜歡用用“W,S,A,D”來控制,這就說明了程序員不會把控制方式寫死在程序裏面,來看看Unity3d如何讓用戶可以隨時修改“快捷鍵”。
優點:不僅方便後期維護,也可以減少很多代碼。
Edit --Project Settings -- Input 打開輸入管理器
前面17組是系統配置的,可以修改或刪除。
將Size改爲18,新增一組。(名稱爲Test,對應按鍵爲 a)
在發佈的程序中,如果要修改對應鍵,控制面板中默認顯示該功能名爲Name。
若設置了正值描述名稱,即顯示功能名爲該值。
負按鍵:比如正按鍵爲 W ,負按鍵爲“S”。它們的返回值分別爲1,-1 。在代碼區域進行判斷,再實現不同的功能。
備選正負按鈕:第二組實現與第一組功能相同的按鈕。
則這兩個鍵都可以實現同一功能。
腳本代碼:
if (Input.GetButton("Test"))
{
}
相當於:
//if (Input.GetKey(KeyCode.A)) //不便於維護
//{
//}
Input.GetAxis("Test");//返回正負鍵值。正爲,負爲-1,沒有按下爲0
發佈的程序,即可以隨時修改對應鍵值
轉動場景
1.轉動物體
首先創建一個輸入管理器
要實現A和Left 鍵向左轉,D和Right鍵向右轉
創建一個物體和一個腳本,將腳本賦給物體。
void Update () {
//Input.GetAxisRaw("TurnLeftOrRight") 當按下A或Left,返回;按下D或Right,返回-1;不按時返回。立即返回
gameObject.transform.Rotate(0, Input.GetAxisRaw("TurnLeftOrRight") * 15 * Time.deltaTime, 0, Space.Self);//鬆口鍵時,立即停止
//這時將輸入管理器的Sensitivity(靈敏度)由改爲
Input.GetAxis("TurnLeftOrRight");
//這樣返回值將是變化,例如按下A,將在一定時間內大概從->0.2->0.4…->1變化,這時鬆開鍵時,還是立即返回
//這時將輸入管理器的Gravity(重力靈敏度)由改爲。
//這樣,鬆口按鍵時,返回值將由"終值"慢慢變化到
}
2.轉動視覺
Type 類型,比如下面系統自帶的鼠標橫向滑動時。Type爲Mouse Movement ; Axis 爲X axis
……
0.1鼠標平移,鏡頭繞中心旋轉
創建一個新的腳本
void Update () {
gameObject.transform.Rotate(0, Input.GetAxis("Mouse X") * 10, 0, Space.Self);
}
注意不能只能把腳本扔給攝像機,因爲上面的代碼只改變Y軸的值
應該新創建一個空物體,讓它的座標爲(0,0,0),然後讓攝像機成爲它的子物體!
將腳本扔給該空物體,即可實現該攝像機到中心點的距離不變,但隨着中心點旋轉。
0.2轉動鼠標滾輪,鏡頭伸縮。
創建一個新的腳本,直接扔給攝像機。當鏡頭視覺對準物體時,(Ctrl+Shift+F),攝像機的Z軸便是對準物體的,這時這需要移動攝像機改變Z軸的值,即可實現伸縮鏡頭效果。
void Update () {
gameObject.transform.Translate(0, 0, Input.GetAxis("Mouse ScrollWheel") * 100 *Time.deltaTime, Space.Self);
}