Unity 编辑器扩展(在project settings 界面生成一个设置项,并在项目中调用)

Unity 编辑器扩展(在project settings 界面生成一个设置项,并在项目中调用)

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

///
/// 在编辑器 project settings 界面生成一个设置项
///
static class SettingToolEditor
{
    [SettingsProvider]
    public static SettingsProvider CreateMyCustomSettingsProvider()
    {
        string k_MyCustomSettingsPath = "Assets/MainConfig.asset";
        // First parameter is the path in the Settings window.
        // Second parameter is the scope of this setting: it only appears in the Project Settings window.
        var provider = new SettingsProvider("Project/ZOR_XR_Settings", SettingsScope.Project)
        {
            // By default the last token of the path is used as display name if no label is provided.
            label = "ZOR_XR_Settings",
            // Create the SettingsProvider and initialize its drawing (IMGUI) function in place:
            guiHandler = (searchContext) =>
            {
                SerializedObject settings = new SerializedObject(AssetDatabase.LoadAssetAtPath<MainConfig>(k_MyCustomSettingsPath));
                EditorGUILayout.PropertyField(settings.FindProperty("m_Number"), new GUIContent("ZOR_XR_Settings Number"));
                EditorGUILayout.PropertyField(settings.FindProperty("m_InteractiveType"), new GUIContent("InteractiveType"));
                settings.ApplyModifiedPropertiesWithoutUndo();
            },// Populate the search keywords to enable smart search filtering and label highlighting:
            keywords = new HashSet<string>(new[] { "m_Number", "Some String" })
        };

        return provider;
    }


    ///
    /// 这是ScriptableObject 生成一个asset文件
    ///
    [CreateAssetMenu(fileName = "MainConfig", menuName = "ScriptableObjects / MainConfig", order = 1)]
    public class MainConfig : ScriptableObject
    {
        public InteractiveType m_InteractiveType;
        public int m_Number;
        public static MainConfig GetSerializedObject()
        {
            return Resources.Load("MainConfig") as MainConfig;
        }

    }
    public enum InteractiveType
    {
        Interactive_OnlyOnGlasses,
        Interactive_OnPhoneAndOnGlasses
    }

    public class TestDemo : MonoBehaviour
    {
        private MainConfig mainConfig;
        // Start is called before the first frame update
        private void Awake()
        {
            if (mainConfig == null)
            {
                mainConfig = MainConfig.GetSerializedObject();// Resources.Load("MainConfig");
            }
            Debug.Log(mainConfig.m_Number);
            Debug.Log(mainConfig.m_InteractiveType);
        }
    }
}


基于MainConfig这个文件来做的,没有这个文件会报错。
转载于:Unity 编辑器扩展(在project settings 界面生成一个设置项,并在项目中调用)
在新版unity会有报错,修改了他的报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值