QFramework 是一套 渐进式 的 快速开发 框架。目标是作为无框架经验的公司、独立开发者、以及 Unity3D 初学者们的 第一套框架。框架内部积累了多个项目的在各个技术方向的解决方案。学习成本低,接入成本低,重构成本低,二次开发成本低,文档内容丰富(提供使用方式以及原理、开发文档)。github:https://github.com/liangxiegame/QFramework


今天给大家分享的是QF中对属性的一些方便使用进行的封装API使用

例子在:QFramework\Framework\4.EditorToolKit\Example\Attribute\AttributeExample.unity

效果如下:

未运行
运行后

这里面只有一个脚本AttributeExample.cs,先看下全部代码

#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;

namespace QFramework.Example
{
    public class AttributeExample : MonoBehaviour
    {
#if UNITY_EDITOR

        /// <summary>
        /// 使用按钮做初始化操作,省去多次手动拉引用
        /// </summary>
        [Button("Init", showIfRunTime = ShowIfRunTime.Editing)]
        public int ButtonAtt1;

        private void Init()
        {
            Undo.RecordObject(this, "Init");
            TfSelf = transform;
            Colliders = GetComponentsInChildren<Collider>();
            EditorUtility.SetDirty(this);
            Debug.Log("Init Invoked");
        }

        /// <summary>
        /// 使用按钮做一些其他事情
        /// </summary>
        [Button("LogRunSpeed", "LookAtMe", showIfRunTime = ShowIfRunTime.Playing)]
        public int ButtonAtt2;

        private void LogRunSpeed()
        {
            Debug.Log("Button1 Invoked");
            Debug.Log("RunSpeed: " + RunSpeed);
        }

        private void LookAtMe()
        {
            Camera camera = Camera.main;
            if (camera)
            {
                camera.transform.LookAt(transform);
            }

            Debug.Log("LookAtMe Invoked");
        }
#endif

        public bool IsRun;

        /// <summary>
        /// 根据IsRun变量的值在检视面板上绘制RunSpeed变量
        /// </summary>
        [ShowIf("@IsRun")]
        public float RunSpeed;

        public bool IsJump;

        [ShowIf("@IsJump")] public float JumpHeight;

        [ShowIfAnd("@IsJump", "@IsRun")] public bool IsStop;

        public Collider[] Colliders;
        public Transform  TfSelf;

        /// <summary>
        /// 直接给函数显示一个Button
        /// 目前只能显示在顶部,没有做自定义sort功能
        /// </summary>
        [ButtonEx]
        private void CallInit()
        {
#if UNITY_EDITOR
            Init();
#endif
        }
    }
}

1.showIfRunTime

 public enum ShowIfRunTime
    {
        All,
        Playing,
        Editing,
    }

All : 任何情况都可以显示

Playing : 运行时才有效

Editing : 编辑未运行时有效

2.Button

        /// <summary>
        /// 使用按钮做初始化操作,省去多次手动拉引用
        /// </summary>
        [Button("Init", showIfRunTime = ShowIfRunTime.Editing)]
        public int ButtonAtt1;


        /// <summary>
        /// 使用按钮做一些其他事情
        /// </summary>
        [Button("LogRunSpeed", "LookAtMe", showIfRunTime = ShowIfRunTime.Playing)]
        public int ButtonAtt2;

效果如下:

3.ShowIf

         /// <summary>
        /// 根据IsRun变量的值在检视面板上绘制RunSpeed变量
        /// </summary>
        [ShowIf("@IsRun")]
        public float RunSpeed;

        public bool IsJump;

        [ShowIf("@IsJump")] public float JumpHeight;

        [ShowIfAnd("@IsJump", "@IsRun")] public bool IsStop;

 效果如下:

4.ButtonEx

        /// <summary>
        /// 直接给函数显示一个Button
        /// 目前只能显示在顶部,没有做自定义sort功能
        /// </summary>
        [ButtonEx]
        private void CallInit()
        {
#if UNITY_EDITOR
            Init();
#endif
        }
    }

 

如果你想看原理实现的话推荐大家看下这个系列文章后看源码就非常容易了:

Unity Editor 学习之路

 

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