我在Unity 3D中有两个类。
第一类与场景相关联。
public class MyScene : MonoBehaviour {
private Rect frame1Rect;
public Texture storyFrame1;
void Start() {
frame1Rect = new Rect(0, 0, storyFrame1.width * UIManager.SW, storyFrame1.height * UIManager.SH);
}
}
和一个实用程序类:
public class UIManager {
public static float SW {
get { return Screen.width / 1080; }
}
public static float SH {
get { return Screen.height / 1920; }
}
}
Rect
变为(0, 0, 0, 0)
如果我将frame1Rect
线路替换为:
frame1Rect = new Rect(0, 0, storyFrame1.width * Screen.width / 1080, Screen.height * storyFrame1.height / 1920);
它又起作用了。无法从UIManager
中获得SW
的值的原因是什么?
我敢打赌你在这里得到的是整数除法。
CCD_ 6(和CCD_ 7)是CCD_。与Texture.width
相同。
在UIManager.SW
属性中,您有以下表达式:
return Screen.width / 1080;
现在,Screen.width
很可能在1080ish左右。对于整数除法,它将截断,然后将其转换为float
返回。例如,如果Screen.width
是540
,则不会返回0.5
,而是返回0
。如果Screen.width
是1,620
,则不会返回1.5
,而是返回1
。
在您的非UIManager代码中,您可以使用以下表达式:
storyFrame1.width * Screen.width / 1080
这仍然使用整数除法,但storyFrame1.width * Screen.width
的初始乘法将创建一个非常大的值(比如291600 / 1080
),该值仍将截断,但提供了270
的看似正确的值。
要解决此问题,您需要在除法之前将整数值强制转换为float
:
public class UIManager {
public static float SW {
get { return ((float)Screen.width) / 1080; }
}
public static float SH {
get { return ((float)Screen.height) / 1920; }
}
}
此外,顺便说一句,你确定你的宽度值应该除以编辑:我看到你在使用肖像定向,没关系。1080
还是应该是1920
?(身高也是如此。看起来你的价值观可能会发生变化,但我不确定你在这里想要实现什么。)