Unity 2D 游戏背景适配

在开发2D游戏的时候,不同的设备分辨率下,经常需要将背景以高或以宽来适配。如果以高适配,即背景图的高度填充整个屏幕,然后去缩放宽度。最终效果图如下

注意,我们的背景图片 Pixel Per Unit 的值保持默认的 100,如果用了其他的值,那计算时也要对应修改

首先需要调整相机的 orthographicSize 的值,使其与当前设备分辨率的 height 相匹配。建立一个脚本,就叫 CameraController 吧。这个脚本会根据屏幕分辨率,去设置相机的 orthographicSize 的值。这个脚本挂在相机上,相机的 Projection 要调成 Orthographic 模式。

using System.Collections;
using UnityEngine;

[RequireComponent(typeof(Camera))]
public class CameraController : MonoBehaviour
{
public static Camera gameCamera
{
get; private set;
}

public static float cameraHeightSize
{
get; private set;
}

public static float cameraWidthSize
{
get; private set;
}

private void Awake()
{
gameCamera = gameObject.GetComponent<Camera>();
SetCameraSize();
}

private void SetCameraSize()
{
cameraHeightSize = Screen.height / 100.0f;
gameCamera.orthographicSize = cameraHeightSize / 2.0f;

float aspect = (float)Screen.height / (float)Screen.width;
cameraWidthSize = cameraHeightSize / aspect;
}
}

确定了 orthographicSize 的值,也就是确定了相机在世界空间的可视范围,也就是能看几米高,几米宽。然后就可以调整背景了。由于图片的 Pixel Per Unit 的值是 100,也就是每100个像素,看作1米。下面是调整背景 SpriteRenderer 缩放的代码。

using UnityEngine;

public class BGController : MonoBehaviour
{
public SpriteRenderer bg;

private void Start(){
float height = bg.sprite.bounds.size.y;
float scale = CameraController.cameraHeightSize / height;
bg.transform.localScale = new Vector3(scale, scale, 1.0f);
}
}

这里要注意的是,要使用 sprite 的 bounds size, 而不是用 sprite 的 texture height。

Author: Moeif Studio

Permalink: http://blog.moeif.com/2021/08/22/unity-2d-bg-adaptive/

任何技术问题,可加微信交流,微信: ifloop

搜索并关注微信公众号 [ 萌一小栈 ] 可及时订阅最新技术文章

Comments