UnityTips——Unity小技巧集合(持续更新)

博客迁移

个人博客站点,欢迎访问,www.jiingfengji.tech

Attribute

RequiredAttribute

效果图如下:当引用类型的property为空时,使用红色提示。

代码如下:

1、RequiredAttribute.cs

using UnityEngine;
public class RequiredAttribute : PropertyAttribute
{
    
}

2、RequiredDrawer.cs

using UnityEditor;
using UnityEngine;
[CustomPropertyDrawer(typeof(RequiredAttribute))]
public class RequiredDrawer : PropertyDrawer
{
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        Color c = GUI.backgroundColor;
        if ((property.propertyType == SerializedPropertyType.ObjectReference || property.propertyType == SerializedPropertyType.ExposedReference) && property.objectReferenceValue == null)
        {
            GUI.backgroundColor = Color.red;
        }

        EditorGUI.PropertyField(position, property);
        GUI.backgroundColor = c;
    }
}

3、测试脚本RequiredAttributeDemo.cs

using UnityEngine;
public class RequiredAttributeDemo : MonoBehaviour
{
    [Required] public Transform _transform;
}

Tips

Debug.Log日志点击

Debug.Log 官方文档介绍地址:https://docs.unity3d.com/ScriptReference/Debug.Log.html

脚本改类名,同时修改文件名

Rider、VS使用快捷键Ctrl+R+R,弹出改名框

离开编辑模式,进入运行模式时,保存Scene和Assets

using UnityEditor;
 using UnityEditor.SceneManagement;
 using UnityEngine;
 
 [InitializeOnLoad]
 public class AutoSave
 {
     static AutoSave()
     {
         EditorApplication.playModeStateChanged += SaveOnPlay;
     }
 
     private static void SaveOnPlay(PlayModeStateChange state)
     {
         if (state == PlayModeStateChange.ExitingEditMode)
         {
             Debug.Log("Exiting Edit Mode,Auto Save...");
             EditorSceneManager.SaveOpenScenes();
             AssetDatabase.SaveAssets();
         }
     }
 }

Unity多语言修改

起因:群友想修改AudioSource组件的Inspector面板中Volume字段的提示内容。

然后我一查Editor脚本,https://github.com/Unity-Technologies/UnityCsReference/blob/2019.3/Editor/Mono/Inspector/AudioSourceInspector.cs

这写死了,,,怎么改。。。

后来群友提醒到Unity现在支持多语言,那就下载一个中文包看看。

中文包下载下来是上图中的一个.po文件

看样子是以一个msgid对应一个msgstr,msgid就是英文的内容,msgstr就是各语言的内容了。

接着找"Sets the overall volume of the sound."

对应的中文内容就是上面了。。

那么.po文件自己修改后,重启Unity后就可以应用上去了。

测试以下:

msgstr “设置声音的整体音量。”

修改成

msgstr “设置声音的整体音量。(修改版)”

如上图,修改成功。

那么,回到那位群友的问题,如果只修改那个Volume的提示文本呢,很简单,把.po文件的其他内容都删掉,文件头的内容别删了,只留下这个msgid和msgstr,别的都id和str都删了,这样就实现了修改Volume的提示文本了。

如下图:

不过中文的.po文件 是用的 中文的字体,总之,看着就是别扭。。。

添加自定义HeaderGUI

官方链接说明

using UnityEditor;

[InitializeOnLoadAttribute]
static class EditorHeaderGUID
{
    static EditorHeaderGUID()
    {
        Editor.finishedDefaultHeaderGUI += DisplayGUIDIfPersistent;
    }

    static void DisplayGUIDIfPersistent(Editor editor)
    {
        if (!EditorUtility.IsPersistent(editor.target))
            return;

        var guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(editor.target));
        var totalRect = EditorGUILayout.GetControlRect();
        var controlRect = EditorGUI.PrefixLabel(totalRect, EditorGUIUtility.TrTempContent("GUID"));
        if (editor.targets.Length > 1)
            EditorGUI.LabelField(controlRect, EditorGUIUtility.TrTempContent("[Multiple objects selected]"));
        else
            EditorGUI.SelectableLabel(controlRect, guid);
    }
}

OnValidata数据检查

OnValidata官方文档介绍

在编辑器中可以使用 OnValidate() 对输入的数据进行检查。(仅编辑状态下有效)

using UnityEngine;
using System.Collections;
 
public class OnValidateExample : MonoBehaviour {
    public float validateTestValue;
 
    void OnValidate() {
        //Check validateTestValue
    }
}

拖拽多个元素到 inspector

可以拖拽元素直接加到 inspector 中去,但是选择多个元素的时候就不容易做到了,其实有一个方法,就是先锁定 inspector,就可以轻易的将多个元素(对象)拖拽到 inspector 中了。

以上知识分享,如有错误,欢迎指出,共同学习,共同进步。
本主题持续更新。。。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值