【Unity 3D】學習筆記三十四:遊戲元素——常用編輯器元件
常用編輯器元件
unity的特色之一就是編輯器視覺化,很多常用的功能都可以在編輯器中完成。常用的編輯器可分為兩種:原有元件和拓展元件。原有元件是編輯器原生的一些功能,拓展元件是編輯器智商通過指令碼拓展的新功能。
攝像機
攝像機是unity最為核心元件之一,遊戲介面中顯示的一切內容都得需要攝像機來照射才能顯示。攝像機元件的引數如下:
clear flags:背景顯示內容,預設的是skybox。前提是必須在render settings 中設定天空盒子材質。
background:背景顯示顏色,如果沒有盒子,即顯示這個顏色。
culling mask:用於選擇是否顯示某些層,預設的是everything。
projection:攝像機的型別。
field of view:攝像機的視野範圍。
near:一攝像機為圓心,繪製最近點的距離。
far:一攝像機為圓心,繪製最遠點的距離。
normalized view port rect:設定Game檢視的顯示區域引數,多臺攝像機可以通過設定各自顯示區域先分屏同時顯示。
depth:攝像機的深度。若存在多個攝像機,先渲染該值較小的攝像機。
rendering path:渲染路徑。
target texture:目標紋理,設定後會擋住攝像機。
攝像機的型別
主要分為兩類:放射觀察角度,垂直觀察角度。那怎麼選擇攝像機的型別咧?在hierarchy檢視中選擇攝像機物件,然後在右側inspector檢視中單擊projection下拉選單。可以看見兩個選項:perspective(放射角度)和orthographic(垂直角度)。
perspective(放射角度):
orthographic(垂直角度):
但在遊戲中有時需要動態修改攝像機的型別。那怎麼實現咧,這就需要通過程式碼來實現了。
using UnityEngine; using System.Collections; public class Script_05_02 : MonoBehaviour { //攝像機元件 private Camera camera; void Start () { //獲取攝像機元件 camera = gameObject.GetComponent<Camera>(); } void OnGUI() { if(GUILayout.Button("放射觀察",GUILayout.Height(50))) { camera.isOrthoGraphic = true; } if(GUILayout.Button("垂直觀察",GUILayout.Height(50))) { camera.isOrthoGraphic = false; } } }
上述程式碼中使用isorthographic引用來修改當前攝像機的型別,將該變數值賦值為true,表示攝像機型別為垂直觀察,false表示為放射觀察。
定製導航選單欄
unity為開發者提供了導航欄選單的程式介面,使用程式碼可以動態新增選單欄的選項及子選項。本例為選單欄新增一個“新選單欄”程式碼如下:
using UnityEditor;
using UnityEngine;
class Script_05_03 : MonoBehaviour {
[MenuItem ("新選單欄/克隆選擇的物件")]
static void ClothObject() {
Instantiate(Selection.activeTransform, Vector3.zero, Quaternion.identity);
}
[MenuItem ("新選單欄/克隆選擇的物件", true)]
static bool NoClothObject() {
return Selection.activeGameObject != null;
}
[MenuItem ("新選單欄/刪除選擇的物件")]
static void RemoveObject() {
DestroyImmediate (Selection.activeGameObject,true);
}
[MenuItem ("新選單欄/刪除選擇的物件", true)]
static bool NoRemoveObject() {
return Selection.activeGameObject != null;
}
}
我們使用方法[MenuItem ("新選單欄/刪除選擇的物件")]在導航選單欄中新增一個選單項,該方法的引數為選單中子選項的完整路徑。
在選單導航欄裡不僅可以繫結方法,還可以繫結指令碼:
using UnityEditor;
using UnityEngine;
//新增該指令碼至元件選單欄中
[AddComponentMenu("新的指令碼/自動旋轉")]
class Script_05_04 : MonoBehaviour {
void Update()
{
//自身旋轉
transform.Rotate(0.0f,Time.deltaTime * 200,0.0f);
}
}
執行後:
抗鋸齒
在3D渲染中,可能會出現鋸齒,為什麼會出現鋸齒,因為為了執行效率而犧牲了渲染效果。在unity中可以設定抗鋸齒效果,選擇edit——project setttings——quality,此時右側將彈出如下視窗:
name:渲染質量等級名稱。
pixel light count:渲染畫素燈的最大數量。
texture quality選擇貼圖的質量,質量越好越需要高效能。
anisotropic textures:貼圖顯示級別。
anti aliasing:設定抗鋸齒的等級,其值越大表示效果越好。
soft particles:是否開啟混合粒子效果。
shadows:設定陰影的型別。
shadow resolution:陰影的效果級別。
shadow projection:現在陰影效果的解析度。
shadowcascades:設定陰影的層次等級。
shadow distance:語言的投射距離。
blend weights:節點的重量。
vsync count:設定同步渲染數量。
lod bias:lod的偏移量。
maximum lodlevel:最大LOD等級。
levels表示設定4個不同遊戲平臺的渲染效果,預設情況,渲染效果分為6個級別:fastest,fast,simple.good.beautiful,fantastic。依次往上表示渲染效果越來越好,但速度慢。
抗鋸齒設定anti aliasing級別為8x multi sampling對比如下圖會發現效果很明顯:
原圖:
抗鋸齒: