我最近开始使用Unity和C#,目前正在制作一款垂直2D手机游戏。我正在努力让我的背景在不同的纵横比下进行缩放,我的背景精灵是19,59,可玩区域是169。背景精灵是19.59,可玩区域是169。目前背景的缩放是为了适应屏幕的顶部和底部,但我的想法是让背景固定在侧面和底部,如果需要的话,视图可以向上延伸(因此,高精灵)。有什么想法吗?Thanks in advance.Here is the code im trying, its attached to the Camera.
public SpriteRenderer background;
private void Start()
{
float screenRatio = (float)Screen.width / (float)Screen.height;
float targetRatio = background.bounds.size.x / background.bounds.size.y;
if(screenRatio >= targetRatio)
{
Camera.main.orthographicSize = background.bounds.size.y / 2;
}
else
{
float differenceInSize = targetRatio / screenRatio;
Camera.main.orthographicSize = background.bounds.size.y / 2 * differenceInSize;
}
}
我的解决方案是使用一个世界空间的UI画布。
将画布设置为世界空间,将其放置在场景中所需的深度(尺寸并不重要,因为我们可以在脚本中设置),然后添加一个图像对象作为子对象,或者向画布对象添加一个图像组件。像这样添加你的精灵作为图像的来源。
void Awake()
{
RectTransform rt = GetComponent<RectTransform>();
rt.position = new Vector3(0, 0, rt.position.z);
float camHeight = Camera.main.orthographicSize * 2;
rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, camHeight);
float targetRectWidth = camHeight * Camera.main.aspect;
rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, targetRectWidth);
}
步骤是 - 设置矩形变换的位置在屏幕中心,你在编辑器中设置的深度。 - 获取2x摄像头高度(因为那是屏幕顶部到底部的距离)--设置锚点,使UI对象与屏幕顶部和底部对齐--通过将高度乘以摄像头的纵横比来获取目标宽度--根据目标宽度设置正确的宽度。
如果需要的话,可以在更新中代替Awake或Start来动态调整背景的大小。
这里是在1080p 16:9和5:4.红色的立方体是为了显示它是在场景中的物体后面的背景。
如果这对你有帮助,请投票并接受答案。无意求人,但新手往往不会想到去做。