09應用輸入管理器轉動場景--《程序員學Unity3d》

爲什麼極品飛車等等遊戲,都可以通過系統設置很方面地根據自己喜歡設置操作方式,有人喜歡用箭頭來控制沒有喜歡用用“W,S,A,D”來控制,這就說明了程序員不會把控制方式寫死在程序裏面,來看看Unity3d如何讓用戶可以隨時修改“快捷鍵”。

優點:不僅方便後期維護,也可以減少很多代碼。


Edit --Project Settings -- Input 打開輸入管理器

 

前面17組是系統配置的,可以修改或刪除。

Size改爲18,新增一組。(名稱爲Test,對應按鍵爲 a



在發佈的程序中,如果要修改對應鍵,控制面板中默認顯示該功能名爲Name

若設置了正值描述名稱,即顯示功能名爲該值。

負按鍵:比如正按鍵爲 ,負按鍵爲“S”。它們的返回值分別爲1-1 。在代碼區域進行判斷,再實現不同的功能。

備選正負按鈕:第二組實現與第一組功能相同的按鈕。

則這兩個鍵都可以實現同一功能。

腳本代碼:

if (Input.GetButton("Test"))
        { 
        }
相當於:
        //if (Input.GetKey(KeyCode.A)) //不便於維護
        //{ 
        //}
Input.GetAxis("Test");//返回正負鍵值。正爲,負爲-1,沒有按下爲0


發佈的程序,即可以隨時修改對應鍵值

 

轉動場景

1.轉動物體

首先創建一個輸入管理器

 

要實現ALeft 鍵向左轉,DRight鍵向右轉

創建一個物體和一個腳本,將腳本賦給物體。

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 類型,比如下面系統自帶的鼠標橫向滑動時。TypeMouse 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軸的值,即可實現伸縮鏡頭效果。

 unity3

void Update () {
        gameObject.transform.Translate(0, 0, Input.GetAxis("Mouse ScrollWheel") * 100 *Time.deltaTime, Space.Self);
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章