在Unity编辑器中增加脚本的中文说明

在游戏中,程序,美术,策划甚至音效都是分工合作的。很多时候,对于unity3d中一堆英文,大家都会看得很郁闷。尤其是不同的程序员,命名方式也不尽相同,甚至还是用拼音。因此,在脚本中增加一些中文显示,就能够很好地解决这个问题。

首先,unity中对于字段(Field)已经有了很好的中文显示方法[Header]标签

比如

using UnityEngine;
public class TestScript : MonoBehaviour
{
    [Header("变量A")]
    public float A;
}

   显示如下

但是对于[Header],它本身不支持在非字段上做标签,所以想显示类的说明或者类函数的说明就无能为力了。

既然如此,我们可以创建一个自定义的新标签MonoHeaderAttribute,它继承于Header,并且限制只能在类和函数上。当然,我们也可以不继承Header,完全也可以自己写一个仅继承于Attribute的标签。思路是一样的。这里用的是前者。

using System;
using UnityEngine;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MonoHeaderAttribute : HeaderAttribute
{
    public MonoHeaderAttribute(string header) : base(header)
    {}
}

然后unity中创建一个editor目录,在editor目录下创建显示脚本MonoDescriptionEditor,继承于Editor,并定于CustomEditor标签为MonoBehaviour。注意,CustomEditor的第二个参数必须为true,表示对继承于MonoBehaviour的子类都有效。

在其OnEnable事件中,通过反射获取到MonoHeaderAttribute的信息,然后在OnInspectorGUI显示出来。当然MonoDescriptionEditor完全可以自由定义,这里使用了HelpBox来显示。

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(MonoBehaviour), true)]
public class MonoDescriptionEditor : Editor
{
    private string m_res;

    public void OnEnable()
    {
        m_res = "";
        var type = target.GetType();
        var atts = type.GetCustomAttributes(typeof(MonoHeaderAttribute), true);
        if (atts.Length <= 0)
            return;
        var att = (MonoHeaderAttribute)atts[0];
        m_res = att.header + "\n";
        var methods = type.GetMethods();
        foreach (var method in methods)
        {
            var matts = method.GetCustomAttributes(typeof(MonoHeaderAttribute), true);
            if (matts.Length > 0)
            {
                var matt = (MonoHeaderAttribute)matts[0];
                if (method.DeclaringType != null)
                    m_res += $"\n{method.DeclaringType.Name}.{method.Name}\n{matt.header}\n";
            }
        }
    }

    private static bool s_fold = true;
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        if (string.IsNullOrEmpty(m_res))
            return;
        var color = GUI.color;
        GUI.contentColor = Color.cyan;
        s_fold = EditorGUILayout.Foldout(s_fold, "说明");
        if (s_fold)
            EditorGUILayout.HelpBox(m_res, MessageType.Info);
        GUI.contentColor = color;
    }
}
    
    回到TestScript,加入一些测试代码。在class上和一些函数上,加入了一些MonoHeader。
using UnityEngine;

[MonoHeader("这是一个测试脚本:TestScript")]
public class TestScript : MonoBehaviour
{
    internal void Start()
    {
    }

    [MonoHeader("这是一个测试函数")]
    public void TestA()
    {
    }

    [MonoHeader("第二个函数")]
    public void TestB()
    {
    }

    [Header("变量A")]
    public float A;
}
    
    最终结果显示如下

(PS:试过用MonoHeader替代Header来保证统一性,但是Unity对于字段只认Header,最终没有效果,故MonoHeader用于类和方法的说明,字段的说明用Header)

时间: 2024-10-20 23:21:34

在Unity编辑器中增加脚本的中文说明的相关文章

【Unity优化】如何实现Unity编辑器中的协程

Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种变化过程要经历无数中间步骤,调用N多次Update,如果直接在Update中不断刷新,界面很容易直接卡死.所以在一个协程中进行一些优化,只保留用户最后一次参数修正,省去中间步骤,就会好很多.这属于Unity编辑器的内容,也属于优化的内容,还是放在优化中吧. 解决问题思路 Unity官网的questi

