常用元件及系統資源
- 熟練掌握遊戲物件的建立(3D/2D)
- 掌握四種燈光的特性及使用場景
-
掌握三種貼圖的用途
- Texture
- RenderTexture
- MovieTexture
- 攝像機Camera
- 天空盒製作及新增
- 遊戲物件建立
- 燈光
- 貼圖
- Texture
- RenderTexture
- MovieTexture
- 天空盒
引言
如何建立一個就基本遊戲物體,這些遊戲物體都是一些白色的標準形狀體,也稱作白膜,那麼這些“白膜”的性質實際上是和我們遊戲中的玩家模型是同一個性質的,只不過外表不同而已,那麼有了這些模型之後一定是需要對這些遊戲物體進行一些控制的,那麼如何控制這些遊戲物體就離不開Unity引擎中提供的元件,指令碼可以用來控制邏輯,碰撞器可以檢測碰撞 等等…這些元件都有它們各自的功能,當新增到遊戲物體上的時候就可以作為這個物體的一個功能,Unity中給我們提供了很多便捷的功能,熟練使用這些功能配合快捷鍵,能夠極大的提高我們的開發效率,本講主要是對一些系統資源和基本元件進行學習.
遊戲物體(Game Object)指的是出現在Hierarchy面板或者在Scenes場景中所有的遊戲資源。包括空物體(Empty Object)、標準幾何體、模型、攝像機、粒子、燈光、地形、樹木等等。萬物皆物件。
在3D選項中,可以建立一些基本物體,一些標準的幾何體,一些平面,還有可以使用Terrain 來建立一個地形,來手動繪製遊戲地形
燈光元件
燈光用來照亮場景和物件,可以創造完美的視覺氣氛。燈光可以用來模擬太陽、燃燒的火柴、探照燈、手電筒、槍火光、爆炸等等。
燈光建立
我們通過在Hierarchy面板->Create->Light來建立4種不同的燈光效果。
燈光的型別
- Type:光源的型別
- Color:光源的顏色
- Mode: 光照效果型別,RealTime 實時光照。動態光源,baked,烘焙 ,Mixed 混合
- Intensity:[ɪn’tensɪtɪ] 光照濃度。
- Cookie:設定貼圖Alpha通道。(在此屬性中放置一張透明貼圖作為蒙版,從而通過燈光照射打到地面上形成一個預期形狀的光影效果)。
- Cookie Size:設定貼圖Alpha通道尺寸大小。
- Shadow Type:陰影型別。(Soft Shadows引數最耗費資源)。
- Draw Halo:繪製光暈(在點光源中使用霧濛濛的效果)。如果勾選該選項,一個球形的光暈將被繪製。光暈的半徑等於範圍(Range)。
- Flare:設定光源的閃光效果。用於在光照位置上渲染的閃光。
-
Render Mode:光源的渲染模式(渲染優先順序)。選擇光源是作為頂點光(vertex),畫素光(pixel),還是自動的渲染方式。
注:要說明的是,燈光有對渲染速度有非常大的影響,因此必須權衡前後照明質量和遊戲速度。由於畫素光照比頂點光照奢侈得多(更耗費資源),Unity將只在最亮的光逐個畫素渲染。 -
Culling Mask:通過層設定指定圖層不受到光照影響。
-
Lightmapping:設定光照貼圖模式。
- Realtime Only:
- Auto:自動的
- Baked Only:烘焙後的。靜態光源
注意: 只有平行光預設有影子,其他光源將Shadow Type修改即可。
1.新建場景,刪除自帶的Directional Light物件並儲存,在場景中新增一個Plane,Cube,調整兩個遊戲物體的位置關係如圖:
2.選中將要接受Area Light影響的遊戲物件,在Inspector面板上,選中Lightmaping static 屬性。
3.通過Hierarchy面板,建立Area Light,並調整大小後,放置在Cube物件上方。
4.設定Area Light屬性
5.如果沒有做任何修改的情況下,燈光會自動烘焙,並在Unity編輯器右下角,顯示烘焙進度。
如果沒有自動烘焙,需要通過Window選單,開啟Lighting->Settings,點選底部的 Generate Lighting按鈕。
6.等烘焙完成後,顯示燈光效果。
Texture資源是Unity中用途最廣泛的資源之一。
它可以應用在
* 介面UI
* Mesh模型
* 粒子效果
* 視訊資源
* Movie Texture:視訊資源
* Render Texture:渲染貼圖
- Texture Type:貼圖型別 *
- Alpha from Grayscale:從灰度圖中是否產生Alpha通道
- Wrap Mode:貼圖與貼圖之間的拼接模式 *
- Filter Mode:過濾模式
- AnIso Level:異向性過濾等級
- Texture:普通貼圖
- Normal map:法線貼圖
- Editor GUI and Legacy GUI:UI貼圖
- Sprite(2D and UI):精靈
- Cursor:滑鼠指標
- Reflection:反射貼圖
- Cookie:遮罩貼圖
- Lightmap:烘焙貼圖
- Advanced:高階(可自定義一些貼圖屬性)
建立Plane,並拖拽到Plane上做為貼圖,修改Tiling引數
修改Wrap Mode引數:
Repeat:連續的分開狀態
Clamp:拉伸狀態
Material[mə’tɪərɪəl]材質用來把網格(Mesh)或粒子渲染器(Particle Renderers)貼到遊戲物件上。Material是控制遊戲中物體的外觀的資產,影響著物件被顯示的效果。
這些元件不能在沒有材質的情況下顯示。
而任何材質的屬性取決於選定的著色器(Shader)發生變化。
許多物體可以共用同一個材質球。好處:節省資源的開銷、修改的效率。缺點:容易不知情下修改了多個物體。
Material材質的基本屬性:
- 1、Shader:著色器。將被材質(Material)使用的著色器。
- 2、Main Color:主顏色。預設為白色。
- 3、Base:基本紋理貼圖。(面板)。
Mesh是指模型的網格,MeshFilter一般是用於獲得模型網格的元件,而MeshRender是用於把網格渲染出來的元件。
我們可以理解為:Mesh Filter決定了物體的形狀、模樣;Mesh Render決定了物體的顏色和紋理。
即: Mesh Filter獲取我們的模型; Mesh Render把它在場景中渲染
材質(材質球)是由貼圖與著色器的渲染而形成的。最終應用到場景內物體的身上。
建立一個立方體:Hierarchy面板->Create->Cube;
再建立一個材質:Project面板->Create->Material。
Cast Shadows:是否產生陰影效果
Receive Shadows:是否接收陰影
動態改變材質顏色的程式碼為:
Getcomponent«Renderer»().material.color = Color.Red//把材質編輯為紅色
我們如果想對選擇的材質做更豐富的顯示效果,需要編輯材質中Shader的屬性。根據選擇的著色器型別,在Inspector檢視面板會出現許多不同的屬性。
Unity中提供了一些基本的著色器,我們可以進行一些簡單的瞭解,在實際開發中,如果Unity提供的Shader效果不能滿足要求,那麼還需要自己來寫一些Shader效果
* 1、Bumped Diffuse:[bʌmpt]。凹凸散射(凹凸漫反射)。
凡Bumped凹凸的,都是帶法線貼圖的,使用Normal map來表現物體表面的細節。
* 2、Bumped Specular:凹凸高光(法線凹凸貼圖 + 高光)。
* 3、Decal:[’diːkæl]。貼花紙。(製作兩個貼圖疊加效果)。
貼花著色器,需要主紋理、貼花紋理(帶alpha)。
* 4、Diffuse:[dɪ’fjuːz]。漫反射。(瀰漫的散開的)。預設的Shader。
* 5、Diffuse Detail:[’diːteɪl]。漫反射 + 細節(漫反射細節著色器)。比如地形,當鏡頭更接近時,使其擁有更清晰、更細節的效果。
* 6、Parallax Diffuse:[’pærəlæks]。視差(高度圖) + 漫反射。(實現很強的明暗關係(立體感),如鵝卵石效果)。
* 7、Parallax Specular:視差(高度圖) + 高光。即:視差高光。像鏡面般會反射。
* 8、Specular:[’spekjʊlə]。 高光。(鏡子的;會反射的;帶金屬質感)。且隨著鏡頭動態的顯示其高光效果的。
* 9、VertexLit:[’vɜːteks]。定點光,頂點照亮。
- 1、Mobile:移動的
- 2、Nature:自然的
-
3、Particles:粒子系統的
Particles/Additive:[’ædɪtɪv]附加的。(一般會把背景剔除)。
Particles/Alpha Blended:Alpha混合。(雙面透視效果,比如紅旗正反可以觀看)。 -
4、Reflective:反射的。反射周圍影象效果。一張主帖圖,一個Cubemap用於反射。
主紋理的alpha通道定義在物體表面的反射強度。
任何場景燈光將會增加反射表面的照明。 -
5、RenderFX:著色
RenderFx/SkyBox:天空盒著色器。 -
6、Self-Illumin:自發光的。主要用於發光物體。
一張主帖圖,一張自發光紋理。
發光基於發光紋理的alpha值,alpha為0的不發光,1表示充分發光。不需要任何燈光照射來發光。
任何頂點燈光或畫素燈光將簡單增加更多光照到自發光上。 - 7、Toon:卡通的
-
8、Transparent:[træn’spær(ə)nt]。透明的。透明著色器用於實現全透明或者半透明效果。
選中該選項後,調整Main Color中的R/G/B/A色值中的A選項,從而達到調整透明度的效果。
Transparent/Cutout/..透明鏤空著色器。 -
9、Unlit:[ʌn’lɪt]。不發光的,不受燈光影響的。比如: 場景中需要一張背景貼圖,而又需要使其不受環境燈光顏色和亮度的影響時使用.
Mobile->Unlit(Supports Lightmap) : 支援一個Lightmap貼圖的,即“自身光照的”.可以理解為一種自發光的方式
不受環境和燈光的影響 - 10、Legacy Shaders:[’legəsɪ]。遺留著色器。。(老版本著色器)
分類:
* 標準著色器:Normal
* 透明著色器:Transparent
* 鏤空著色器:Transparent/Cutout
* 自發光著色器:Self-Illumin
* 反射著色器:Reflective
【案例】手動建立法線
Bumped需要增加Normal法線貼圖來實現凹凸效果,在Project面板中選中圖片素材:
* ->Ctrl+D(複製)一個圖片
* ->在Inspector面板中調節Texture Type(圖片型別)屬性為Normal map(法線圖)
* ->Apply(應用屬性修改)。要注意的是勾選Alpha from Grayscale(阿爾法從灰度)選項會讓凹凸感更強烈。
* ->回到Material材質球上,選中要修改的材質球,在Inspector面板上修改Shader屬性,調節為:Bumped Diffuse,並把法線貼圖拖放進來。
這裡只列舉兩個不同的Shader效果,剩下更多的效果可以自己去試驗
渲染貼圖最大的特色是貼圖為動態的,其具體呈現的內容是由專門的一個攝像機捕捉,經常應用於小地圖或者實時同步監控錄影。
1、建立一個Quad。
2、建立渲染貼圖(RenderTexture)。
3、建立Camera(攝像機)。
4、把Render Texture渲染貼圖拖放到新建立的攝像機中的Target Texture屬性中。這樣攝像機看到的內容都會實時反映到渲染貼圖中。
5、建立New Material材質,在材質上載入渲染貼圖。Shader調節為自發光材質,新增到RenderTexture中。
6、把帶著Render Texture資訊的材質球賦予給Quad面片。
實現原理:
將Render Texture拖放指定至攝像機的Target Texture屬性後,此時攝像機所照射渲染出的屬性將不會打到螢幕上,而是直接打到這張Render Texture貼圖上。
(即:利用Render Texture來捕捉攝像機所捕捉到的內容,並渲染成動態的貼圖,從而實現一些特殊的效果)
在Unity中,可以將視訊檔案作為一種動態的貼圖紋理貼附在指定物體表面上,從而實現在場景中播放視訊的效果。
1、因為Unity播放視訊資源時需要使用QuickTime播放器,所有需要在本地電腦安裝Unity認識的QuickTime軟體,並將其設定為預設播放。
2、匯入Unity系統認識的視訊資源(如.mov格式或者mp4格式)。
4、在Scene場景中建立Quad(面片),作為播放熒幕。
5、製作指令碼如下圖:
6、將指令碼拖放到Quad上。並指定視訊檔案屬性。
7、將視訊貼圖中的音訊檔案拖放到Quad上。
如資源匯入到Project中依然無法識別,需要重啟電腦.這是因為當前Unity的配置資訊沒有找到剛安裝的QuickTime.
如果畫面不夠亮,可以使用材質球中的Shader效果來更改渲染方式
【案例】載入網路視訊,並將視訊內容顯示在Cube物件。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovieTextureDemo : MonoBehaviour
{
//視訊檔案地址
public string url = "http://www.unity3d.com/webplayers/Movie/sample.ogg";
// Use this for initialization
IEnumerator Start()
{
//以下程式碼是從網路上載入視訊檔案,最後載入完成後得到MovieTexture物件
WWW www = new WWW(url);
MovieTexture movieTexture = www.GetMovieTexture();
while (!movieTexture.isReadyToPlay)
{
yield return null;
}
//將movieTexture內容賦值給Cube物件作為材質的貼圖
GetComponent<MeshRenderer>().material.mainTexture = movieTexture;
//播放視訊
movieTexture.Play();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
攝像機,Unity的核心元件之一。顯示場景中,攝像機所照射的部分,是向玩家捕獲和顯示世界的裝置。
攝像機的特性:
* 1、可以自定義和操縱攝像機;
* 2、可以在場景中不受限制其數量;
* 3、可以設定成任意的渲染次序;
* 4、可以渲染到螢幕上的任意位置。
攝像機實質上是用於將遊戲顯示給玩家看的,它們可以被定製,在上面寫指令碼或者掛載到其他物體上面以獲得想象中的各種效果。對於較小的固定場景,可以對遊戲的全部檢視保持攝像機靜止即可;對於第一人稱射擊遊戲,可以將攝像機掛載到玩家角色上面;對於一個賽車遊戲,也可以讓攝像機跟隨賽車。
還可以建立多個攝像機,然後為每一個賦予不同的深度值。攝像機是從低深度值到高深度值的次序進行繪製,一個深度值為2的攝像機將會在深度值為1的攝像機繪製之後再繪製。同時可以調整Viewport Rect屬性來調整攝像機檢視在螢幕上的位置和大小,使用這個可以建立多個迷你檢視。
- 1、Clear Flags:清除標記。顯示背景內容,預設為天空盒子。
- 2、Background:背景顏色。
- 3、Culling Mask:剔除遮罩。用於顯示某些層(可以過濾不需要顯示的層)。
-
4、Projection:攝像機投射方式(透視->廣角/正交->平行)。
Perspective(透視):以3D方式觀察物體
Orthographic(正交):以2D方式觀察物體 - 5、Field of View:視野範圍。可以用這個選項來做狙擊鏡的效果.
- 6、Clipping Planes 裁剪面。相機到開始和結束渲染的距離。
- 7、Viewport Rect:矩形視窗(可控制視窗的偏移量與長度和寬度,即:分屏顯示功能)。
- 8、Depth:攝像機深度(若存在若干攝像機,則先渲染數值小的攝像機畫面)。
- 9、Rendering Parth:渲染路徑。
- 10、Target Texture:目標貼圖紋理。
- 原理:就是將此攝像機攝像的畫面影響實時打在一張指定的目標紋理貼圖上,此時,這張貼圖存有這個攝像機所攝的”實況轉播資訊“了,則此貼圖可以隨便放在某個Plane地板或者UI介面中。
- 11、Occlusion Culling:是否使用遮罩剔除。
- 12、HDR:啟用攝像機的高動態範圍渲染(High Dynamic Range Rendering)。
一個遊戲場景中使用了多個攝像機。需要用到攝像機的Depth屬性來控制疊加顯示效果。Depth屬性反應了相機在渲染順序上的位置。
主攝像機預設的Depth為-1,之後不管建立幾個新的攝像機,預設的Depth都為0的。通過修改Depth屬性,數值越大,越在最後渲染顯示。即:數值大的層會遮擋住數值小的層。
在遊戲中我們經常可以看到漂亮的天空,炫酷的開場動畫,以及打擊感十足的背景音樂,接下來就來告訴大家這些效果在Unity引擎中都是如何來實現的.以及Prefab的作用
Unity整合開發環境自帶了強大的天空盒資源。SkyBox天空盒實際上使用了特殊的Shader材質,可以籠罩在整個遊戲場景之外,並根據材質中制定的紋理模擬出類似遠景、天空等效果,使遊戲場景看起來更完整。
在Unity中,天空盒的使用方法有兩種:
1、在Unity中Lighting(渲染設定)裡進行指定,這種方法是針對遊戲場景的,簡單地講,就是在同一個遊戲場景中,無論使用哪個攝像機物件,天空盒都保持不變,並且該方式指定天空盒可以在Scene檢視中直接顯示。
2、為攝像機物件新增天空盒元件,然後在天空盒元件中進行指定,這種方法只針對攝像機本身,簡單地講,就是在同一個遊戲場景中,如果切換攝像機,天空盒會隨之變換,為攝像機指定的天空盒優先順序會高於在渲染設定中指定的天空盒。
1.通過Lighting(渲染設定)指定天空盒
1、匯入Unity系統的天空盒資源:
講天空盒資源匯入到工程中
匯入資源後,會在Project面板上匯入的資源裡看到9個代表不同天空效果的材質球。
注:用於渲染天空盒的材質,包括6個紋理。這種材質應該用天空盒著色器(Skybox Shader),而每個紋理應該配置適當的全球的方向。
2、開啟Lighting面板:
選單欄->Window->Lighting
3、將天空盒的材質球拖拽到Skybox中即可看到效果
2.為攝像機物件新增天空盒元件
1.對攝像機新增一個元件:Skybox
2、把之前匯入的天空資源的材質球拖放到Skybox元件中就可以完成天空盒子的製作部署。
注意在Lighting中新增天空盒與對攝像機新增天空盒的區別
【案例】自定義天空盒
除了skybox資源包中提供的天空盒外,Unity還支援使用者自制天空盒。這需要提前準備好6張圖片紋理,分別用於貼在天空盒材質的前、後、左、右、上、下等6個面上。圖片需要將其處理成無縫連線的操作。
1、Project面板->滑鼠右鍵->Create->Material,建立一個材質。
在Inspector面板中屬性裡點選Shader下拉列表裡選擇Skybox->6 Sided
2、單擊Front(+Z)項右側紋理預覽窗中的Select按鈕,在彈出的Select Texture對話方塊中選擇相應的紋理。
(其他圖片紋理同理)。
3、選擇選單欄中的Window->Lighting選項,在Inspector檢視中會顯示出Render Settings的引數面板,將製作好的材質球拖放到Skybox中,即指定遊戲場景中剛才建立的天空盒材質。
4、仔細觀察天空盒的效果,可以發現在天空盒的轉折處有明顯的接縫,這是由於紋理的Warp Mode(迴圈模式)設定方式造成的。
5、選中6張紋理圖片,將該紋理在Inspector面板中的Warp Mode設定為Clamp(固定)就可以了,操作完成以後,可以發現,天空盒轉折處的接縫完全消失。
霧效
http://jingyan.baidu.com/article/4d58d5411e49de9dd4e9c037.html
功能元件(Component[kəm’pəʊnənt]),是掛載到遊戲物體上的功能元件。遊戲物件通過新增不同的Component元件,從而使不同的遊戲物件具備了不同的功能。所以我們可以說遊戲物件(Game Object)是由一系列不同功能元件的集合。
比如我們給遊戲物體添加了剛體元件,可以使其具有物理系統功能。而給遊戲角色新增動畫元件,也可以使其具有了動畫的能力。甚至指令碼也是一種元件。
Unity為我們提供了豐富的元件,如剛體元件,粒子系統,攝像機元件,GUILayer元件等。要注意的是,每一個遊戲物件都至少有一個或多個元件。比如最簡單的空物體物件(Empty Object),擁有一個Transform元件。而Transfrom元件包含了一個遊戲物體的Position(位置),Rotation(旋轉),Scale(縮放)三組資訊。
- 1、Reset:復位。恢復該元件的預設數值。如果是Transform元件,則會回到座標系0,0,0原點。
- 2、Move to Front:對多個子物體,將其移動到這些子物體的最上方。
- 3、Move to Back:對多個子物體,將其移動到這些子物體的最下方。
- 4、Remove Component:移除元件。銷燬對應的元件,即把該元件從當前物體中去除。
- 5、Move Up:上移元件的排列順序。
- 6、Move Down:下移元件的排列順序。
- 7、Copy Component:拷貝元件。此選項可以把元件中所有的屬性資訊值賦值到記憶體中。
- 8、Paste Component As New:貼上元件。當選擇Copy Component選項後,可以在一個新的遊戲物體中貼上該元件,並把對應的所有資訊也賦值過來。
- 9、Paste Component Values:僅僅複製拷貝過來的其它元件的數值資訊。
預設在Unity中是一種非常重要的資源型別,是一種可被重複使用的遊戲物件。它有如下幾個特點:
特點1:它可以被置入多個場景中,也可以在一個場景中多次置入。
特點2:當你在一個場景中增加一個Prefabs,即例項化了一個Prefabs。
特點3:所有Prefabs例項都是Prefab的克隆,所以如果在執行中生成物件會有(Clone)的標記。
特點4:只要Prefabs原型發生改變,所有的Prefabs例項都會產生變化。
我們需要在實踐中多體會其功能和作用。
建立步驟:
1、 手動建立方式:即從Hierarchy面板中,用滑鼠拖動物件物體,直接拖放到Project面板中。
2、 指令碼動態