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