Unity3D 遊戲引擎之控制模型移動旋轉與碰撞(七)

來源:互聯網
上載者:User
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遊戲開發,哇哢哢~~~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.