詳解Unity入門之GameObject
GameObject和Component
GameObject是游戲場(chǎng)景中真實(shí)存在的,而且有位置的一個(gè)物件
Component附屬于GameObject,控制GameObject的各種屬性
GameObject是由Component組合成的,Component的生命周期和GameObject息息相關(guān)。調(diào)用此GameObject的Destroy方法,它的子對(duì)象和對(duì)應(yīng)的所有Component都會(huì)被銷毀,但也可以一次只銷毀一個(gè)Component
常見的Component:
Component | 作用 |
---|---|
RigidBody 剛體 | 使物體能在物理控制下運(yùn)動(dòng) |
Collider 碰撞器 | 和RigidBody剛體一起使碰撞發(fā)生,沒有Collider,兩個(gè)碰撞的剛體會(huì)相互穿透 |
Renderer 渲染器 | 使物體顯示在屏幕上 |
AudioSource 音頻源 | 使物體在scence場(chǎng)景播放音頻 |
Animation 動(dòng)畫 | |
Animator 動(dòng)畫控制器 |
同時(shí)所有腳本都是組件,因此都能附到游戲?qū)ο笊?/p>
常用的組件可以通過簡(jiǎn)單的成員變量獲取
附在游戲?qū)ο笊系慕M件或腳本可以通過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可以創(chuàng)建虛擬軸和按鈕,并終端用戶可以在屏幕配置對(duì)話框配置鍵盤輸入。
如果想添加新的虛擬軸,選擇菜單Edit->Project Settings->Input menu。這里可以改變每個(gè)軸的設(shè)置。即可進(jìn)入Input Manager的配置界面。
在腳本中,所有虛擬軸通過它們的名字(name)來訪問
每個(gè)項(xiàng)目創(chuàng)建后,都有下面的默認(rèn)輸入軸:
- 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被映射到鼠標(biāo)移動(dòng)增量
- Window Shake X and Window Shake Y is mapped to the movement of the window.Window Shake X 和 Window Shake Y 被映射到窗口的移動(dòng)
Time
Time類是Unity中的一個(gè)全局變量,它記載了和游戲相關(guān)的時(shí)間,幀數(shù)等數(shù)據(jù)
Time類包含一個(gè)非常重要的變量叫deltaTime.這個(gè)變量包含從上次調(diào)用Update 或FixedUpdate到現(xiàn)在的時(shí)間(根據(jù)你是放在Update函數(shù)還是FixedUpdate函數(shù)中)(Update每幀調(diào)用一次)
例:使物體在一個(gè)勻速的速度下旋轉(zhuǎn),不依賴幀的速率
using UnityEngine; using System.Collections; public class example : MonoBehaviour { void Update() { transform.Rotate(0, 5 * Time.deltaTime, 0); } }
Physics和Transform
Physics類是一個(gè)工具函數(shù)類,它主要提供了Linecast和Raycast兩種射線投射方式。
- Linecast是以投射的起始位置和終止位置為參數(shù)
- Raycast則是以投射的起始位置和投射方向?yàn)閰?shù)
來判斷這個(gè)投射有沒有和某個(gè)Collider發(fā)生了碰撞。
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這個(gè)模塊包含三個(gè)最重要的Component:RigidBody,Collision,Joint
- RgidBody作為一個(gè)受力物體存在,所以可以向一個(gè)RigidBody施加Force(力),Drag(阻力)。同時(shí)RigidBody還有 velocity (速度),mass(質(zhì)量),position(位置),旋轉(zhuǎn)(rotation)等屬性
- Collider是為了處理物理中的碰撞事件而出現(xiàn)的類,如果沒有Collider,兩個(gè)RigidBody之間無法發(fā)生碰撞。同一個(gè)GameObject可以綁定多個(gè)Collider構(gòu)建更加復(fù)雜的碰撞體結(jié)構(gòu)。Collider也可以設(shè)置material,即Collider的物理材質(zhì)。 用于調(diào)整摩擦力和碰撞單位之間的反彈效果。(當(dāng)發(fā)生碰撞時(shí),會(huì)觸發(fā)銷毀函數(shù)OnCollisionEnter,OnCollisionStay,OnCollisionExit等等
- Joint用于連接兩個(gè)RigidBody,當(dāng)Joint斷掉的時(shí)候會(huì)觸發(fā)OnJointBreak的回調(diào)函數(shù)。
MonoBehaviour
GameObject是游戲場(chǎng)景中真實(shí)存在的,而且有位置的一個(gè)物件
而控制GameObject則需要腳本組件
MonoBehaviour 是 Unity 中所有腳本的基類
MonoBehaviour is the base class from which every Unity script derives.
MonoBehaviour生命周期
在游戲里經(jīng)常出現(xiàn)需要檢測(cè)敵人和我方距離的問題,這時(shí)如果要尋找所有的敵人,顯然要消耗的運(yùn)算量太大了,所以最好的辦法是將攻擊范圍使用Collider表示,然后將Collider的isTrigger設(shè)置為True。最后使用OnTriggerEnter來做攻擊范圍內(nèi)的距離檢測(cè),這樣會(huì)極大提升程序性能。
腳本的基本結(jié)構(gòu)
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下的類 } }
總結(jié)
Time,Input,Physics都是Unity中的全局變量
GameObject是游戲中的基本物件,是由Component組合而成的,GameObject本身必須有Transform的Component
GameObject是游戲場(chǎng)景中真實(shí)存在,而且有位置的一個(gè)物件
以上就是詳解Unity入門之GameObject的詳細(xì)內(nèi)容,更多關(guān)于Unity入門之GameObject的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# 獲取數(shù)據(jù)庫(kù)中所有表名、列名的示例代碼
這篇文章主要介紹了C# 獲取數(shù)據(jù)庫(kù)中所有表名、列名,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06c#之獲取本機(jī)主機(jī)名的四種方式總結(jié)
這篇文章主要介紹了c#之獲取本機(jī)主機(jī)名的四種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07C#控制臺(tái)帶參數(shù)程序源碼編寫實(shí)例講解
像ipconfig /all 這樣的CMD命令想必大家都知道,但是很多童鞋可能不知道怎么寫這樣的控制臺(tái)帶參數(shù)的程序,需要的朋友可以了解下2012-12-12C# 實(shí)現(xiàn)ADSL自動(dòng)斷網(wǎng)和撥號(hào)的方法(適用于撥號(hào)用戶)
下面小編就為大家?guī)硪黄狢# 實(shí)現(xiàn)ADSL自動(dòng)斷網(wǎng)和撥號(hào)的方法(適用于撥號(hào)用戶)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12WPF實(shí)現(xiàn)雷達(dá)圖(仿英雄聯(lián)盟)的示例代碼
這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)雷達(dá)圖(仿英雄聯(lián)盟)的繪制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2022-07-07C#實(shí)現(xiàn)json格式轉(zhuǎn)換成對(duì)象并更換key的方法
這篇文章主要介紹了C#實(shí)現(xiàn)json格式轉(zhuǎn)換成對(duì)象并更換key的方法,涉及C#操作json格式數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下2015-06-06