Переход объектов с уровня на уровень.

Программирование на Юнити.

Переход объектов с уровня на уровень.

Сообщение Pegacy 16 авг 2020, 00:10

Приветствую всех! Я пытался реализовать бесшовный переход со сцены на другую сцену, аля Half-life (если кто знает уже готовые реализации, буду признателен если скинете). Однако при попытке перенести объекты на другую сцену (а вернее при удалении дубликатов) столкнулся с трудностью. Юнити начинает рандомить на этапе выполнения функции Destroy(). Это проявляется тем что при каждом переходе с уровня на уровень, если он встречает дубликат то рандомным образом удаляет его (как и должно), либо оригинальный объект (как не должно).

В чём ошибка и как это лучше реализовать?

Пример кода привожу здесь:
Синтаксис:
Используется csharp
public class DontDestroyObject : MonoBehaviour
{
    private void Awake()
    {
        foreach (var gameObj in FindObjectsOfType(typeof(GameObject)) as GameObject[])
        {
            if (gameObj.name == name)
            {
               if (gameObj != gameObject)
                {
                    Destroy(gameObj.gameObject);

                }
            }
        }
        for (int i = 0; i < transform.childCount; i++)
        {
            foreach (var gameObj in FindObjectsOfType(typeof(GameObject)) as GameObject[])
            {
                if (gameObj.name == transform.GetChild(i).name)
                {
                    if (gameObj != transform.GetChild(i))
                    {
                        Destroy(gameObj.gameObject);
                        if (transform.GetChild(i).gameObject.GetComponent<PlayerController>() != null)
                        {
                            transform.GetChild(i).gameObject.GetComponent<PlayerController>().enabled=true; }
}
                }
            }
        } ;
        DontDestroyOnLoad(gameObject);
    }
    private void Update()
    {    
    }
    private void OnTriggerEnter(Collider other)
    {
        other.transform.SetParent(transform);
    }
    private void OnTriggerExit(Collider other)
    {    
        other.transform.SetParent(null);
        SceneManager.MoveGameObjectToScene(other.gameObject, SceneManager.GetActiveScene());
    }
}
 
Pegacy
UNец
 
Сообщения: 12
Зарегистрирован: 29 май 2019, 11:40

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10