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

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

imgui封装,# UnityGUI篇,# unity实战基础,unity,游戏引擎,c#,移动开发


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

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

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏

⭐🅰️IMGUI封装实践⭐




⭐前言⭐

imgui封装,# UnityGUI篇,# unity实战基础,unity,游戏引擎,c#,移动开发

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

imgui封装,# UnityGUI篇,# unity实战基础,unity,游戏引擎,c#,移动开发


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


imgui封装,# UnityGUI篇,# unity实战基础,unity,游戏引擎,c#,移动开发

imgui封装,# UnityGUI篇,# unity实战基础,unity,游戏引擎,c#,移动开发


🎶(B) 位置信息类UML


作用:让控件根据调整对齐
imgui封装,# UnityGUI篇,# unity实战基础,unity,游戏引擎,c#,移动开发
imgui封装,# UnityGUI篇,# unity实战基础,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) 控件基类的封装创建


imgui封装,# UnityGUI篇,# unity实战基础,unity,游戏引擎,c#,移动开发

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

imgui封装,# UnityGUI篇,# unity实战基础,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#专题篇】—核心章题单实践练习


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


imgui封装,# UnityGUI篇,# unity实战基础,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-582675.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)
  • 【unity之IMGUI实践】通用API实现抽象行为封装【五】

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

    2024年02月15日
    浏览(30)
  • 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)
  • winform 封装unity web player 用户控件

    VS2015 Unity 5.3.6f1 (64-bit) Unity官方提供的UnityWebPlayer控件在嵌入Winform时要求读取的.unity3d文件路径(Src)必须是绝对路径 ,如果移动代码到另一台电脑,需要重新修改src。于是考虑使用winform用户控件来进行封装,以实现读取存放在工程文件夹下的.unity3d文件的效果。 WinForm内嵌

    2024年02月12日
    浏览(30)
  • Unity 用脚本操作常用UI控件(上)

    控件介绍: 在界面系统的术语中,将一个具有独立状态、外观和操作的对象称为控件。例如,常用的交互控件有按钮、输入框、滑动条等,常见的非交互式控件有文本标签、图片等。 Unity采用了父子物体和组件的设计思想,其每个界面控件,往往也是由游戏物体挂载组件,以

    2024年02月09日
    浏览(28)
  • 【C++入门到精通】C++入门 —— 继承(基类、派生类和多态性)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的命名空间的一些知识点以及关于C++的缺省参数、函数重载,引用 和 内联函数也认识了什么是类和对象以及怎么去new一个 ‘对象’ ,也了解了C++中的模版,以及学习了几个STL的结构也相信大家都掌握

    2024年02月11日
    浏览(33)
  • Unity 获取手机地理位置信息

    在游戏的开发过程中,有时候会遇到需要获取玩家位置信息的需求,比如显示玩家所在的国家城市等。 有一下方法可以参考: 可以根据手机的地区和语言来做判断。 根据IP来判断所处的位置,阿里云啥的都有对应的接口服务。 根据GPS来判断。 以上方法都各有利弊吧,这里简

    2024年02月12日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包