[译]如何在Unity编辑器中添加你自己的工具

在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作出的任何动作,这些全部都是用编辑器脚本来实现的. 这篇教程假设你已经熟悉Unity的基本工作流程.如果你知道如何在编辑器中创建物体.预设.场景并且知道如何移动它们,知道如何添加组件,那么你可以开始本教程的学习了. 最终结果预览 让我们看一下我们做出的最终结果是什么样子: 如你所见,我们会创建一个编辑

Unity编辑器中光照贴图背后的PowerVR光线追踪技术

今年八月,大量的游戏开发者走进Unite 2014,齐聚在西雅图中心参加Unite第八届年度会议.在一系列令人兴奋的会议以及主题演讲中,来自我们PowerVR光线追踪团队的Jens Fursund介绍了即将推出的Unity 5光照贴图编辑器,使用光线追踪技术以快速.准确地模拟光照. 我们非常高兴与Unity的合作,在最近的展示和活动中,我们已经从观看该工具演示的一些开发者中得到很多积极反馈. 让我们来快速浏览一下PowerVR光线追踪技术如何通过新光照贴图编辑器助力开发人员和艺术家加快作品开发.

Unity优化方向——在Unity游戏中优化脚本(译)

原文地址:https://unity3d.com/cn/learn/tutorials/topics/performance-optimization/optimizing-scripts-unity-games?playlist=44069 介绍 当我们的游戏运行时,我们设备的中央处理器(CPU)执行指令.游戏的每一帧都需要执行数百万的CPU指令.为了保持平滑的帧率,CPU必须在规定的时间内执行指令.当CPU不能及时执行所有指令时,我们的游戏可能会变慢.卡顿. 许多事情会导致CPU有太多的工作

Unity 3D 中NGUI插件设置中文label

1.找到电脑windows文件夹下的fonts文件夹,将选中的字体拖入unity工程. 2.选择NGUI>OPEN>FONTS MAKER 3.选择字体(TYpe根据需要选择静态还是动态.用到的字比较少的话一般使用静态字体,而不是动态字体--静态字体一般非常有限,只有极少数的字,动态字体几乎包含所有字) 4.点击create the font 就会保存一个预设体 5.接下去就可以直接应用了 此时字体就变成了想要的字体

unity编辑器拓展七——脚本创建模型

描述: 其实这个教程到处都是,我真正想做的是把模型分成N个等分,实现动态加载.但是在网上搜索了很久,也没有搜索 到合适的方法,要么就是不写清楚,舍不得把代码全部放出来.要么就是自带地形的切割,最想要的是,t4m 刷完后直 接将模型分成N分,所以只能苦逼的从最mesh最基础的开始学吧. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using Sys

Unity编辑器中选择特定Tag的所有物体

using System; using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using Object = UnityEngine.Object; public class FindGosByTag : ScriptableWizard { //public string m_tagName; public string[] m_tags; priva

Unity编辑器开发,使用CustomPropertyDrawer实现枚举中文显示

        在Unity开发中,枚举常常被用到.但是Unity自身对于枚举值,并不能做好中文的支持.无论是Head或者ToolTip.如下例: using UnityEngine; public class EnumTest : MonoBehaviour { public EmAniType AniType; } public enum EmAniType { Idle, Walk, Run, Atk, Hit, Die }         为了将这些枚举值变成中文,这里使用了Custom

(五)Unity5.0新特性------unity中编写脚本

?? 出处:http://blog.csdn.net/u010019717 author:孙广东      时间:2015.3.32 之前的Unity脚本 我们利用Mono(WinRT 在Windows Store Apps 和Windows Phone上) 使用 C# ,获得第三方库和接近本机性能的易用性.然而,有一些挑战: C# 运行时性能仍然落后于 C/c + + 最新和最好的.NET 语言和运行时功能在Unity's current version of Mono并不支持. 大约 23