一.為什么游戲需要腳本?
從靈魂、身體、行為三個(gè)層面來(lái)看,腳本(Script)為游戲注入了生動(dòng)的元素。腳本代碼并非獨(dú)立運(yùn)行的程序,它依賴于Unity引擎的運(yùn)行環(huán)境,并需附加到特定對(duì)象上。在Unity腳本中,沒(méi)有像傳統(tǒng)程序中的"main"函數(shù),而是用于更新游戲循環(huán)中的對(duì)象。Unity為腳本提供了API以便訪問(wèn)引擎功能,例如響應(yīng)玩家輸入、創(chuàng)建圖形效果、控制物理行為、加載下一關(guān)卡以及處理邏輯和交互等。
1.創(chuàng)建腳本
腳本默認(rèn)保存在資產(chǎn)(Assets)文件夾中,最佳實(shí)踐是將其保存在“Script”文件夾下。創(chuàng)建腳本后,你將聲明一個(gè)新的類,這個(gè)類將繼承自MonoBehaviour。需要注意的是,腳本在運(yùn)行時(shí)需要加載命名空間,就像引入"include"一樣。類名應(yīng)當(dāng)是唯一的,且應(yīng)與文件名匹配。在語(yǔ)法方面,每行代碼都需要分號(hào)";"結(jié)尾,大括號(hào)"{}"必須前后匹配。
2.應(yīng)用腳本
腳本的應(yīng)用可以通過(guò)在Console窗口中打印文本來(lái)進(jìn)行調(diào)試。在將腳本附加到對(duì)象時(shí),你需要思考如何添加注釋以及將其附加到哪個(gè)對(duì)象上。
3.編寫(xiě)后端腳本
Unity引擎的內(nèi)部構(gòu)建是使用本地的C/C++,但與之交互時(shí)使用了C#的包裝器和開(kāi)源.NET平臺(tái)。腳本依賴于后端的執(zhí)行,而Unity擁有兩種腳本后端(默認(rèn)情況下,Unity在各個(gè)平臺(tái)上使用Mono后端):
- Mono runtime:?jiǎn)芜\(yùn)行時(shí),實(shí)時(shí)Just-in-time(JIT)編譯(.net)
- IL2CPP:面向C++的中間語(yǔ)言,提前ahead-of-time(AOT)編譯,整個(gè)應(yīng)用程序在運(yùn)行前進(jìn)行編譯
二.C#語(yǔ)言:編譯型語(yǔ)言
如今,Unity只支持C#編程語(yǔ)言,它音譯為“See Sharp”,是微軟通用的編程語(yǔ)言。C#的含義是"C like Object Oriented Language",即“類似C的面向?qū)ο笳Z(yǔ)言”,與Java語(yǔ)言競(jìng)爭(zhēng)激烈。
C#是一種面向?qū)ο蠛兔嫦蚪M件的編程語(yǔ)言,基于類,它是強(qiáng)類型檢查的語(yǔ)言,必須顯式聲明類型。
1.基本性質(zhì)
它繼承了C家族語(yǔ)言(C/C++/Java)的許多原則:
- 有表示語(yǔ)句結(jié)尾的分號(hào);
- 圓括號(hào)“{}”用于對(duì)語(yǔ)句進(jìn)行分組
- “=”用于賦值,“==”用于比較
- 沒(méi)有全局變量或函數(shù),所有內(nèi)容都在類中聲明
- static靜態(tài)成員可以替代全局變量和函數(shù)
- 對(duì)指針的支持有限
-
2.編寫(xiě)基本腳本
面向?qū)ο缶幊?/strong>概念:類/實(shí)例、公共/私有、繼承
- 類:成員變量+函數(shù)(Functions)
- 腳本:是以與其文件名相同的類命名的,一旦作為組件被附加到對(duì)象上,它就變成了類的一個(gè)實(shí)例。
在面試中,經(jīng)常會(huì)問(wèn)到類和實(shí)例之間的區(qū)別,簡(jiǎn)而言之,類是宏觀的,而實(shí)例是具體的。
3.變量(Variables):
Public可從外部訪問(wèn)的公共變量,如其他script / inspector;
Private從外部無(wú)法訪問(wèn)私有變量;
Public公共變量顯示在inspector中,必須帶有類型,用大寫(xiě)字母分隔;
Private私有變量不是在play期間,可以在檢查器中調(diào)整公共變量,但這不會(huì)改變腳本中的默認(rèn)值,大家可以想一想為什么?
“Static”(靜態(tài))變量/函數(shù)在所有實(shí)例中共享,像全局變量/函數(shù)
可以根據(jù)需求設(shè)定public或private,變量名稱應(yīng)以小寫(xiě)字母開(kāi)頭
最好是用有意義的詞來(lái)命名,例如:蘋(píng)果數(shù)量寫(xiě)為appleCount
聲明類型,指定初始值。所有變量均為默認(rèn)為零值
組件和腳本中初始值之間的差異
播放過(guò)程中的更改無(wú)法保持
4.組件訪問(wèn)
在Unity中,使用"."來(lái)訪問(wèn)成員變量和函數(shù),組件是GameObject的成員變量。在腳本附加到對(duì)象時(shí),它可以訪問(wèn)其他組件和GameObject。一些常用的組件有:??????
- Transform:對(duì)于所有游戲?qū)ο?,變換
- Renderer:渲染器,渲染對(duì)象、材質(zhì)、紋理等
- Rigidbody:剛體,一種物理財(cái)產(chǎn)
- Collider:碰撞器,用于碰撞檢測(cè)
- Particle system:粒子系統(tǒng),可以形成煙霧、爆炸、雪花等效果
5.函數(shù)(Functions)
*這一部分Unity面試時(shí)常考
函數(shù)按事件間歇調(diào)用,Unity將控制傳遞給一個(gè)函數(shù),執(zhí)行它,然后獲取控制回位
函數(shù)名稱應(yīng)該以大寫(xiě)字母開(kāi)頭,帶或不帶變量列表
*初始化功能
- Awake():在場(chǎng)景加載時(shí)為每個(gè)對(duì)象調(diào)用,被稱為"BEFORE?start"
- Start():在第一幀或物理更新之前調(diào)用
(對(duì)每個(gè)對(duì)象都只調(diào)用一次)
*常規(guī)事件函數(shù)
- Update():每一幀執(zhí)行一次,1秒不一定執(zhí)行幾次;處理幀更新,如對(duì)用戶輸入的響應(yīng);渲染前更改狀態(tài)
- FixedUpdate():執(zhí)行次數(shù)固定,是物理效果;在每次物理更新之前,以固定的時(shí)間間隔;會(huì)被Unity引擎自動(dòng)調(diào)用
*物理功能
·物理引擎報(bào)告物理事件,如碰撞,調(diào)用該對(duì)象腳本上的事件函數(shù)
- OnCollisionEnter()? ? #兩個(gè)物體開(kāi)始碰撞的時(shí)候發(fā)生什么
- OnCollisionStay()? ? ?#接觸在一起的時(shí)候
- OnCollisionExit()? ? ? #碰撞分離的時(shí)候
*創(chuàng)建和銷毀對(duì)象
可以在場(chǎng)景中創(chuàng)建恒定數(shù)量的對(duì)象,如player、treasure等
游戲過(guò)程中會(huì)創(chuàng)建和刪除一些其他對(duì)象
使用“Instantiate(實(shí)例化)”創(chuàng)建現(xiàn)有對(duì)象的新副本prefab及其所有部件
使用“Destroy(銷毀)”在幀更新或拍攝時(shí)間延遲后
A:為什么函數(shù)里要寫(xiě)Time.deltatime:即按1秒執(zhí)行60*speed*▲t(≈1/fps)
Q:作用是與FPS消除,使得所有用戶的電腦都是1秒執(zhí)行同樣內(nèi)容,速度差不多。
-
6.腳本的事件順序
腳本的事件按照特定順序執(zhí)行,這個(gè)順序?qū)τ谟螒蜷_(kāi)發(fā)至關(guān)重要。了解這個(gè)事件順序可以幫助你更好地掌握腳本的使用。
以下是一個(gè)簡(jiǎn)要的腳本事件順序流程圖:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-776432.html
通過(guò)理解腳本事件的執(zhí)行順序,你可以更好地掌握Unity游戲開(kāi)發(fā)中的腳本編程,為你的游戲增添更多的交互與創(chuàng)意。無(wú)論你是初學(xué)者還是有經(jīng)驗(yàn)的開(kāi)發(fā)者,腳本都是連接你與游戲世界的紐帶,幫助你創(chuàng)造出令人驚嘆的虛擬體驗(yàn)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-776432.html
到了這里,關(guān)于【筆記】Unity編程(C#語(yǔ)言詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!