【Unity之IMGUI】—位置信息类和控件基类的封装


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 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 评论

留下您的评论.