QF框架使用之案例解析(二) ------ Attribute
QFramework 是一套 渐进式 的 快速开发 框架。目标是作为无框架经验的公司、独立开发者、以及 Unity3D 初学者们的 第一套框架。框架内部积累了多个项目的在各个技术方向的解决方案。学习成本低,接入成本低,重构成本低,二次开发成本低,文档内容丰富(提供使用方式以及原理、开发文档)。github:https://github.com/liangxiegame/QFramework今天..
·
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
}
}
如果你想看原理实现的话推荐大家看下这个系列文章后看源码就非常容易了:
更多推荐



所有评论(0)