unity 編輯器和外掛製作(五)
阿新 • • 發佈:2019-01-05
接著前面的繼續前行,默默的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內建得字型。