👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:UnityUI篇实战
⭐🅰️IMGUI封装实践【二】⭐
⭐前言⭐
缺点1:无法在编译过程进行可视化调整
缺点2:无法分辨率自适应
🎶(A) 封装可视化脚本控制基类
此图可忽略
-
UML类图
-
性能优化代码
-
完整代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 让所有组件都可视化编辑
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
[ExecuteAlways] //关键特性
public class ShowAllContorlRoot : MonoBehaviour
{
private ControlFather[] allContorls; //里氏替换原则,装所有子类
private void Start()
{
allContorls = this.GetComponentsInChildren<ControlFather>();
}
private void OnGUI()
{
foreach (ControlFather item in allContorls)
{
//1.表示没有运行时(编译时)也来获取,Start是点击运行时可以获取
//2.避免了运行时重复执行该API。消耗性能
if( !Application.isPlayer)
{
allContorls = this.GetComponentsInChildren<ControlFather>();
}
item.Judge();
}
}
}
🎶(B) 控件创建及其封装——按钮
- 按钮封装代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 创建按钮
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Button : ControlFather
{
public event UnityAction triggerEvent;
//事件的添加在此起到妙用
//只要在外部给予响应函数
protected override void OffDrawStyle()
{
if(GUI.Button(ContorlPosition.LastPos ,ContorlContent))
{
triggerEvent?.Invoke();
}
}
protected override void OnDrawstyle()
{
if(GUI.Button(ContorlPosition.LastPos, ContorlContent,ContorlStyle ) )
{
triggerEvent?.Invoke();
}
}
}
🎶(C) 开始创建预制体包
- 目的: 便于套用
代码集结
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 让所有组件都可视化编辑
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
[ExecuteAlways] //关键特性
public class ShowAllContorlRoot : MonoBehaviour
{
private ControlFather[] allContorls; //里氏替换原则,装所有子类
private void Start()
{
allContorls = this.GetComponentsInChildren<ControlFather>();
}
private void OnGUI()
{
foreach (ControlFather item in allContorls)
{
//1.表示没有运行时(编译时)也来获取,Start是点击运行时可以获取
//2.避免了运行时重复执行该API。消耗性能
if( !Application.isPlayer)
{
allContorls = this.GetComponentsInChildren<ControlFather>();
}
item.Judge();
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 创建按钮
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Button : ControlFather
{
public event UnityAction triggerEvent;
//事件的添加在此起到妙用
//只要在外部给予响应函数
protected override void OffDrawStyle()
{
if(GUI.Button(ContorlPosition.LastPos ,ContorlContent))
{
triggerEvent?.Invoke();
}
}
protected override void OnDrawstyle()
{
if(GUI.Button(ContorlPosition.LastPos, ContorlContent,ContorlStyle ) )
{
triggerEvent?.Invoke();
}
}
}
ImGUI又称为Dear ImGui,它是与平台无关的C++轻量级跨平台图形界面库,没有任何第三方依赖,可以将ImGUI的源码直接加到项目中使用,也可以编译成dll, ImGUI使用DX或者OpenGL进行界面渲染,对于画面质量要求较高,例如客户端游戏,4k/8k视频播放时,用ImGUI是很好的选择,当然,你得非常熟悉DirectX或者OpenGL,不然就是宝剑在手,屠龙无力。相对于Qt、MFC、DuiLib、SOUI等,ImGUI的拓展性更好,也更轻量级,当然对于开发者的要求也更高.
⭐🅰️⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、文章来源:https://www.toymoban.com/news/detail-496312.html
文章来源地址https://www.toymoban.com/news/detail-496312.html
到了这里,关于【Unity之IMGUI】—编译模式下控件可视化及其封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!