Unity使用GUI做屏幕自适应(完)
发布日期:2021-05-08 16:29:39 浏览次数:22 分类:精选文章

本文共 1933 字,大约阅读时间需要 6 分钟。

Unity UI控件优化之抽象类设计

一、控件基类设计

在Unity UI开发中,常见的GUI控件可能会有类似的显示逻辑和样式需求。为了避免重复代码并提高开发效率,我们可以设计一个通用的控件基类。

基类结构设计

创建一个抽象类CustomGUIControl,其主要功能包括:

  • 位置信息:通过CustomGUIPos脚本获取控件的绝对或相对位置信息。
  • 显示内容:使用GUIContent来存储控件的显示文本、图片等。
  • 自定义样式:提供一个GUILayoutStyle来允许用户自定义控件的外观样式。
  • 样式开关:通过E_Style_OnOff枚举来控制控件是否启用自定义样式。
public enum E_Style_OnOff { On, Off }public abstract class CustomGUIControl : MonoBehaviour{    public CustomGUIPos guiPos;    public GUIContent content;    public GUIStyle style;    public E_Style_OnOff style_OnOff = E_Style_OnOff.Off;    protected virtual void StyleOnDraw() { }    protected virtual void StyleOffDraw() { }}

样式切换逻辑

根据style_OnOff的状态,决定使用默认样式或自定义样式:

public void DrawGUI(){    switch (style_OnOff)    {        case E_Style_OnOff.On:            StyleOnDraw();            break;        case E_Style_OnOff.Off:            StyleOffDraw();            break;    }}

二、优化思路

在实际项目中,可能会遇到多个控件需要统一绘制的问题。为了实现高效的UI更新,我们可以采用以下优化策略。

代码重用与管理

通过使用[ExecuteAlways]属性,我们可以在编辑模式下实时预览UI状态。同时,使用GetComponentsInChildren<CustomGUIControl>()来获取当前物体的所有子控件。

[ExecuteAlways]public class CustomGUIRoot : MonoBehaviour{    private CustomGUIControl[] allControls;    private void Start()    {        allControls = GetComponentsInChildren
(); } private void OnGUI() { if (!Application.isPlaying) { allControls = GetComponentsInChildren
(); } foreach (var control in allControls) { control.DrawGUI(); } }}

绘制顺序管理

为了实现复杂UI场景的渲染顺序控制,可以根据需求设置控件的绘制优先级。通过在OnGUI()方法中按优先级顺序绘制控件,可以确保UI渲染的正确性。

性能优化

在实际运行中,为了提升性能,可以采用以下优化方法:

  • 减少开销:避免在OnGUI()中进行频繁的组件查找,可以将查找操作缓存到Start()OnEnable()中。
  • 绘制控制:对于不需要频繁更新的控件,可以选择在OnGUI()中只绘制特定控件,减少不必要的计算开销。

总结

通过设计一个通用的CustomGUIControl基类,我们能够显著降低代码冗余率,同时实现对UI控件的统一管理和绘制顺序控制。这种方法不仅提高了开发效率,也为后续的模块开发奠定了良好的基础。

这种设计思路的核心在于:

  • 代码重复率的减少:通过抽象类实现代码的可复用性和可扩展性。
  • 性能的优化:通过对绘制逻辑的优化和管理,提升应用的运行效率。
  • 可维护性:清晰的层次结构使得后续的扩展和维护更加容易。
  • 这种方法在实际项目中得到了广泛应用,是解决复杂UI场景开发问题的有效策略。

    上一篇:简单的xml读取存储方法(未优化)
    下一篇:Unity使用GUI做屏幕自适应(一)

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年03月29日 05时04分07秒