栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity GameFramework框架使用UGUI无法显示问题

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity GameFramework框架使用UGUI无法显示问题

Unity GameFramework框架使用UGUI无法显示问题

原因

这是由于UGUI的显示依赖于canvas,而框架自动生成的UI Form Instances对象的没有canvas,导致生成在下面的UI控件无法显示。

解决方案
  1. 在UI下新增UI Form Instances空对象;
  2. 配置UI Form Instances对象下的插件(增加Rect Transform, Canvas, Canvas Scaler, Graphic Raycaster)
  3. 将UI Form Instances拖到UI对象的Instance Root;
  4. 此时UI已可以正常显示,但是锚点可能还存在问题;这是因为UI对象的父级没有canvas,通过自定义UI Group Help可以解决;
  5. 创建自定义的help类;
using UnityEngine;
using UnityEngine.UI;
using UnityGameFramework.Runtime;

namespace MyGame
{
    /// 
    /// uGUI 界面组辅助器。
    /// 
    public class UGuiGroupHelper : UIGroupHelperBase
    {
        public const int DepthFactor = 100;

        private int m_Depth = 0;
        private Canvas m_CachedCanvas = null;

        /// 
        /// 设置界面组深度。
        /// 
        /// 界面组深度。
        public override void SetDepth(int depth)
        {
            m_Depth = depth;
            m_CachedCanvas.overrideSorting = true;
            m_CachedCanvas.sortingOrder = DepthFactor * depth;
        }

        private void Awake()
        {
            m_CachedCanvas = gameObject.GetOrAddComponent();
            gameObject.GetOrAddComponent();
        }

        private void Start()
        {
            m_CachedCanvas.overrideSorting = true;
            m_CachedCanvas.sortingOrder = DepthFactor * m_Depth;

            RectTransform transform = GetComponent();
            transform.anchorMin = Vector2.zero;
            transform.anchorMax = Vector2.one;
            transform.anchoredPosition = Vector2.zero;
            transform.sizeDelta = Vector2.zero;
        }
    }
}
  1. 修改UI对象的UI Group Help为自定义的help;
    问题解决!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902182.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号