Как в Unity указать обьект переменной из другого скрипта в инспекторе из кода?
Добрый день. Вопрос кажется нубским, наверное, но я никак не могу найти на него ответ. У меня есть процедурно-генерируемые обьекты с одним скриптом, а также у персонажа есть дочерний обьект с триггером и с переменной X. Когда тригер соприкасается с генерируемым обьектом, переменная X становится true, значение этой переменной мне нужно было передать в скрипт генерируемых обьектов. Я сделал это обьявив public GameObject LinkGameObject и прописав условие if LinkGameObject.X , где мне это необходимо
В итоге все работает, но только если я в инспекторе у генерируемого обьекта укажу ссылку на обьект триггера у public LinkGameObject :________) Что мне дописать чтобэ она сама себя назначала?)
Отдельно хотелось бы передать вам лучи добра, прямо через экраны ваших мониторов я передаю вам позитивную энергию, почувствуйте это, улыбнитесь и пусть все будет хорошо
Дополнительно:
уважаемый Киану, хочу пожелать вам удачи в последующих съемках и спасибо за пожелания. По делу - если мне нужно получить ссылку на игровой объект в процедурно генерируемом экземпляре префаба, я создаю публичное поле в родителе(!) который генерирует префаб, и уже при генерации префаба передаю нужные данные. Вот наглядный пример -
//ссылка на игровой обьект public GameObject DigUiPanel; **** остальной код*** //генерирую экземпляр GameObject Layer = Instantiate(LayerPrefab, LayersStartPos.transform.position + layerCreatingDirection * i * offset, Quaternion.identity); Layer.transform.rotation = Quaternion.Euler(0, 0, 45); DigUI DigUIScript = Layer.GetComponentInChildren<DigUI>(); //задаю созданному экземпляру ссылку на реальный игровой объект DigUIScript.DigUIPanel = DigUiPanel; |
//ссылка на игровой обьект public GameObject DigUiPanel; **** остальной код*** //генерирую экземпляр GameObject Layer = Instantiate(LayerPrefab, LayersStartPos.transform.position + layerCreatingDirection * i * offset, Quaternion.identity); Layer.transform.rotation = Quaternion.Euler(0, 0, 45); DigUI DigUIScript = Layer.GetComponentInChildren<DigUI>(); //задаю созданному экземпляру ссылку на реальный игровой объект DigUIScript.DigUIPanel = DigUiPanel;
Надеюсь что я правильно понял суть твоего вопроса.
П.С. - главное помнить что Instantiate возвращает ссылку на новосозданный объект, который ты можешь свободно менять.
- Сработало, пойду плакать;) Спасибо, Kentavr16
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы указать объект переменной из другого скрипта в инспекторе Unity из кода, вам необходимо использовать атрибут SerializeField в вашем скрипте. Этот атрибут позволяет вам сериализовать приватные переменные и отобразить их в инспекторе Unity.
Прежде всего, у вас должны быть два скрипта. Допустим, у вас есть скрипт "ScriptA" и скрипт "ScriptB", и вам нужно указать объект из ScriptA в ScriptB.
Пример кода:
using UnityEngine; public class ScriptA : MonoBehaviour { [SerializeField] private GameObject objectToAssign; }
using UnityEngine; public class ScriptB : MonoBehaviour { [SerializeField] private ScriptA scriptA; void Start() { // Теперь вы можете обратиться к переменной objectToAssign из ScriptA через scriptA scriptA.objectToAssign.SetActive(true); } }
После добавления атрибута SerializeField к переменной objectToAssign в ScriptA, вы увидите это поле в инспекторе Unity для объекта, к которому прикреплен скрипт ScriptA. Затем вы можете просто перетащить объект, который вы хотите назначить, в это поле.
В скрипте ScriptB вы также должны добавить атрибут SerializeField к переменной scriptA, чтобы иметь возможность назначить объект ScriptA из инспектора Unity.
Теперь вы можете обращаться к переменной objectToAssign из ScriptA через переменную scriptA в ScriptB и выполнять необходимые действия с этим объектом.
Надеюсь, это поможет вам решить вашу проблему! Если у вас есть дополнительные вопросы, не стесняйтесь задавать.