Unity中如何在不同分辨率下正确定位物体?

问题描述 投票:0回答:2

我正在编写一款 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);

问题在于定位。它会发生变化,并且彼此之间应该具有相对距离的对象会变得混乱。原本应该一个一个出现在另一个之上的对象变得太靠近并且重叠。 “位置*比率”是一个测试,无论有没有它都不能很好地工作。例如,在这里我必须让那些我想要与屏幕右下端保持一致距离的项目。

如何解决这个问题?

c# android unity-game-engine resolution
2个回答
0
投票

您可以使用百分比计算作为方向基准来进行缩放。这代表了关系可扩展性。

你心里有一个假朋友。显示器每英寸有不同的点数。会说,这个值可能包含在你的计算中。


0
投票

我会尝试以不同的方式解释它。

设备具有 X 轴、Y 轴、颜色深度和 ppi / dpi 的屏幕分辨率。

您可以购买 6 英寸或 32 英寸、1920x1080x 颜色的显示器。与小显示器相比,大显示器的像素密度较低。

如果您有方向传感器,设备本身只会改变 X 和 Y。

横向 1920x1080 变为纵向 1080x1920。

当我使用 iPhone 时,显示屏的像素密度比更便宜的 Android 设备更高。

数学里有句著名的三句话,适合计算比例。

您可以从系统中查询像素密度值。您可以使用此值来重新缩放按钮。

我主要使用水平居中进行工作。所以我保持对称。

© www.soinside.com 2019 - 2024. All rights reserved.