小樂的游戲之旅之Unity3D腳本的基本操作(上)

從今天開始我們將進行Unity游戲開發(fā)的編程之旅绰垂!

初識MonoBehaviour

繼承or組件

1.unity腳本和C#腳本的區(qū)別泵额。

* unity腳本繼承自MonoBehavior

* unity腳本不能new

* unity腳本有自己的生命周期

* unity腳本作為組件附加在GameObject上面,是go的擴展和功能

1.創(chuàng)建和命名 2.訪問修飾符在Unity監(jiān)控面板的表現(xiàn)形式



腳本生命周期

1.Reset是在用戶點擊檢視面板的Reset按鈕或者首次添加該組件時被調(diào)用。此函數(shù)只在編輯模式下被調(diào)用。Reset最常用于在檢視面板中給定一個最常用的默認值疏遏。

public GameObject target;

void Reset() {??????????

? target = GameObject.FindWithTag("Player");

}

2.當(dāng)一個腳本實例被載入時Awake被調(diào)用。

Awake用于在游戲開始之前初始化變量或游戲狀態(tài)啤月。

在腳本整個生命周期內(nèi)它僅被調(diào)用一次Awake在所有對象被初始化之后調(diào)用,所以可以安全的與其他對象對話或用諸如 GameObject.FindWithTag 這樣的函數(shù)搜索它們劳跃。

每個游戲物體上的Awke以隨機的順序被調(diào)用谎仲。

Awake總是在Start之前被調(diào)用。

Awake像構(gòu)造函數(shù)一樣只被調(diào)用一次刨仑。 void Awake(){}

3.當(dāng)對象變?yōu)榭捎没蚣せ顮顟B(tài)時此函數(shù)被調(diào)用郑诺。

OnEnable不能用于協(xié)同程序。

using UnityEngine;

using System.Collections;

public class OnEnabledTest : MonoBehaviour?

{?

???void OnEnable() {??

? ?? Debug.Log("script was enabled");

???}

}

4.Start僅在Update函數(shù)第一次被調(diào)用前調(diào)用杉武。

Start在behaviour的生命周期中只被調(diào)用一次辙诞。

它和Awake的不同是Start只在腳本實例被啟用時調(diào)用。

可以按需調(diào)整延遲初始化代碼轻抱。

Awake總是在Start之前執(zhí)行飞涂。

允許你協(xié)調(diào)初始化順序。

初始化目標變量祈搜, 目標是私有的并且不能在檢視面板中編輯


5.固定更新void FixedUpdate ()處理基于物理游戲行為一般用該方法處理Rigidbody時较店,需要用FixedUpdate代替Update。當(dāng)MonoBehaviour啟用時容燕,其 FixedUpdate 在每一幀被調(diào)用梁呈。

例如:給剛體加一個作用力時,必須應(yīng)用作用力在FixedUpdate里的固定幀蘸秘,而不是Update中的幀官卡。(兩者幀長不同)每幀應(yīng)用一個向上的力到剛體上。


6.進入觸發(fā)器void OnTriggerEnter (Collider other) 當(dāng)Collider(碰撞體)進入trigger(觸發(fā)器)時調(diào)用OnTriggerEnter秘血。

逗留觸發(fā)器void OnTriggerStay (Collider other) 當(dāng)碰撞體接觸觸發(fā)器時味抖,OnTriggerStay將在每一幀被調(diào)用。

退出觸發(fā)器void OnTriggerExit? (Collider other)當(dāng)Collider(碰撞體)停止觸發(fā)trigger(觸發(fā)器)時調(diào)用OnTriggerExit灰粮。

7.進入碰撞 void? OnCollisionEnter (Collision collisionInfo),當(dāng)此collider/rigidbody觸發(fā)另一個rigidbody/collider時,OnCollisionEnter將會在開始碰撞時調(diào)用忍坷。

逗留碰撞 void? OnCollisionStay (Collision collisionInfo),當(dāng)此collider/rigidbody觸發(fā)另一個rigidbody/collider時粘舟,OnCollisionStay將會在每一幀被調(diào)用熔脂。

退出碰撞 void? OnCollisionExit (Collision collisionInfo),當(dāng)此collider/rigidbody停止觸發(fā)另一個rigidbody/collider時,OnCollisionExit將被調(diào)用柑肴。

Collision包含接觸點,碰撞速度等細節(jié)霞揉。如果在函數(shù)中不使用碰撞信息,省略collisionInfo參數(shù)以避免不必要的運算.

當(dāng)剛體空閑時晰骑,如一個掉到地板上的盒子适秩,他們就會開始休眠。休眠是性能優(yōu)化的一個策略硕舆,即物理引擎不會處理那些處于休眠中的剛體秽荞。這樣一來,只要某剛體在正常情況下不移動抚官,那么你可以在你的場景中添加大量的該剛體扬跋。

