Порядок сортировки работает неправильно

Я пытаюсь изменить порядок слоев сортировки в единстве для 2D-игры, но приведенный ниже скрипт у меня не работает:

using UnityEngine;
using System.Collections;

public class LevelManager : MonoBehaviour {

    public GameObject player;
    public SpriteRenderer deadGuy;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

        if (player.transform.position.y < deadGuy.transform.position.y)
        {
            deadGuy.sortingOrder = 0;
        } else
        {
            deadGuy.sortingOrder = 2;
        }

    }
}

Объекты были связаны в единстве окна инспектора перед запуском игры.

РЕДАКТИРОВАТЬ

Теперь это мой код:

using UnityEngine;
using System.Collections;

public class LevelManager : MonoBehaviour {

    public GameObject player;
    public GameObject deadGuy;
    public bool belowTheY;

    // Use this for initialization
    void Start () {

        deadGuy.GetComponent<SpriteRenderer>().sortingOrder = 2;

    }

    // Update is called once per frame
    void Update () {

        if (player.transform.localPosition.y < deadGuy.transform.localPosition.y)
        {
            belowTheY = true;
            deadGuy.GetComponent<SpriteRenderer>().sortingOrder = 0;

        } else
        {
            belowTheY = false;
            deadGuy.GetComponent<SpriteRenderer>().sortingOrder = 2;
        }

    }
}

bekowTheY активируется, если пользователь опускается ниже Y-позиции deadGuy, поэтому я знаю, что оператор if выполняется правильно. Однако слой сортировки не изменяется


person Community    schedule 14.04.2016    source источник
comment
Что не работает? Изменяется ли это свойство в редакторе, но изображение отображается не в том порядке, в котором вы хотите? Как насчет того, чтобы вы прокомментировали код в функции обновления, поставив deadGuy.sortingOrder = 2; в функцию обновления. Выберите SpriteRenderer в редакторе и проверьте, изменил ли sortingOrder свойство....   -  person Programmer    schedule 14.04.2016
comment
Глядя на объект deadGuy, я вижу, что он вообще не меняет свой слой сортировки. Он просто остается равным 2 (свойство установлено в окне инспектора).   -  person    schedule 14.04.2016
comment
Когда я сказал поставить его в функцию обновления, я имел в виду функцию Start. Еще кое-что. Удалите весь код в своем обновлении и поместитеdeadGuy.sortingOrder = 4; в функцию «Пуск». Я хочу посмотреть, работает ли ваш код. Подскажите значение в Редакторе.   -  person Programmer    schedule 14.04.2016
comment
Я понял, что if (player.transform.position.y ‹ deadGuy.transform.position.y) не работает, потому что deadGuy был SpriteRenderer, а Player был GameObject. Я установил для обоих GameObject, а затем добавил deadGuy.GetComponent‹SpriteRenderer›().sortingOrder = 4; в функции запуска, и он действительно получил уровень сортировки 4. Однако, если я обновлю строки в коде с помощью deadGuy.GetComponent‹SpriteRenderer›().sortingOrder = 0; и deadGuy.GetComponent‹SpriteRenderer›().sortingOrder = 2; соответственно все равно не работает. Если я установлю логическое значение, я увижу, что это срабатывает в операторе if.   -  person    schedule 14.04.2016
comment
deadGuy уже SpriteRenderer. Пожалуйста, объясните, почему вы делаете deadGuy.GetComponent<SpriteRenderer>()? Вы упомянули об изменении на 4 работы, так что проблема не в этом. Ваш профиль находится в этой строке player.transform.position.y < deadGuy.transform.position.y Используйте Debug.Log и убедитесь, что это то, что вам нужно.   -  person Programmer    schedule 15.04.2016
comment
используйте Debug.log, чтобы увидеть значение, а не окно инспектора   -  person Milad Qasemi    schedule 15.04.2016
comment
убедитесь, что мертвый парень находится в том же слое рендеринга, что и игрок. порядок сортировки работает только внутри одного и того же средства визуализации слоев. Но я думаю, что в коде есть какая-то логическая ошибка.   -  person Nika Kasradze    schedule 15.04.2016
comment
Я отредактировал вопрос выше с новым кодом   -  person    schedule 15.04.2016
comment
И deadGuy, и игрок находятся на одном уровне сортировки, который установлен по умолчанию.   -  person    schedule 15.04.2016


Ответы (1)


Кажется, что объект игрока также имел порядок сортировки 0, поэтому, когда объект deadGuy был запрограммирован на переход к порядку сортировки 0, он все еще отображался впереди из-за приоритета.

person Community    schedule 15.04.2016