Unity ❉ 基礎知識 ☀️| 學會這些Unity常用元件,我離開發⭐️3A遊戲大作⭐️又近了一步!(^_−)☆

2021-05-21 17:00:02

📢前言

之前發了兩篇部落格是簡單介紹了下Unity的實用知識點簡單使用佈局


💓💗❤️ Unity ❉ 基礎知識 ☀️| 學會這些Unity實用知識點,我也可以做小遊戲啦!(^_−)☆
💝💘💖 Unity ❉ 基礎知識 ☀️| 輕鬆學會 Unity介面佈局和簡單範例——入門級!(^_−)☆


那本篇部落格來簡單介紹一下Unity中一些元件的介紹 🎅


🌎簡介

元件是在遊戲物件(Game Object)中的實現某些功能的集合
無論是模型、 GUI、燈光還是攝像機,所有遊戲物件本質上都是一個空物件掛載了不同類別的元件,從而讓該遊戲物件擁有不同的功能。

簡單說一下Unity開發的框架:專案—>場景—>遊戲物件—>元件—>屬性

一個遊戲由多個場景(Scene)組成
一個場景由多個遊戲物體(GameObject)組成
一個遊戲物體由多個元件(Component)組成

對於一個空遊戲物件來說,如果為其新增一個攝像機元件,那麼該物件就是一架 攝像機;
如果為其新增了網格過濾(Mesh Filter)元件,那麼該物件就是一個模 型;如果為其新增了燈光元件,該物件就是一盞燈光。
腳 本 \color{FF66FF}{指令碼} 在Unity中也是一種元件


🌏Unity工程結構

在介紹Unity的各種元件之前,先來簡單介紹下Unity的工程結構
在這裡插入圖片描述
在這裡插入圖片描述
一般來說,一個Unity工程正常都會有這四個資料夾

Assets :是用來儲存⼯程所需的所有資源⽂件 (必備)
Library :是⼯程所需要的所有資源庫(類庫)是Unity⾃動給我們⽣成的,如果一個Unity工程開發時間長了,這個資料夾可能會很大,一般來說直接刪除了,工程也可以正常開發使用
ProjectSetting :是我們當前Unity工程的一些⼯程設定⽂件,就是下圖上面這些設定相關就儲存在這個資料夾,刪除的話就要重新設定了
Temp :是臨時⽂件,一般來說也沒啥用,可看情況選擇去留
在這裡插入圖片描述


🌍幾種常用元件介紹

😸Transform元件

Transform 是物體模型最基本的元件,基本上所有物體都有
在這裡插入圖片描述

來看看官方的介紹
The Transform component determines the Position, Rotation,and Scale of each object in the scene. Every GameObject has a
Transform.
The position, rotation and scale values of a Transform are measured relative to the Transform’s parent. If the Transform has no parent, the properties are measured in world space

譯文
變換元件決定場景中每個物件的位置、旋轉和比例。每個遊戲物件都有一個轉換
變換的位置、旋轉和縮放值是相對於父變換計算的。如果transform沒有父物體,屬性將會根據在世界空間中計算

總結一句話就是——Transform是用於控制遊戲物件的位置、旋轉和大小比例的
下圖分別是Transform的Inspector面板屬性圖和各種屬性
在這裡插入圖片描述
在這裡插入圖片描述


😹Mesh Filter(網格過濾器)和Mesh Renderer(網格渲染器)

Mesh:是指模型的網格,建模就是建網格。細看Mesh,可以知道Mesh的主要屬性內容包括頂點座標,法線,紋理座標,三角形繪製序列等其他有用屬性和功能。因此建網格,就是畫三角形;畫三角形就是定位三個點。

Mesh Filter(網格過濾器):內包含一個Mesh元件,可以根據MeshFilter獲得模型網格的元件,也可以為MeshFilter設定Mesh內容。

Mesh Render(網格渲染器):是用於把網格渲染出來的元件。MeshFilter的作用就是把Mesh扔給MeshRender將模型或者說是幾何體繪製顯示出來。

每個GameObject都可以有一個MeshFilter元件,也可以沒有。如果有該元件,那麼一定有Mesh屬性,而且有MeshFilter的話,就必須要Mesh Renderer才能將此網格渲染出來,不然是看不見該網格的。

大概就是這麼個邏輯:MeshFilter->Mesh->Mesh Renderer
在這裡插入圖片描述


😺Collider (物體碰撞器)

碰撞器是Unity引擎為模擬物理效果的元件

功能:可以讓兩個帶有碰撞器的遊戲物件相互接觸的時候不會穿透過去,而是會發生一個碰撞效果
一般來說建立一個物體時系統會自動匹配相應的Collider(碰撞器)
在這裡插入圖片描述

建立的時候先選中游戲物件,然後在Inspector面板上點選Add Component ,然後新增想要的碰撞器就行
選中游戲物件->Inspector面板->Add Component->(想要的元件)
(新增大部分元件都是這個流程)
在這裡插入圖片描述
碰撞器有以下幾種,下面就簡單介紹一下,這幾種碰撞器元件屬性其實都差不多,就是調整大小的時候面板屬性會有所差別
1.盒碰撞器(Box Collider)
2.橢圓碰撞器(Sphere Collider)
3.膠囊碰撞器(Capsule Collider)
4.網格碰撞器(Mesh Collider)
5.車輪碰撞器(Wheel Collider)
6.地形碰撞器(Terrain Collider)
在這裡插入圖片描述
碰撞器屬性介紹

