詳解Unity入門之GameObject
GameObject和Component
GameObject是遊戲場景中真實存在的,而且有位置的一個物件
Component附屬於GameObject,控制GameObject的各種屬性
GameObject是由Component組合成的,Component的生命周期和GameObject息息相關。調用此GameObject的Destroy方法,它的子對象和對應的所有Component都會被銷毀,但也可以一次隻銷毀一個Component
常見的Component:
Component | 作用 |
---|---|
RigidBody 剛體 | 使物體能在物理控制下運動 |
Collider 碰撞器 | 和RigidBody剛體一起使碰撞發生,沒有Collider,兩個碰撞的剛體會相互穿透 |
Renderer 渲染器 | 使物體顯示在屏幕上 |
AudioSource 音頻源 | 使物體在scence場景播放音頻 |
Animation 動畫 | |
Animator 動畫控制器 |
同時所有腳本都是組件,因此都能附到遊戲對象上
常用的組件可以通過簡單的成員變量獲取
附在遊戲對象上的組件或腳本可以通過GetComponent獲取
using UnityEngine; using System.Collections; public class example : MonoBehaviour { void Awake() { transform.Translate(0, 1, 0); GetComponent<Transform>().Translate(0, 1, 0); } }
Input和InputManager
在InputManager可以創建虛擬軸和按鈕,並終端用戶可以在屏幕配置對話框配置鍵盤輸入。
如果想添加新的虛擬軸,選擇菜單Edit->Project Settings->Input menu。這裡可以改變每個軸的設置。即可進入Input Manager的配置界面。
在腳本中,所有虛擬軸通過它們的名字(name)來訪問
每個項目創建後,都有下面的默認輸入軸:
- Horizontal and Vertical are mapped to w, a, s, d and the arrow keys.水平和垂直被映射到w, a, s, d鍵和方向鍵
- Fire1, Fire2, Fire3 are mapped to Control, Option (Alt), and Command, respectively.Fire1, Fire2, Fire3被分別映射到Ctrl,Option(Alt)和Command鍵
- Mouse X and Mouse Y are mapped to the delta of mouse movement.Mouse X 和 Mouse Y被映射到鼠標移動增量
- Window Shake X and Window Shake Y is mapped to the movement of the window.Window Shake X 和 Window Shake Y 被映射到窗口的移動
Time
Time類是Unity中的一個全局變量,它記載瞭和遊戲相關的時間,幀數等數據
Time類包含一個非常重要的變量叫deltaTime.這個變量包含從上次調用Update 或FixedUpdate到現在的時間(根據你是放在Update函數還是FixedUpdate函數中)(Update每幀調用一次)
例:使物體在一個勻速的速度下旋轉,不依賴幀的速率
using UnityEngine; using System.Collections; public class example : MonoBehaviour { void Update() { transform.Rotate(0, 5 * Time.deltaTime, 0); } }
Physics和Transform
Physics類是一個工具函數類,它主要提供瞭Linecast和Raycast兩種射線投射方式。
- Linecast是以投射的起始位置和終止位置為參數
- Raycast則是以投射的起始位置和投射方向為參數
來判斷這個投射有沒有和某個Collider發生瞭碰撞。
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { void Update() { // 使用Raycast Vector3 fwd = transform.TransformDirection(Vector3.forward); if (Physics.Raycast(transform.position, fwd, 10)) print("There is something in front of the object!"); // 使用Linecast Transform target; if (!Physics.Linecast(transform.position, target.position)) ProcessData.AndDoSomeCalculations(); } }
在Physics這個模塊包含三個最重要的Component:RigidBody,Collision,Joint
- RgidBody作為一個受力物體存在,所以可以向一個RigidBody施加Force(力),Drag(阻力)。同時RigidBody還有 velocity (速度),mass(質量),position(位置),旋轉(rotation)等屬性
- Collider是為瞭處理物理中的碰撞事件而出現的類,如果沒有Collider,兩個RigidBody之間無法發生碰撞。同一個GameObject可以綁定多個Collider構建更加復雜的碰撞體結構。Collider也可以設置material,即Collider的物理材質。 用於調整摩擦力和碰撞單位之間的反彈效果。(當發生碰撞時,會觸發銷毀函數OnCollisionEnter,OnCollisionStay,OnCollisionExit等等
- Joint用於連接兩個RigidBody,當Joint斷掉的時候會觸發OnJointBreak的回調函數。
MonoBehaviour
GameObject是遊戲場景中真實存在的,而且有位置的一個物件
而控制GameObject則需要腳本組件
MonoBehaviour 是 Unity 中所有腳本的基類
MonoBehaviour is the base class from which every Unity script derives.
MonoBehaviour生命周期
在遊戲裡經常出現需要檢測敵人和我方距離的問題,這時如果要尋找所有的敵人,顯然要消耗的運算量太大瞭,所以最好的辦法是將攻擊范圍使用Collider表示,然後將Collider的isTrigger設置為True。最後使用OnTriggerEnter來做攻擊范圍內的距離檢測,這樣會極大提升程序性能。
腳本的基本結構
using System.Collections; using System.Collections.Generic; using UnityEngine; using MyGame; //3引用命名空間 public class player : MonoBehaviour { // Use this for initialization void Start () { GameData data; //4才可以使用 } // Update is called once per frame void Update () { } } namespace MyGame { //1定義命名空間 class GameData { //2屬於MyGame下的類 } }
總結
Time,Input,Physics都是Unity中的全局變量
GameObject是遊戲中的基本物件,是由Component組合而成的,GameObject本身必須有Transform的Component
GameObject是遊戲場景中真實存在,而且有位置的一個物件
以上就是詳解Unity入門之GameObject的詳細內容,更多關於Unity入門之GameObject的資料請關註WalkonNet其它相關文章!