この効果を達成するには:
2つの作成し、ソート層:地上およびオブジェクト。
道路、芝生、道のスプライトでグラウンドレイヤーを使用します。
キャラクター、壁、ハウススプライトでオブジェクトレイヤーを使用します。
オブジェクトレイヤー上のスプライトは、スプライトモードのピボットポイントを左下、下、または右下にする必要があります。これを選択するには、[プロジェクト]タブでスプライトを選択し、[インスペクター]タブでピボットポイントを選択して、スプライトのインポート設定を調整します。
グラウンドスプライトの場合、順序を変更する必要はありません。
ただし、オブジェクトの場合は、スプライトレンダラーのソート順を変更するか、transform.position.z
値を変更できます。変換を変更することをお勧めします。フロートの方が、キャラクターを動かしたときに見やすく、調整しやすいためです。一方、並べ替え順序を変更すると、オブジェクトの測定値とサイズによっては、特定の状況ではそれほど正確に見えない場合があります。シーンで。
どちらの場合も、いくつかのコードが必要になります。
public class SpritePositionSetter : MonoBehaviour {
void Awake () {
SetPosition();
}
void Update () {
SetPosition();
}
void SetPosition () {
// If you want to change the transform, use this
Vector3 newPosition = transform.position;
newPosition.z = transform.position.y;
transform.position = newPosition;
// Or if you want to change the SpriteRenderer's sorting order, use this
GetComponent<SpriteRenderer>().sortingOrder = (int)transform.position.y;
}
}
どちらの方法でも、基本的にはスプライトにZインデックスをY位置に一致させるように指示しています。
このスクリプトを静的オブジェクト(壁など)にアタッチする場合、インスペクターでコンポーネントのチェックを外して、そのUpdate
メソッドがすべてのフレームで呼び出されないようにする必要があります。そのAwake
メソッドはSetPosition
一度だけ呼び出され、それで十分です。
ただし、キャラクターについては、コンポーネントをチェックしたままにしておくと、すべてのフレームUpdate
が呼び出さSetPosition
れ、動き回るとキャラクターのZオーダーが変更されます。また、オブジェクトレイヤー上のすべてのスプライトが下ピボットポイントを使用している限り、移動中にZインデックスを変更すると、キャラクターが他のオブジェクトの前または後ろに適切に表示されます。
カメラの設定によっては、-1
逆に見える場合は新しいZ位置を乗算する必要があります。
シーンの編集中にZインデックスを調整する場合は、ExecuteInEditModeを確認してください。