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

这篇具有很好参考价值的文章主要介绍了【Unity之IMGUI】—位置信息类和控件基类的封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发


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

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏

⭐🅰️IMGUI封装实践⭐




⭐前言⭐

【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发

缺点1:无法在编译过程进行可视化调整
缺点2:无法分辨率自适应

【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发


🎶(A) UI中的九宫格原理


【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发

【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发


🎶(B) 位置信息类UML


作用:让控件根据调整对齐
【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发
【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发

  • 最终代码
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
}

[System.Serializable] //让
/// <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) 控件基类的封装创建


【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发

特点:
类是抽象类:原因基类不需修改子类需要修改
两个抽象方法:原因不同控件的自定义类型不同,所以需要被重写

【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,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#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


【Unity之IMGUI】—位置信息类和控件基类的封装,# UnityGUI篇,unity,游戏引擎,c#,移动开发

ImGUI又称为Dear ImGui,它是与平台无关的C++轻量级跨平台图形界面库,没有任何第三方依赖,可以将ImGUI的源码直接加到项目中使用,也可以编译成dll, ImGUI使用DX或者OpenGL进行界面渲染,对于画面质量要求较高,例如客户端游戏,4k/8k视频播放时,用ImGUI是很好的选择,当然,你得非常熟悉DirectX或者OpenGL,不然就是宝剑在手,屠龙无力。相对于Qt、MFC、DuiLib、SOUI等,ImGUI的拓展性更好,也更轻量级,当然对于开发者的要求也更高.
————————————————
版权声明:本文为CSDN博主「秩沅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_64128218/article/details/131340771文章来源地址https://www.toymoban.com/news/detail-525877.html


到了这里,关于【Unity之IMGUI】—位置信息类和控件基类的封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity之IMGUI】—自定义常用控件的封装(即拿即用)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :UnityUI篇实战 UML类图 封装代码: 按钮封装代码 封装代码 UML类图 封装代码 封装代码 封装代码 GUI.DrawTextrrue 没有自定义样式的重载 封装代

    2024年02月11日
    浏览(31)
  • 【unity之IMGUI实践】敌方逻辑封装实现【六】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.炮台的行为逻辑封装:旋转,触发检测,发射炮弹及特效 2.检测玩家后自动瞄准攻击 3.玩家扣

    2024年02月15日
    浏览(35)
  • 【unity之IMGUI实践】游戏结束流程封装实现【七】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.坐标三个转化 2.GUI的原点和屏幕的原点 3.结构体的特点回顾——涉及Rect_结构体类型 4.血条的

    2024年02月14日
    浏览(33)
  • C++核心编程—类和对象,类的三大特性——封装、继承、多态

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 ①什么是对象? 生活中有各种各样的 事物 ,如人、动物、植物等在C++中将这些称为对象。 对象多种多样, 各种对象的属性也不相同 。 例如狗的品种,毛色,年龄等 各个对象都有自己的行为 ,例

    2024年02月07日
    浏览(49)
  • 【unity之IMGUI实践】通用API实现抽象行为封装【五】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤 1.添加道具预制体(随机生成武器) 2.封装道具基类 3.封装武器道具逻辑 1.封装道具基类 封装武器道具

    2024年02月15日
    浏览(30)
  • 【C++初阶】三、类和对象(面向过程、class类、类的访问限定符和封装、类的实例化、类对象模型、this指针)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【C++初阶】二、入门知识讲解 (引用、内联函数、auto、基于范围的for循环、指针空值

    2024年02月04日
    浏览(31)
  • 【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)

    🔥 个人主页 : Forcible Bug Maker 🔥 专栏 : C++ 目录 前言 什么是面向对象? 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 类对象的存储方式 this指针 结语 最早的C++版本(C with classes)中,最先加上的就是类的机制,它构成了面向对象编程(OOP)的

    2024年04月14日
    浏览(40)
  • 2.关于 uiautomation.uiautomation 模块中 ListControl (列表控件)类的帮助信息

    class ListControl(Control)类。列表控件(控件) | ListControl(searchFromControl: uiautomation.uiautomation.Control = None, 列表控件(从控件搜索:UI自动化。UI自动化。控件=空值 searchDepth: int = 4294967295, searchInterval: float = 0.5, foundIndex: int = 1, 搜索深度:整数 = 4294967295,搜索间隔:浮点数 = 0.5,找到

    2024年01月19日
    浏览(26)
  • C++的基类和派生类构造函数

    基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。

    2024年02月10日
    浏览(39)
  • opencv实战项目 实现手势跟踪并返回位置信息(封装调用)

     OpenCV 是一个基于 Apache2.0 许可(开源)发行的跨平台计算机视觉和机器学习 软件库 ,可以运行在Linux、Windows、Android和Mac OS操作系统上。 需要提前准备opencv 和 mediapipe库   pip --default-timeout=5000 install -i https://pypi.tuna.tsinghua.edu.cn/simple mediapipe 接着上一章的内容,这一次我们加

    2024年02月13日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包