unity 编辑器和插件制作(五)

时间:2022-05-24 06:12:55

接着前面的继续前行,默默的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内置得字体。