我的游戏采用2D横向格式,我想根据移动设备屏幕缩放游戏屏幕尺寸。我尝试了不同的代码,但无济于事。这是我尝试的第一个脚本
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
public class MatchWidth : MonoBehaviour
{
public float sceneWidth = 25;
Camera _camera;
void Start()
{
_camera = GetComponent<Camera>();
}
void Update()
{
float unitsPerPixel = sceneWidth / Screen.width;
float desiredHalfHeight = 0.5f * unitsPerPixel * Screen.height;
camera.orthographicSize = desiredHalfHeight;
}
}
和我尝试过的其他脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChangeScreenSizeBasedonDevice : MonoBehaviour
{
// Use this for initialization
public float screenHeight = 1920f;
public float screenWidth = 1080f;
public float targetAspect = 9f / 16f;
public float orthographicSize;
private Camera mainCamera;
void Start()
{
mainCamera = Camera.main;
orthographicSize = mainCamera.orthographicSize;
float orthoWidth = orthographicSize / screenHeight * screenWidth;
orthoWidth = orthoWidth / (targetAspect / mainCamera.aspect);
Camera.main.orthographicSize = (orthoWidth / Screen.width * Screen.height);
}
}
第一个在高度上存在问题,它的顶部和底部都有空间,第二个则放大太多。有人可以指出我哪里出错了,或者谁拥有更好的代码。我将两个脚本都放在了主摄像机上
更新 我也尝试过Saif在此链接https://gamedev.stackexchange.com/questions/79546/how-do-you-handle-aspect-ratio-differences-with-unity-2d中说,但结果仍然与脚本1相同。这是图片:
我需要删除顶部或底部的空间或边距
更新2
使用此解决利润问题
void Start()
{
float screenWidth = GameManager.Instance.getScreenWidth();
float screenHeight = GameManager.Instance.getScreenHeight();
if (gameObject.name == "Cube")
{
transform.localScale = new Vector3(screenWidth / 4, screenHeight, -1);
transform.position = new Vector3(transform.position.x, 0, transform.position.z);
}
}
附加到游戏对象上以适合屏幕
答案 0 :(得分:0)
您的相机的投影可能是正交的。我会给你一个简单的解决方案。
using UnityEngine;
public class ScreenManager : MonoBehaviour
{
static public ScreenManager SM { get; set; }
private void Awake()
{
SM = this;
}
public float getScreenHeight()
{
return Camera.main.orthographicSize * 2.0f;
}
public float getScreenWidth()
{
return getScreenHeight() * Screen.width / Screen.height;
}
}
将此脚本放入游戏对象后,您可以在任何地方调用这两个函数。
例如;
让我们说一个游戏对象要是屏幕高度的一半,并放置在屏幕的左中角。 (然后将其宽度设置为4 /屏幕宽度大小)
public GameObject AnObject;
void Start()
{
AnObject.transform.localScale = new Vector2(ScreenManager.SM.getScreenWidth()/4,
ScreenManager.SM.getScreenHeight() / 2);
AnObject.transform.position = new vector2(-ScreenManager.SM.getScreenWidth()/2,0);
}
注意:如果要使缩放完美工作,则必须在导入设置中正确设置每单位图像像素。例如,如果图像为1024x1024,则要将该图像的每像素像素设置为1024。