屬性功能
Edit Colloder手動編輯Collider
Is Trigger是否為觸發器
Material材質
Center碰撞器的中心點,相對於物體的自身座標
Size碰撞器的大小
Radius碰撞器的半徑大小
Radius碰撞器的半徑大小
Height圓柱體高度
Direction方向
Mesh選擇網格

😻剛體(RigidBody)

上面介紹了碰撞體,這下來介紹剛體
其實他倆都是為了模擬物理引擎效果而存在的,一般來說也會配合使用

在Unity理引擎中,使用 剛體(RigidBody) 來模擬這種物理效果.
當一個遊戲物件被賦予剛體元件之後,遊戲引擎就會對其進行物理效果的計算和模擬。同時我們也可以給這個物件施加各種作用力,讓它運動起來。
另外如果要實現重力的效果,那麼相應的遊戲物體都必須附上剛體元件。
在這裡插入圖片描述
元件新增方法還是老樣子,選中游戲物件->Inspector面板->Add Component->RigidBody
RigidBody
面板屬性
在這裡插入圖片描述
屬性介紹
在這裡插入圖片描述

屬性作用
Mass品質
品質越大,慣性越大。建議場景中的物體品質最好不要相差100倍率以上。防止兩個品質相差太大的物體碰撞後會產生過大的速度,從而影響遊戲效能及呈現的效果。
Drag阻力(摩擦力)
這裡指的是空氣阻力,屬性數值影響阻礙此物體物件的直線運動的速度效果。當遊戲物體受到某個作用力的時候,這個值越大越難移動。如果設定成無限的話,物體會立即停止移動
Angular Drag角阻力(旋轉摩擦力)
同樣指的是空氣阻力,只不過是用來阻礙物體旋轉的。如果設定成無限的話,物體會立即停止旋轉
Use Gravity使用重力效果
不勾選,則不會受到重力影響。
Is Kinematic是否符合運動學的(是否受到物理引擎的驅動)
勾選後,變成不再受物理引擎的影響,改為受Transform的影響。即不再有重力,不再被碰撞等,只會呆在Transform規定的位置上不動,物體撞擊時候像一堵牆一樣不會倒,位置不會因碰撞而發生改變
Interpolate差值型別
如果看到剛體移動的時候運動的不是很平滑,可以選擇一種平滑方式。即:平滑物體運動的曲線
None(無差值):不使用差值平滑
Interpolate(差值):根據上一幀來平滑移動
Extrapolate(推算):根據推算下一幀物體的位置來平滑移動
Collision Detection碰撞偵測。用來改變物體碰撞檢測的精度
Discrete(離散):預設的碰撞檢測方式。但若當物體A運動很快的時候,有可能前一幀還在B物體的前面,後一幀就在B物體後面了,這種情況下不會觸發碰撞事件,所以如果需要檢測這種情況,那就必須使用後兩種檢測方式
Continuous(連續):這種方式可以與有靜態網格碰撞器的遊戲物件進行碰撞檢測。 可以避免因物體移動速度過快而穿過另一個物體的情況
Continuous Dynamic(動態連續):這種方式可以與所有設定了2或3方式的遊戲物件進行碰撞檢測
Constraints約束
約束位置或旋轉時的x/y/z座標,使其Freeze(凍結)。比如想控制遊戲物件人物上臺階不會摔倒,或者高速碰到一個牆壁物體時不會胡亂轉動的話,則要凍結x,y和z軸的旋轉
centerOfMass:相對於變換原點的質心
angularVelocity 剛體的角速度向量,修改它可以使剛體進行旋轉

😼指令碼

Unity中的指令碼也算是元件的一種,可以掛在遊戲物體上,同時也是有限制的,並不是所有的指令碼都可以掛到物件上面的
關於指令碼這部分會再寫一篇文章單獨詳細介紹,這裡就簡單提及一下好啦
可以先看下圖簡單瞭解下
在這裡插入圖片描述


😽新增、獲取和銷燬元件的方法

既然簡單提到指令碼了,那就正好先說一下怎樣在指令碼中新增、獲取和銷燬元件的方法吧
新增元件

GameObject Cube= GameObject.CreatePrimitive(PrimitiveType.Cube);//建立一個方格
Cube.AddComponent<BoxCollider>();//新增盒形碰撞器元件
Cube.AddComponent<Rigidbody>();//新增剛體元件
Cube.AddComponent<Test>();//新增Test指令碼

獲取元件

BoxCollider boxCollider = Cube.GetComponent<BoxCollider>();//獲取盒形碰撞器元件
Rigidbody rigidbody = Cube.GetComponent<Rigidbody>();//獲取剛體元件
Test test= Cube.GetComponent<Test>();//獲取某個Test指令碼

GetComponent
GetComponents

GetComponentInChildren
GetComponentsInChildren

GetComponentInParent
GetComponentsInParent

銷燬元件

//()中的引數為建立相應元件時的元件名稱
Destroy(boxCollider );//銷燬盒形碰撞器元件
Destroy(rigidbody);//銷燬剛體元件


💬總結

本篇部落格對於Unity中幾種最常見和最常用的元件做了一個介紹
當然在Unity中的元件數不勝數,都是對應相應的功能需求來做的,在這裡就不對贅述了,以後用得到再單獨介紹也不遲

如果覺得有用可以給個三連支援一下呀~奧力給!
在這裡插入圖片描述