亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Unity3D腳印1——游戲對象&組件

發布時間:2020-06-04 15:28:11 來源:網絡 閱讀:564 作者:wyb10a10 欄目:游戲開發

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

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

 

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

 

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

 

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

 

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

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

AI

紫阳县| 宁安市| 涡阳县| 鸡泽县| 禹城市| 札达县| 临泽县| 佛教| 视频| 永和县| 奇台县| 行唐县| 隆尧县| 班玛县| 九龙县| 孟州市| 忻州市| 册亨县| 新泰市| 容城县| 茌平县| 泾阳县| 临朐县| 图们市| 沙雅县| 寻乌县| 兰州市| 桐庐县| 台山市| 顺义区| 曲周县| 溧阳市| 民县| 和田县| 阿克苏市| 当涂县| 钟祥市| 册亨县| 新泰市| 塔河县| 安徽省|