いいえ、スクリーンのサイズに関係なく何かに合わせるには、Unityの絶対的なシステムとは別の座標系を使用する必要があります。ユニティのモデルの1つがビューです。ビューは左上が0,0座標、右下が1,1です。これを処理する基本的なRectを作成すると、次のようになります。
using UnityEngine;
namespace SeaRisen.nGUI
{
public class RectAnchored
{
public float x, y, width, height;
public RectAnchored(float x, float y, float width, float height)
{
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public static implicit operator Rect(RectAnchored r)
{
return new Rect
{
x = r.x * Screen.width,
y = r.y * Screen.height,
width = r.width * Screen.width,
height = r.height * Screen.height
};
}
}
}
ここでは、通常のRectフロート、x、y座標を幅と高さとともに取ります。しかし、これらは値にある[0..1]。私はそれをクランプしないので、必要に応じて、アニメーションを使って画面上および画面上でトゥイーンすることができます。
以下は、画面の右下にボタンを作成し、画面の拡大または縮小に合わせてサイズを変更する簡単なスクリプトです。
void MoveMe()
{
RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit, float.MaxValue)
|| Physics.Raycast(transform.position, Vector3.up, out hit, float.MaxValue))
transform.position = hit.point + Vector3.up * 2;
}
void OnGUI()
{
if (GUI.Button(new RectAnchored(.9f, .9f, .1f, .1f), "Fix me"))
{
MoveMe();
}
}
ボタンが下に位置する、高さと幅の画面の1/10となるように、Xは、上から右及びY 0.9から0.9であり、0.1の幅と高さ画面の1/10。
OnGUIはフレームごとにレンダリングされるので、button rectは画面のサイズを自動的に更新します。 Update()を使用してウィンドウをレンダリングしている場合、同じUIで動作します。
これは私が絶対座標で意味したものの違いを説明してくれることを願っています。前の例を640x480で(絶対値を使用して)設定すると、new Rect(576, 432, 64, 48)
のようになり、縮尺は変わりません。 new RectAnchored(.9f, .9f, .1f, .1f)
を使用して、画面サイズに基づいてUIスペースにレンダリングした場合、自動的に拡大縮小されます。
おそらくスケーラの障害ではありません。あなたはおそらく絶対座標とサイズを使用しているでしょうが、画面のサイズによって変化しません。 –
もう少し具体的で、少し詳しく説明できますか?私は、絶対座標とサイズが何を意味するのか分かりませんが、あなたはUI要素やキャンバスのプロパティについて話していますか? – mashinkata