剛體休眠完全自動發(fā)生。只要剛體的速度低于sleepAngularVelocity和sleepVelocity凌节,該剛體就會開始休眠钦听。其空閑一些幀后,就會被設(shè)置成休眠狀態(tài)倍奢。處于休眠狀態(tài)中的物體朴上,不會再對其進行碰撞檢測和模擬。這會節(jié)約大量的CPU開銷卒煞。

所以如果你想使進入睡眠余指,那么在他們將要進入休眠模式時不要更改他們的屬性或者添加任何外力。

你可以調(diào)節(jié)兩個變量來確保剛體自動進入睡眠跷坝,這兩個變量是:Rigidbody.sleepVelocity和Rigidbody.sleepAngularVelocity酵镜。這兩個變量的初始值即分別為物理管理器中的sleepVelocity和sleepAngularVelocity的值(編輯->項目設(shè)置->物理)。

8.void OnMouseUp ():當(dāng)用戶釋放鼠標按鈕時調(diào)用OnMouseUp柴钻。OnMouseUp只調(diào)用在按下的同一物體上淮韭。

void OnMouseDown ():當(dāng)鼠標在GUIElement(GUI元素)或Collider(碰撞體)上點擊時調(diào)OnMouseDown。

void OnMouseEnter ():當(dāng)鼠標進入到GUIElement(GUI元素)或Collider(碰撞體)中時調(diào)用OnMouseEnter贴届。

void OnMouseExit ():當(dāng)鼠標移出GUIElement(GUI元素)或Collider(碰撞體)上時調(diào)用OnMouseExit靠粪。

void OnMouseOver ()當(dāng)鼠標懸浮在GUIElement(GUI元素)或Collider(碰撞體)上時調(diào)用 OnMouseOver 。

9.void Update ():當(dāng)MonoBehaviour啟用時毫蚓,其Update在每一幀被調(diào)用占键。Update是實現(xiàn)各種游戲行為最常用的函數(shù)。

using UnityEngine;

using System.Collections;

public class UpdateTest : MonoBehaviour?

{???

???void Update() {??????

??????transform.Translate(0, 0, Time.deltaTime * 1);

???}

}

10.當(dāng)Behaviour啟用時元潘,其LateUpdate在每一幀被調(diào)用畔乙。

LateUpdate是在所有Update函數(shù)調(diào)用后被調(diào)用。

這可用于調(diào)整腳本執(zhí)行順序翩概。例如:當(dāng)物體在Update里移動時牲距,跟隨物體的相機可以在LateUpdate里實現(xiàn)返咱。

11.界面void OnGUI ()

渲染和處理GUI事件時調(diào)用。這意味著你的OnGUI程序?qū)诿恳粠徽{(diào)用牍鞠。

void OnGUI(){

??????Rect rect = new Rect(10,10,150,60);

??????bool isClicked=GUI.Button(rect,"開始");

??????if(isClicked)

? ? ?? {

? ? ? ? }

???}

12.當(dāng)程序暫停void OnApplicationPause ()當(dāng)玩家暫停時發(fā)送到所有的游戲物體咖摹。

13.?當(dāng)對象變?yōu)椴豢捎没蚍羌せ顮顟B(tài)時此函數(shù)被調(diào)用。當(dāng)物體被銷毀時它將被調(diào)用难述,并且可用于任意清理代碼萤晴。腳本被卸載時,OnDisable將被調(diào)用胁后,OnEnable在腳本被載入后調(diào)用店读。

14.當(dāng)MonoBehaviour將被銷毀時,這個函數(shù)被調(diào)用择同。OnDestroy只會在預(yù)先已經(jīng)被激活的游戲物體上被調(diào)用.void OnDestory();



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末两入,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子敲才,更是在濱河造成了極大的恐慌裹纳,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紧武,死亡現(xiàn)場離奇詭異剃氧,居然都是意外死亡,警方通過查閱死者的電腦和手機阻星,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門朋鞍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妥箕,你說我怎么就攤上這事滥酥。” “怎么了畦幢?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵坎吻,是天一觀的道長。 經(jīng)常有香客問我宇葱,道長瘦真,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任黍瞧,我火速辦了婚禮诸尽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘印颤。我一直安慰自己您机,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著往产,像睡著了一般被碗。 火紅的嫁衣襯著肌膚如雪某宪。 梳的紋絲不亂的頭發(fā)上仿村,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音兴喂,去河邊找鬼蔼囊。 笑死,一個胖子當(dāng)著我的面吹牛衣迷,可吹牛的內(nèi)容都是我干的畏鼓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼壶谒,長吁一口氣:“原來是場噩夢啊……” “哼云矫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起汗菜,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤让禀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后陨界,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巡揍,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年菌瘪,在試婚紗的時候發(fā)現(xiàn)自己被綠了腮敌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡俏扩,死狀恐怖糜工,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情录淡,我是刑警寧澤捌木,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站赁咙,受9級特大地震影響钮莲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彼水,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一崔拥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凤覆,春花似錦链瓦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渤刃。三九已至,卻和暖如春贴膘,著一層夾襖步出監(jiān)牢的瞬間卖子,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工刑峡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洋闽,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓突梦,卻偏偏與公主長得像诫舅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宫患,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容