1. 程式人生 > >【Unity 3D】學習筆記三十四:遊戲元素——常用編輯器元件

【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對比如下圖會發現效果很明顯:

原圖:


抗鋸齒: