当前位置:网站首页>【Unity3D】无法正确获取RectTransform的属性值导致计算出错
【Unity3D】无法正确获取RectTransform的属性值导致计算出错
2022-07-02 06:36:00 【趁着头发多我想做游戏】
UGUI获取RectTransform的某些属性时坑实在是太多了,以博主踩过的坑记录一下:
1.由于ContentSizeFitter组件导致不能正确获取UI的宽高
参考宣雨松大神的做法:Unity3D研究院之ContentSizeFitter同步立即响应回调
public static Vector2 GetPreferredSize (RectTransform rect, ContentSizeFitter fitter) {
if (rect == null || fitter == null) {
return Vector2.zero;
}
LayoutRebuilder.ForceRebuildLayoutImmediate (rect);
return new Vector2 (HandleSelfFittingAlongAxis (0, fitter, rect), HandleSelfFittingAlongAxis (1, fitter, rect));
}
//获取宽和高
private static float HandleSelfFittingAlongAxis (int axis, ContentSizeFitter fitter, RectTransform rect) {
ContentSizeFitter.FitMode fitting = (axis == 0 ? fitter.horizontalFit : fitter.verticalFit);
if (fitting == ContentSizeFitter.FitMode.MinSize) {
var size = LayoutUtility.GetMinSize (rect, axis);
return size;
} else {
var size = LayoutUtility.GetPreferredSize (rect, axis);
return size;
}
}
2. Canvas上有提示 ‘some values driven by canvas’ 时无法获取Canvas正确的宽高
如果想获取Canvas的RectTransform.rect.width / RectTransform.rect.height出现这个提示时要小心了,rect很有可能宽高都是零,估计也是因为RectTransform需要等一帧才会把正确的宽高设置到RectTransform中,因此博主的做法是:开一个协程,不断检测RectTransform.rect.width / RectTransform.rect.height,当两个值都大于零才执行你的回调
注意,如果有需求把物体的世界坐标转换到某个Canvas下的UI坐标时,也要等到Canvas的rect宽高都大于零,否则也是错的,这里提供一下转换的代码:
public static Vector3 WorldToUGUIPosition (Camera worldCam, Vector3 worldPos, Camera uiCamera, RectTransform uiRect) {
var pos = worldCam.WorldToScreenPoint (worldPos);
Vector2 result;
RectTransformUtility.ScreenPointToLocalPointInRectangle(uiRect, pos, uiCamera, out result);
return result;
}
边栏推荐
- 2837xd代码生成模块学习(4)——idle_task、Simulink Coder
- Blender海洋制作
- Beautiful and intelligent, Haval H6 supreme+ makes Yuanxiao travel safer
- Project practice, redis cluster technology learning (6)
- 2837xd code generation - stateflow (3)
- What is the relationship between realizing page watermarking and mutationobserver?
- Applet development summary
- Blender石头雕刻
- PI control of grid connected inverter (grid connected mode)
- 【UE5】蓝图制作简单地雷教程
猜你喜欢
Error reporting on the first day of work (incomplete awvs unloading)
Illusion -- Animation blueprint, state machine production, character walking, running and jumping action
2837xd code generation - stateflow (2)
2837xd code generation module learning (1) -- GPIO module
UE4 night lighting notes
Applet development summary
Notes de base sur les plans illusoires d'IA (triés en 10 000 mots)
Mixed development of uni app -- Taking wechat applet as an example
虚幻AI蓝图基础笔记(万字整理)
2837xd code generation module learning (2) -- ADC, epwm module, timer0
随机推荐
A model can do two things: image annotation and image reading Q & A. VQA accuracy is close to human level | demo can be played
Operator exercises
Share a blog (water blog)
Project practice, redis cluster technology learning (VIII)
【虚幻】按键开门蓝图笔记
Vscode set JSON file to format automatically after saving
Blender石头雕刻
Project practice, redis cluster technology learning (16)
2837xd code generation - stateflow (4)
Off grid control of three-phase inverter - PR control
PI control of three-phase grid connected inverter - off grid mode
Project practice, redis cluster technology learning (12)
ue虚幻引擎程序化植物生成器设置——如何快速生成大片森林
2837xd code generation module learning (3) -- IIC, ECAN, SCI, watchdog, ECAP modules
[200 Shengxin literatures] 95 multiomics exploration TNBC
ue4材质的入门和原理笔记
Image recognition - Data Cleaning
Introduction et prévention des essais de pénétration
高考那些事
Unreal material editor foundation - how to connect a basic material