👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
⭐🅰️IMGUI封装实践⭐
文章目录
- ⭐🅰️IMGUI封装实践⭐
- ⭐前言⭐
- 🎶(==A==) UI中的九宫格原理
- 🎶(==B==) 位置信息类UML
- 🎶(==C==) 控件基类的封装创建
- ⭐🅰️⭐
⭐前言⭐
缺点1:无法在编译过程进行可视化调整
缺点2:无法分辨率自适应
🎶(A) UI中的九宫格原理
🎶(B) 位置信息类UML
作用:让控件根据调整对齐
- 最终代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:
//___________功能:位置信息类 的封装
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------/// <summary>
/// 选择对齐方式的枚举
/// </summary>
public enum E_Alignment
{Up,Down,Left,Right,Center,Left_Up,Left_Down,Right_Up,Right_Down
}/// <summary>
/// 作用:为完成分辨率的相关计算
/// </summary>
public class PosInformation
{ //-----------//可视化部分//-----------public Vector2 posOffset; //控件的偏移量public float width = 100;public float height = 50; //控件的宽高//-----------//私有部分//-----------private E_Alignment screen_Alignemnt; //屏幕的对齐类型private E_Alignment contorl_Alignment; //控件的对齐类型private Vector2 centerPos; //控件的基点(中心点)private Rect CorPos = new Rect(0, 0, 100, 100); //控件的最终坐标//属性public Rect LastPos{get{MutiCenterPos();MutiLastPos(); //进行坐标位置的最终计算CorPos.width = width;CorPos.height = height;//宽高进行赋值 return CorPos;} //返回经过计算完毕的控件位置信息Rcet类型}/// <summary>/// 控件中心点偏移的方法计算/// </summary>private void MutiCenterPos(){switch (contorl_Alignment){case E_Alignment.Up:centerPos.x = width / 2;centerPos.y = 0;break;case E_Alignment.Down:centerPos.x = width / 2;centerPos.y = height;break;case E_Alignment.Left:centerPos.x = 0;centerPos.y = height / 2;break;case E_Alignment.Right:centerPos.x = width;centerPos.y = height / 2;break;case E_Alignment.Center:centerPos.x = width / 2;centerPos.y = height / 2;break;case E_Alignment.Left_Up:centerPos.x = 0;centerPos.y = 0;break;case E_Alignment.Left_Down:centerPos.x = 0;centerPos.y = height;break;case E_Alignment.Right_Up:centerPos.x = width;centerPos.y = 0;break;case E_Alignment.Right_Down:centerPos.x = width;centerPos.y = height;break;default:break;}}/// <summary>/// 控件的最终位置计算/// </summary>private void MutiLastPos(){switch (screen_Alignemnt ){case E_Alignment.Up:CorPos.x = Screen.width / 2 + centerPos.x + posOffset.x;CorPos.y = 0 + centerPos.y + posOffset.y;break;case E_Alignment.Down:CorPos.x = Screen.width / 2 + centerPos.x + posOffset.x;CorPos.y = Screen.height + centerPos.y - posOffset.y;break;case E_Alignment.Left:CorPos .x = centerPos.x + posOffset.x;CorPos.y = Screen.height / 2 + centerPos.y + posOffset.y;break;case E_Alignment.Right:CorPos.x = Screen.width + centerPos.x - posOffset.x ;CorPos.y = Screen.height / 2 + centerPos.y + posOffset.y ;break;case E_Alignment.Center:CorPos.x = Screen.width / 2 + centerPos.x + posOffset.x;CorPos.y = Screen.height / 2 + centerPos.y + posOffset.y;break;case E_Alignment.Left_Up:CorPos.x = centerPos.x + posOffset.x;CorPos.y = centerPos.y + posOffset.y;break;case E_Alignment.Left_Down:CorPos.x = centerPos.x + posOffset.x;CorPos.y = Screen.height + centerPos.y - posOffset.y; break;case E_Alignment.Right_Up:CorPos.x = Screen.width + centerPos.x - posOffset.x;CorPos.y = centerPos.y + posOffset.y;break;case E_Alignment.Right_Down:CorPos.x = Screen.width + centerPos.x - posOffset.x;CorPos.y = Screen.height + centerPos.y - posOffset.y;break;default:break;}}
}
🎶(C) 控件基类的封装创建
- 最终代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 控件基类的创建
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------/// <summary>/// 自定义样式枚举选择(开关)/// </summary>
public enum switchStyle
{on,off
}
public abstract class ControlFather : MonoBehaviour
{//---------//可视化部分//---------public PosInformation ContorlPosition; //位置信息public GUIContent ContorlContent; //内容信息public GUIStyle ContorlStyle; //自定义信息public switchStyle onOrOff = switchStyle.off; //默认是关闭/// <summary>/// 判断自定义开关/// </summary>public void Judge(){switch (onOrOff){case switchStyle.on:OnDrawstyle(); break;case switchStyle.off:OffDrawStyle();break;default:break;}}protected abstract void OffDrawStyle(); //关闭时执行的行为protected abstract void OnDrawstyle(); //开启时执行的行为}
⭐🅰️⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、
本文链接:https://my.lmcjl.com/post/9202.html
展开阅读全文
4 评论