溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Unity3D腳印1——游戲?qū)ο?組件

發(fā)布時間:2020-06-04 15:28:11 來源:網(wǎng)絡(luò) 閱讀:562 作者:wyb10a10 欄目:游戲開發(fā)

 Unity3D介紹操作界面的資料多如牛毛,再記錄這些,于人于己皆無益,在這里希望可以記錄一些有用的東西,供以后有需要時查看

 
要熟悉一個引擎,我覺得有必要把引擎的思想搞清楚,這樣學習起來才更好理解吧
 
通過這幾天的學習,Unity3D中貫穿著幾個重要的概念,GameObject,Component還有Scene,我覺得Unity3D的整個思路,是由這三個概念組合而成的,還有別的嗎?對于美術(shù)人員來說可能有很多,諸如濾鏡,特效,骨骼之類的概念,但對程序人員來說,就這三個概念,或許可以把Scene給干掉,因為我們需要理解最多,用的最多的,也就是GameObject和Component這兩個
 
Scene是一個很空泛的東西,它表示游戲中的一個場景,也是程序的一個入口,好處是可以把一個游戲分為不同的場景然后分別進行開發(fā),場景之間可以互不影響,而在整個設(shè)計思想里面,它就是一個容器,容器里面有什么?只有GameObject,我覺得Unity3D里面的Terrain也是GameObject的一種,在一個活動容器中的GameObject可以被顯示,(這里有一個疑問,有沒有可能讓兩個Scene同時運行呢?例如一個雙人游戲,左邊是我的屏幕,右邊是朋友的屏幕)(雖然它沒有在GameObject的菜單下)。(這里我想到一個疑問,我可以在代碼里面動態(tài)創(chuàng)建一個Scene嗎?雖然可能意義不大,充其量只是一個程序員的好奇心而已)目前我的了解,Unity3D里面可以直接通過Ctrl+N或者File菜單下的按鈕來創(chuàng)建新的場景
 
我覺得GameObject會是我們接觸最多的一個東西了,因為它代表游戲?qū)ο?,例如里面的游戲角色,道具,敵人等等。這里我覺得只記錄一些GameObject和Component就可以了,GameObject是一個Component的容器,一些Component也可以被直接作為GameObject創(chuàng)建出來,這就好像一個空的GameObject,然后掛了一個組件。那么GameObject和GameObject之間是什么關(guān)系呢?它們可以是父子關(guān)系,也可以是朋友(都位于場景中,沒有父子關(guān)系),所以一個GameObject也是GameObject的容器
 
那么如何創(chuàng)建一個GameObject呢?我們可以通過菜單來創(chuàng)建,也可以直接在代碼里面new一個GameObject,GameObject和Component都繼承于Object。GameObject通過AddComponent和GetComponent函數(shù)可以添加,獲取組件(那刪除組件呢?Destroy?
 
AddComponent有兩個重載函數(shù)
 
//通過組件的名稱來添加組件,可以是內(nèi)置的一些組件名稱,也可以是腳本名
1.Component AddComponent(className : String)
 
gameObject.AddComponent("myScript");        //添加腳本組件
SphereColider sc = gameObject.AddComponent("SphereCollider");    //添加球形碰撞體組件

 

//通過組件的類型來添加,這里使用了泛型來實現(xiàn)
2.Component AddComponent<T>()
 
//T表示任意類型,這個是個高級概念,貌似只在這里用到了
gameObject.AddComponent<SphereCollider>(); 
 
獲取組件的函數(shù)有很多
 
Unity3D腳印1——游戲?qū)ο?組件
Component GetComponent()
 
Component GetComponent<T>()
 
Component[] GetComponents()
 
Component[] GetComponents<T>()
 
Component GetComponentInChildren()
 
Component GetComponentInChildren<T>()
 
Component[] GetComponentsInChildren()
 
Component[] GetComponentsInChildren<T>()
Unity3D腳印1——游戲?qū)ο?組件

 

 
//在獲取腳本對象的時候,我們獲取的類型是腳本的名字,也是它的類名,獲取到這個類之后,就可以操作這個對象的公有函數(shù),公有變量,C#在這里是類名,如果你在文件中修改了類的名字,文件名和類名不一致了,那么Unity會報錯
var script = GetComponent("myScript") as myScript;
script.myFunction();
 
myScript script = GetComponent<myScript>();
script.myFunction();

 

 
//每個腳本都是一種類型,Unity3D中提供了大量的基礎(chǔ)組件類型,例如一個GameObject上可以有很多個關(guān)節(jié)Joint,GetComponents方法返回一個數(shù)組給我們,泛型和組件名稱這兩種調(diào)用方法和上面一致
 
Unity3D腳印1——游戲?qū)ο?組件
HingeJoint[] joints = gameObject.GetComponents<HingeJoint>();
// or joints = gameObject.GetComponents("HingeJoint");
 
foreach(HingeJoint joint in joints)
{
    joint.useSpring = false;
}
Unity3D腳印1——游戲?qū)ο?組件

 

 
GetComponentInChildren系列函數(shù)會搜索相比GetComponent系列函數(shù)只是搜索范圍更廣了,GameObject以及其子物體上所有類型為type的組件,它只返回活動的組件(如何獲取一個gameObject上掛載的所有腳本對象?
 
最后來整理一下,Unity3D有哪些組件!
 
Camera 攝像機,繼承于MonoBehavior(繼承于Component)
 
Transform 變換組件,用來改變對象的位置,方向,大小等
 
Light 燈光,繼承于MonoBehavior(繼承于Component)
 
SkyBox 天空盒,繼承于MonoBehavior(繼承于Component)
 
RigidBody 剛體,可以通過物理來模擬一個物體的位置
 
Collider 碰撞器,包含Box,Sphere,Capsule,Mesh等Collider
 
XXXJoint系列,各種關(guān)節(jié)的物理模擬組件
 
XXXCloth系列,布料的物理特性模擬組件
 
GUIXXX系列,非常多的類...就是圖形用戶界面
 
ParticleXXX系列,粒子,粒子動畫,粒子發(fā)射器,粒子渲染器
 
常用的大概也就這些吧,有個大概的印象,后面用到什么就學什么吧(通過拖動,可以把一個GameObject設(shè)置為另外一個GameObject的孩子以及撤銷,在代碼里面怎么做呢?
 
難以理解,設(shè)置GameObject的父子關(guān)系,需要通過Transfrom組件的parent屬性來設(shè)置
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI