Получение компонента Transform из другой сцены

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

Получение компонента Transform из другой сцены

Сообщение Xenomoros 11 июн 2023, 11:30

Добрый день хочу получить компонент Transform из другой сцены. Многие пишут что можно получить через static, но у меня ничего не получается
Скрипт Load.cs
Синтаксис:
Используется csharp
op.player.position = new Vector3(cordx, cordy, cordz);
 

Скрипт op.cs
Синтаксис:
Используется csharp
public static class op
{
    public static Transform player;
}
 


Сам скрипт op.cs никуда не прикреплён, лежит в папке asset
Xenomoros
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2023, 11:25

Re: Получение компонента Transform из другой сцены

Сообщение Alkos26Rus 11 июн 2023, 16:35

Если объект в другой не загруженной сцене, то его не существует. Меняй его позицию при загрузке сцены где он сам и находится
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Получение компонента Transform из другой сцены

Сообщение Xenomoros 11 июн 2023, 17:24

Собственно говоря строка которая идёт на изменение позиции(Load.cs), идёт после того как сцена загрузилась, но почему-то появляется ошибка

NullReferenceException: Object reference not set to an instance of an object
Load.LevelSaveGame () (at Assets/Load.cs:73)
UnityEngine.Events.InvokableCall.Invoke () (at <b0fc6facff52490f8c5788181f70c5cc>:0)
UnityEngine.Events.UnityEvent.Invoke () (at <b0fc6facff52490f8c5788181f70c5cc>:0)
UnityEngine.UI.Button.Press () (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:70)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:114)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:57)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:272)
UnityEngine.EventSystems.EventSystem:Update() (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:530)


73 строка - изменение координат игрока.

Load.cs:
Синтаксис:
Используется csharp
    public void LevelSaveGame()
    {
        DataSet DS = new DataSet();
        IDbConnection connection = ConnectDB("Save");
        Debug.Log(connection.State);
        //PushCommand(string.Format("SELECT EXISTS (SELECT * FROM pg_tables);"), connection);
        StartCoroutine(Wait());
        SceneManager.LoadScene("OutFlame");
        DataTable scoreboard = AdapterDB("SELECT * FROM Player", "Save");
        cordx = float.Parse(scoreboard.Rows[0][3].ToString());
        cordy = float.Parse(scoreboard.Rows[0][2].ToString());
        cordz = float.Parse(scoreboard.Rows[0][1].ToString());
        //PushCommant(string.Format("SELECT * FROM Player WHERE id=1"), connection);
        op.player.position = new Vector3(cordx, cordy, cordz);
        connection.Close();
        StartCoroutine(Wait());
        SceneManager.UnloadSceneAsync("MainMenu");
    }
 
Xenomoros
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2023, 11:25

Re: Получение компонента Transform из другой сцены

Сообщение Alkos26Rus 11 июн 2023, 19:57

Нужно ссылаться на объект из самой сцены, сцена не грузится в один момент, и все ссылки на объект из другой сцены невозможны. Для этого делается специальный объект который не удаляется при смене сцены и в него нужно грузить всю информацию которая нужно перенести в другую сцену, а уже при загрузке новой сцены брать эту информацию из этого объекта
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Получение компонента Transform из другой сцены

Сообщение Xenomoros 11 июн 2023, 20:25

Я так понимаю если объект передающий информацию это кнопка на который прикреплён скрипт, то нужно DontDestroyOnLoad(Button)?

Скриншот:
https://disk.yandex.ru/i/qrhjN-pFju4ZGg(не определил размер изображение, просто оставлю ссылку на скрин).
Xenomoros
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2023, 11:25

Re: Получение компонента Transform из другой сцены

Сообщение Alkos26Rus 11 июн 2023, 20:56

Xenomoros писал(а):Я так понимаю если объект передающий информацию это кнопка на который прикреплён скрипт, то нужно DontDestroyOnLoad(Button)?

Нет, нужно создать новый объект, повесить на него скрипт, пометить как DontDestroyOnLoad(this.gameObject);, затем добавить к нему нужные поля которые хочешь сохранить, позицию например. Затем при нажатии кнопки назначать эту позицию в нужное значение. Затем уже в новой сцене, объект должен сослаться на этот объект и взять значение позиции.


Создаешь типо токого сценария и добавляешь в него разыне поля которые тебе нужно перенести в другую сцену, там много может всего быть, очки, здоровье и т.д. Но опять же его нужно находить еще в новой сцене, вобщем там база по юнити нужна, по поиску объектов, по ссылкам и т.д
Синтаксис:
Используется csharp
public class DontDestroy : MonoBehaviour
{

public Vector3 trans_pos;

    void Awake()
    {
        DontDestroyOnLoad(this.gameObject);
    }
}

 
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Получение компонента Transform из другой сцены

Сообщение Xenomoros 11 июн 2023, 23:05

Большое спасибо, всё получилось, я понял как это работает, облазил весь интернет и не нашёл точного объяснения как это сделать.
Xenomoros
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2023, 11:25

Re: Получение компонента Transform из другой сцены

Сообщение 1max1 11 июн 2023, 23:21

облазил весь интернет

Обожаю эту фразу =p~
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


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

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

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