Um diesen Effekt zu erzielen:
Erstellen Sie zwei Sortierebenen : Boden und Objekte .
Lassen Sie Ihre Straßen-, Gras- und Pfad-Sprites die Bodenschicht verwenden.
Lassen Sie Ihren Charakter, Ihre Wände und Ihre Hausgeister die Ebene "Objekte" verwenden.
Sprites auf Ihrer Objektebene möchten, dass der Drehpunkt im Sprite-Modus entweder unten links, unten oder unten rechts ist. Sie können dies wählen , indem ein Sprite in Ihrer Registerkarte Projekt auswählen und den Drehpunkt in der Registerkarte Inspector wählen Sie den Sprite anzupassen Importeinstellungen .
Bei gemahlenen Sprites müssen Sie sich keine Gedanken über die Änderung ihrer Reihenfolge machen.
Für Objekte können Sie jedoch entweder die Sortierreihenfolge des Sprite-Renderers oder deren transform.position.z
Wert ändern . Ich würde empfehlen, die Transformation zu ändern, da die Floats wahrscheinlich einfacher zu betrachten und anzupassen sind, wenn Sie Ihren Charakter bewegen, während das Ändern der Sortierreihenfolge in bestimmten Situationen je nach Größe und Größe Ihrer Objekte möglicherweise nicht so genau aussieht in der Szene.
In beiden Fällen wird Code benötigt.
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;
}
}
In beiden Fällen weisen Sie das Sprite grundsätzlich an, dass sein Z-Index mit seiner Y-Position übereinstimmt.
Wenn Sie dieses Skript an ein statisches Objekt (wie eine Wand) anhängen, müssen Sie die Komponente im Inspektor deaktivieren, damit ihre Update
Methode nicht bei jedem Frame aufgerufen wird. Die Awake
Methode wird SetPosition
einmal aufgerufen und das ist alles, was Sie brauchen.
Lassen Sie für Ihren Charakter die Komponente aktiviert, damit jeder Frame Update
aufgerufen SetPosition
wird, wodurch sich die Z-Reihenfolge des Charakters ändert, wenn Sie sich bewegen. Und während Sie sich bewegen, solange jedes Sprite auf der Objektebene einen unteren Drehpunkt verwendet, wird durch Ändern des Z-Index während der Bewegung sichergestellt, dass Ihr Charakter angemessen vor oder hinter anderen Objekten angezeigt wird.
Abhängig von Ihrer Kameraeinstellung müssen Sie möglicherweise die neue Z-Position mit multiplizieren, -1
wenn die Dinge rückwärts erscheinen.
Wenn Sie den Z-Index während der Bearbeitung Ihrer Szene anpassen möchten, lesen Sie ExecuteInEditMode .
Awake
stattdessen zu verwenden . Vielen Dank