我正在编写一款 Android 游戏,因为我希望它以纵向模式玩,所以我希望对象的比例在屏幕宽度方面保持相同。我想我成功地用这段代码做到了:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;
public class PowerPosition : MonoBehaviour
{
void Start()
{
float w = Screen.width;
float h = Screen.height;
Vector2 position = (Camera.main.ScreenToWorldPoint(new Vector2(w * 0.9f, w * 0.53f)));
float ratio = (w / h) / (9f / 16f);
gameObject.transform.position = new Vector3(position.x * ratio, position.y * ratio, 0);
gameObject.transform.localScale = new Vector3(gameObject.transform.localScale.x * ratio, gameObject.transform.localScale.y * ratio, gameObject.transform.localScale.z * ratio);
问题在于定位。它会发生变化,并且彼此之间应该具有相对距离的对象会变得混乱。原本应该一个一个出现在另一个之上的对象变得太靠近并且重叠。 “位置*比率”是一个测试,无论有没有它都不能很好地工作。例如,在这里我必须让那些我想要与屏幕右下端保持一致距离的项目。
如何解决这个问题?
您可以使用百分比计算作为方向基准来进行缩放。这代表了关系可扩展性。
你心里有一个假朋友。显示器每英寸有不同的点数。会说,这个值可能包含在你的计算中。
我会尝试以不同的方式解释它。
设备具有 X 轴、Y 轴、颜色深度和 ppi / dpi 的屏幕分辨率。
您可以购买 6 英寸或 32 英寸、1920x1080x 颜色的显示器。与小显示器相比,大显示器的像素密度较低。
如果您有方向传感器,设备本身只会改变 X 和 Y。
横向 1920x1080 变为纵向 1080x1920。
当我使用 iPhone 时,显示屏的像素密度比更便宜的 Android 设备更高。
数学里有句著名的三句话,适合计算比例。
您可以从系统中查询像素密度值。您可以使用此值来重新缩放按钮。
我主要使用水平居中进行工作。所以我保持对称。