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