unity使用预制体生成物品加上grid layout group也不能适应屏幕大小

项目场景:

版本:unity2019
背包系统或者ui界面需要显示各种组件时将组件打包为预制体,使用Instantiate在游戏运行的时候实例化显示


问题描述

一开始还算正常但是当我把屏幕尺寸改变的时候发现生成的预制体大小不会自适应屏幕大小。下图是正常情况下的效果
这是正常情况下的效果没有扩大或者缩小game面板的大小
但是改变界面大小之后问题就出现了:
在这里插入图片描述缩小屏幕
放大屏幕
显示的一塌糊涂,缩小之后显得大了,扩大之后显得小了。

检查了canvas的设置似乎没有太大问题
canvasscaler中的设置使用屏幕自适应


原因分析:

直觉告诉我这个可能是关于世界坐标系和屏幕坐标系的差异导致的(后来发现好象也不是这个原因),但是我又找不到哪里出了问题,搜索的时候甚至不知道怎么描述。
之后无意间看到一个帖子刚好描述的就是类似的问题,他说这种情况的原因就是

实例化物体后 又用到 SetParent 方法

我自己分析了一下(仅个人猜测没有查阅准确的资料,如果有说的不对的欢迎指正)预制体在设置的时候会有它自己的scale值,实例化的时候就会将预制体完整的复制下来,不改变任何参数,当实例化后再去设置它的父节点就会以当前的尺寸显示出来不受屏幕自适应的约束,而如果在实例化的时候直接设置它的父节点就能让它参与到屏幕的自适应中。
其实这种问题和GtidLayoutGroup组件没有必然联系


解决方案:

之后解决起来就很简单了只需要将原来的实例化改过来就好了
这是原来的代码:

GameObject temp = Instantiate(instance.skillImagePerfab);
temp.GetComponent<SkillSlot>().UpdateSlot(skill);
temp.transform.SetParent(instance.learnedPanel.transform);

改为:

GameObject temp = Instantiate(instance.skillImagePerfab,instance.learnedPanel.transform);
            temp.GetComponent<SkillSlot>().UpdateSlot(skill);

全屏效果

屏幕缩小效果

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值