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

时间:2022-05-24 06:13:19

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