簡體   English   中英

如何將 Unity 2d object 固定到屏幕邊緣?

[英]How to fix a Unity 2d object to the edge of a screen?

我正在 Unity 中制作游戲,其中對象在清醒的 state 中生成為網格類型模式。 我希望第一個 object 出現在屏幕的左邊緣,其他的緊隨其后。 當我在統一的內置游戲測試器中進行測試時,我已經或多或少地正常工作了。 我什至嘗試了不同的分辨率,它看起來仍然不錯。
但是,當我構建項目然后對其進行測試時,對象都在相機之外,它看起來與預覽構建完全不同。
我已經嘗試了許多我可以在谷歌上找到的各種建議,但它們似乎並沒有更好

我實例化第一個 object 的方式是首先通過使用獲取屏幕邊緣的 X 值

int ix = -(Camera.main.scaledPixelWidth / 2)

然后我將添加 object 寬度的一半,使用

var renderer = clone.GetComponent<Renderer>();
float width = renderer.bounds.size.x / 2f;
ix += (int) width;

我也嘗試過使用 screen.width 和 Camera.main.PixelWidth 值,它們都是相同的......它們在 Unity 的內置游戲預覽中的所有縱橫比看起來都很好,但是當我為Windows 或 WebGL 對象在屏幕外開始,只有最后幾個對象會在屏幕上呈現。
無論分辨率如何,是否有人對讓對象精確呈現在邊緣的方法有任何建議?

我意識到如果手動布置對象可能會更好,但是需要在關卡開始時渲染對象,因為想法是重用一個場景並根據解析的 xml 文件加載資產,因為這是一個難題游戲,我希望用戶最終也能夠創建自己的謎題。

由於您已經在談論Canvas中的 UI 元素,您需要做的就是正確設置錨點和 pivot 點。

要么在你的預制件中做到這一點

在此處輸入圖像描述

或稍后通過代碼,例如

var rectTransform = clone.GetComponent<RectTransform>();
var anchorsVector = new Vector2(0,0.5f);
rectTransform.pivot = anchorsVector;
rectTransform.anchorMin = anchorsVector;
rectTransform.acnhorMax = anchorsVector;

現在您需要做的就是將此 object 設置為 position x=0以將其“附加”到左邊緣。 使用此當前設置, y=0表示垂直居中。 您當然可以根據自己的需要進行更改。

rectTransform.anchoredPosition = new Vector2(0, 0);

就像在這個小演示中一樣

public class Example : MonoBehaviour
{
    [ContextMenu("Test")]
    private void Test()
    {
        var rectTransform = GetComponent<RectTransform>();
        var anchorsVector = new Vector2(0,0.5f);
        rectTransform.pivot = anchorsVector;
        rectTransform.anchorMin = anchorsVector;
        rectTransform.anchorMax = anchorsVector;

        rectTransform.anchoredPosition = new Vector2(0, 0);
    }
}

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM