Unity-オブジェクトのZレイヤーでの順序


11

タイトルが私の質問とまったく同じでない場合は申し訳ありませんが、私はそれをどのように説明するのか本当にわかりません。

私は私の都市の床の画像と、プレイヤーが背後を通り過ぎた場合にプレイヤーが背後に隠されているはずのすべての壁または木の画像(同じサイズ)を持っています。私の結果はそれほど悪く見えません:

問題は、壁のレイヤーの順序がプレーヤーの順序よりも上であるため、プレーヤーが壁の前を歩くと、プレーヤーが消えてしまうことです。

ここに画像の説明を入力してください

これを修正するかなり簡単な方法はありますか、それともすべてのオブジェクトを手動で追加し、それらをいくつかのスクリプトに接続する必要がありますか?

回答:


17

この効果を達成するには:

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を確認してください。


コンポーネントがチェックされていない場合、Start()が実行されないことも確信しています。Awake()は非アクティブなコンポーネントで実行されますが、startは実行されません。
Uri Popov

ちょうどチェックしました。あなたは正しいです。Awake代わりに使用する例を更新しました。ありがとう
Chris McFarland
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.