GameFramework框架使用中遇到的问题

GameFramework框架教程很多都是面向纯新手的,稍微再深入一点的东西就没有了,只能是看着打飞机的demo照猫画虎的研究。

以下都是在实际开发中遇到的问题,在大佬们看来有些不应该称之为问题,没办法自己太菜了,还是需要多多沉淀多多学习,遇到新的问题会继续记录…

1.问题描述

使用GF框架打AB包时,点击按钮后无反应,Console无报错,指定路径下却已经生成了空的文件夹

原因+解决:

是因为表格被占用,且该提示信息不在Error中,一般警告信息容易被忽略,把占用的表格关掉即可
在这里插入图片描述

2.问题描述

打飞机Demo在unity编辑器中通过AB包的形式加载资源,材质丢失(此时打包到手机上应该是没有问题的)

解决:

切换到安卓平台,修改渲染方式为OpenGL
在这里插入图片描述在这里插入图片描述

3.问题描述

编辑器模式下使用EPPlus读取gf中DataTables中的文件,读取失败报错:(使用编辑器拓展开发一个可以读取配表的工具,发现报错了,EPPlus应该是不支持.csv的文件,动了个歪脑筋,把配表都转换成xlsx来实现读取)
在这里插入图片描述

解决:

这是因为gf中的表格是.csv的文件,EPPlus应该是不支持.csv的文件,可以使用EPPlus把.csv的文件转换成xlsx,具体做法参考
unity编辑器拓展使用具体功能的第6点

4.问题描述

使用ab包模式加载资源,使用后处理相关的文件时在切换场景时报错:GameFrameworkException: GameFramework.Resource.ResourceManager+ResourceLoader+AssetObject.Asset PoolGameFramework.Resource.ResourceManager+ResourceLoader+AssetObject.Asset Pool', target type is 'UnityEngine.Rendering.VolumeProfile', target value is 'SampleSceneProfile (UnityEngine.Rendering.VolumeProfile)'.
在这里插入图片描述

原因+解决:

无需对后处理文件进行打ab包,对ab包的工作原理不是很理解,一股脑的先把所有资源打进去了,后处理的文件在场景中是有引用的,把这些资源取消打ab后解决
在这里插入图片描述

5.问题描述

再次显示实体时报错
在这里插入图片描述
具体复现的流程:首次是能够正常显示实体的,当切换场景后再切回来重新显示实体时报以上错误。

原因+解决:

原因就是:首次显示实体时修改了实体的父物体到了新的场景下,在切换场景时会把场景中的物体都卸载掉,导致再次显示实体时找不到了。
解决:不要修改实体的父物体即可解决。

6.问题描述

多个UI切换时,不能使用 GameEntry.UI.OpenUIForm( );要使用GameEntry.UI.RefocusUIForm(GameEntry.UI.GetUIForm(UIFormId.DefineFaceForm).UIForm,this);

7.问题描述

显示实体时,在OnShowEntitySuccess回调中设置实体的位置,有时候可以正确设置到指定的值,有时候却不行,位置归零了。暂不知道原因…

原因+解决:

原因:暂时未知
解决:在实体中的OnShow方法中设置位置

8.问题描述

使用GF自带的下载资源页面时文字发生重叠(几天后记录文章时复现的时候正常了,很奇怪。。。 )
在这里插入图片描述

原因+解决:

原因:项目中使用了URP,相机的RenderType不正确
解决:修改为 Overlay后效果正常

9.问题描述

GF加载ab包资源时,提示依赖资源加载错误,明明我ab包中打入该资源。如图
请添加图片描述

原因+解决:

原因:图中的材质球中有多张贴图,而贴图和材质球打成了两个ab包,首次启动时只下载了材质球的ab包,导致材质球获取不到贴图
解决:把贴图和材质球打到了一个ab包中

10.问题描述

目前这个项目需要实现点击按钮下载对应的资源,由于GF热更资源没法同时多个进行只能一个一个的下载,导致用户点击过快时没法打到预期效果

原因+解决:

原因:好像设计如此,说法好像是叫不能并行下载?
解决:使用队列的方式,把用户要下载的资源依次下载。

// 队列中保存的单个请求
        private struct UpdateRequest
        {
            public string GroupName;
            public UpdateResourcesCompleteCallback Callback;
        }

        // 更新队列与状态
        private readonly Queue<UpdateRequest> m_UpdateQueue = new Queue<UpdateRequest>();
        private bool m_IsUpdating = false;
        
        public void EnqueueUpdate(string resourceGroupName, UpdateResourcesCompleteCallback onUpdateComplete)
        {
            if (string.IsNullOrEmpty(resourceGroupName))
            {
                Debug.LogError("资源组名称为空");
                return;
            }
            // 入队
            m_UpdateQueue.Enqueue(new UpdateRequest { GroupName = resourceGroupName, Callback = onUpdateComplete });
            // 如果不在更新,则立即启动下一次
            TryStartNext();
        }

        private void TryStartNext()
        {
            if (m_IsUpdating || m_UpdateQueue.Count == 0)
                return;

            UpdateRequest req = m_UpdateQueue.Dequeue();
            m_IsUpdating = true;
            Debug.Log($"开始更新资源组:{req.GroupName}");
            GameEntry.Resource.UpdateResources(req.GroupName, (group, success) =>
            {
                // 调用用户回调
                req.Callback?.Invoke(group, success);
                // 标记结束
                m_IsUpdating = false;
                if (!success)
                {
                    Debug.LogError($"资源组 {req.GroupName} 更新失败,中止后续更新。");
                    // 清空队列,不再继续
                    m_UpdateQueue.Clear();
                }
                else
                {
                    Debug.Log($"资源组 {req.GroupName} 更新完成,继续下一个。");
                    // 启动下一次
                    TryStartNext();
                }
            });
        }

调用逻辑:

 IEnumerator DownloadResourceGroup(string resourceGroupName)
        {
            bool isCompleted = false;

            GameEntry.ResourceManager.EnqueueUpdate(resourceGroupName,((group, result) =>
            {
                if (result)
                {
                    Debug.Log("资源组更新完成: " + resourceGroupName);
                    isCompleted = true; // Set the completion flag to true
                }
                else
                {
                    Debug.LogError("资源组更新失败: " + resourceGroupName);
                    isCompleted = true; // Set the completion flag to true even on failure to avoid blocking
                }
            }));
            
            // Wait until the resource group update is completed
            while (!isCompleted)
            {
                yield return null; // Wait for the next frame
            }
        }

GF菜鸡群:684702145
欢迎各位大佬进群交流沟通!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值