web-dev-qa-db-ja.com

Unity 4.3-位置と画面解像度を理解し、オブジェクトの位置を適切に設定する方法は?

Unity 4.3を2Dモードで使用すると、SpriteであるGameObjectがあり(Spriteを設定したSpriteRendererで)、画面の左上に配置しようとしています。

私はこのスプライトをすべての解像度で左上に配置したい(たとえば)ビルドターゲットとしてiOSを持っているので、私の場合はiPhoneについてすべての解像度、網膜、非網膜、iPadなどについて話している。

私が欠けているのは、座標系が正確にどのように機能するかであり、0、0が左下または左上から始まる座標系でピクセルを操作するのに慣れています。

Unity 4.3では、0,0が中央にあるように見えます(これは明らかに大きな問題ではありません)が、混乱させるのは、オブジェクトの幅(128px)を印刷すると値として1.06が得られることです、また、画面は「ポイント」で細分化されているので、左は-3、右は+3

質問は次のとおりです。なぜスプライトの幅が1.06なのですか?このシステム内で物事を完璧に配置するにはどうすればよいですか?

128px * 128pxの正方形を左上に正確に配置したい場合、どうすればいいですか?

21
Adarkuccio

最初に注意したいのは、Texture Type = Spriteとして画像をUnityにインポートすると、属性「Pixels To Units」があり、これはSpriteアセットに表示されます。

enter image description here

したがって、デフォルト設定のままにしておくと、128pxは1.28の「ユニット」幅になります。ただし、この値は1.06の測定値に対応しないため、どこから来たのかわかりません。スプライトオブジェクトのスケールが均一ではないか、「ピクセルからユニットへ」の設定が変更されている可能性があります。入力テクスチャが実際に128x128であることをインスペクターで再確認し、Pixel to Unitsの値が予想どおりであることを確認します。

次に、正射投影カメラの「サイズ」はその高さの半分に対応することに注意してください。

そのため、下の画像では、オルソカメラの白いボックス内の領域が表示されます。サイズ5は、高さ10単位を意味します。私がシーンに持っている花の写真は、デフォルト設定(1単位= 100ピクセル)でインポートされた、幅128ピクセル、高さ96ピクセルの画像です。

enter image description here

今、私はあなたの正確なユースケースが何であるかわかりません(つまり、おそらくこれはGUITextureを使用して解決する方が良いでしょう)。ただし、Spriteを使用し、すべてのフレームを左上隅に配置し、そのSpriteを常にネイティブ解像度で表示するには、次のコードを使用します。 Spriteゲームオブジェクトに添付されたスクリプトに追加します。

// Update is called once per frame
void Update () {
    float camHalfHeight = Camera.main.orthographicSize;
    float camHalfWidth = Camera.main.aspect * camHalfHeight; 

    Bounds bounds = GetComponent<SpriteRenderer>().bounds;

    // Set a new vector to the top left of the scene 
    Vector3 topLeftPosition = new Vector3(-camHalfWidth, camHalfHeight, 0) + Camera.main.transform.position; 

    // Offset it by the size of the object 
    topLeftPosition += new Vector3(bounds.size.x / 2,-bounds.size.y / 2, 0);

    transform.position = topLeftPosition;        
}
37
ardrian