Unity3D 遊戲引擎之控制模型移動旋轉與碰撞
雨松MOMO原創文章如轉載,請註明:轉載至我的獨立網域名稱部落格雨松MOMO程式研究院
,原文地址:http://www.xuanyusong.com/archives/505
上一章介紹了模型的旋轉與平移,本章介紹一些好玩的,通過按鈕來控制模型的移動與鏡頭的跟隨,指令碼參數的傳遞。個人覺得Unity3D 這套遊戲引擎真的很棒,它可以為開發人員節省時間。用更多少的指令碼,可以實現更多的功能。先贊一下,哇哢哢~廢話不多說了,入正題!
首先在3D世界中建立一個箱子模型,然後添加一個指令碼,命名為 js0綁定到這個箱子中。在添加一個指令碼,命名為js1 ,同樣綁定到這個箱子上,用來實現對象的建立與調用方法參數的傳遞 ~
var Control; 這裡聲明一個控制類的對象,用來進行參數的傳遞,調用方法。
Getomponent(js1): 得到指令碼名稱為js1的對象,這裡把值賦給Control,就可以使用js1指令碼中的方法了,下面的代碼中通過這個對象調用模型的移動方法。
Input.GetKey(KeyCode): 這個方法返回一個Bool 判斷當前按鍵是否被按下,當然這裡只能運行在PC上才可以感應按鈕,因為IOS的裝置上沒有按鍵,以後我會介紹在IOS上添加遊戲搖杆的功能,本章我們先學習一下PC上的基本按鈕響應。
下面代碼
實現按下“W”控制物體向前實現按下“S”控制物體向後
實現按下“A”控制物體向左平移
實現按下“D”控制物體向右平移
實現按下“Q”控制物體向左旋轉
實現按下“E”控制物體向右旋轉
js0.js 代碼
//旋轉移動速度var Speed = 50;//控制對象var Control;function Update(){ //得到控制對象 Control = GetComponent(js1); //判斷按鍵 if(Input.GetKey(KeyCode.W)) { //前進 Control.ForWard(); }else if(Input.GetKey(KeyCode.S)) {//後退 Control.Back(); } if(Input.GetKey(KeyCode.A)) { //前左 Control.GLeft(); }else if(Input.GetKey(KeyCode.D)) {//後右 Control.GRight(); } if(Input.GetKey(KeyCode.Q)) { //左旋轉 Control.leftRotate(Vector3.up *Time.deltaTime * -Speed); }else if(Input.GetKey(KeyCode.E)) { //右旋轉 Control.RightRotate(Vector3.up *Time.deltaTime * Speed); } }
js1.js 代碼
參數的傳遞可以使用obj進行傳遞,代碼中我將旋轉的角度做為參數傳遞到了js1.js中控制模型旋轉。Vector3 標示一個3D的向量單位,它可以標示模型的三個方向,這雷根據旋轉的角度與移動的向量設定它。
//前進速度var Speed = 50;//前進function ForWard() {transform.Translate(Vector3.forward * Time.deltaTime *Speed);}//後退function Back() { transform.Translate(Vector3.forward * Time.deltaTime * -Speed);}//向左function GLeft() {transform.Translate(Vector3.right * Time.deltaTime *-Speed);}//向右function GRight() { transform.Translate(Vector3.right * Time.deltaTime * Speed);}//傳遞參數//左旋轉function leftRotate(obj){transform.Rotate(obj);}//右旋轉function RightRotate(obj){transform.Rotate(obj);}
OK點擊運行,通過按鍵我們可以正常的控制模型平移與旋轉,但是現在有兩個問題 1, 主攝像機不能跟隨控制模型, 2 、模型可以橫穿過山丘,感覺很假。下面我們解決這兩個問題。
在Unity3D標準資源的指令碼中系統幫我們寫好了跟隨指令碼.如所示,點擊Import Package - > Scripts 將系統指令碼匯入。
選中攝像機 點擊Component - > Camera-Control - > Smoot Follow ,給主攝像機添加一個跟隨指令碼。
跟隨指令碼添加完以後,須要指定一個跟隨的物體,下面紅框內將跟隨的物體Cube拖動進來,這裡Cube就是我們上面控制的模型,那麼這樣,攝像機將會一直在身後跟隨我們控制的模型。下面是一些跟隨的參數,設定 跟隨的距離 高度等等,盆友們手動的修改一下運行遊戲就可以看出來變化,。
控制物體的碰撞可以使用 選中模型, Component - > Physics - > Rigidbody 設定這個模型的重力碰撞。那麼這樣你控制的模型就不會穿過山丘,而是感應重力碰撞。
點擊運行遊戲,看看效果,控制箱子行走的同時,我們可以清晰的看出旁邊的樹木被物理碰撞所幹擾,前後,左右,旋轉 完全OK .大家快試試吧。哇哢哢~~
明天開始MOMO又要開始處理一部分iPhone 的介面圖形化開發,Tomorrow is another day ,加油哇哢哢~ Unity3D 的世界中指令碼還可以做很多事情,以後我在慢慢向各位道來~ 歡迎各位盆友可以和MOMO一起討論Unity3D遊戲開發,哇哢哢~~~