1. 程式人生 > >unity 編輯器和外掛製作(五)

unity 編輯器和外掛製作(五)

接著前面的繼續前行,默默的fighting。

前面講了,怎麼使用攝像機發射線到物體,來觸發事件。今天我們 來講述下怎麼去實現一個label.

這個就相對比較簡單了,其實我們可以直接使用unity自帶得textmesh來實現一個字型,但大多數時候,需要改一些設定,字型大小,材質等等 一些得問題所以我們,最好還是自己寫一個指令碼來實現一些簡單的操作,方便簡潔嘛。其實很簡單 ,下面我們就開始來實現這些方法。

程式碼

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(MeshRenderer))]
[ExecuteInEditMode]
public class VKLabel : MonoBehaviour {

	public Font labelFont ;

	TextMesh labelMesh;
	Material labelMat;
	// Use this for initialization
	void Start () {
		//labelFont = new Font ("Arial");

		labelMesh = GetComponent<TextMesh>();
		if(labelMesh == null){
			labelMesh = gameObject.AddComponent<TextMesh>();
		}
		labelFont = labelMesh.font;
		if(labelMesh.text.Length==0){
			labelMesh.text ="VKLabel";
		}
		labelMat = new Material(Shader.Find("VK/VkLabelShader"));
		labelMat.mainTexture = labelMesh.font.material.mainTexture;
		GetComponent<MeshRenderer>().material = labelMat;
		updateTextMesh();
	}
		
	public void updateTextMesh(){
		if(labelMesh!=null){
			labelMesh.font = labelFont;
		}
		if(labelMat!=null && labelFont!=null){
			if(labelFont.material!=null){
				labelMat.mainTexture = labelFont.material.mainTexture;
			}
			labelMat.color = labelMesh.color;
			GetComponent<MeshRenderer>().material = labelMat;
		}
	}
}

VkLabelShader是自己寫得一個shader,你也可以用unity自己帶得 GUI得字型shader。為了好控制一些,決定還是用自己得shader了。
Shader "VK/VkLabelShader" {
Properties { 
   _MainTex ("Font Texture", 2D) = "white" {} 
   _Color ("Text Color", Color) = (1,1,1,1) 
} 

SubShader { 
   Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } 
   Lighting Off Cull Off ZWrite Off Fog { Mode Off } 
   Blend SrcAlpha OneMinusSrcAlpha 
   Pass { 
      Color [_Color] 
      SetTexture [_MainTex] { 
         combine primary, texture * primary 
      } 
   } 
} 
}

下面我們要做得就是 在寫一個簡單得label得編輯器類。使label得監視面板更好看點。

這裡就不寫了 因為我的這個 是沒有加任何得東西進行修飾得。

注意下 這裡 不要使用 [RequireComponent(typeof(TextMesh))] 新增元件不然,你的TextMesh是沒有任何字型得。

要使用unity自帶得方法來進行新增元件,這樣它會自動幫你,加上unity內建得字型。