Пятница, 19 Апреля 2024, 18:42

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как получить компонент прикрепленный к пустому объекту? (убил кучу времени.. не работает ни один алгоритм :()
Как получить компонент прикрепленный к пустому объекту?
KamiRoninДата: Воскресенье, 16 Июня 2013, 20:19 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Доброго времени суток всем!

Ситуация:
1. В пустую сцену добавляю пустой объект.
2. Вешаю на него скрипт - ну допустим называется "Car" (написан на с#); и вкладываю туда же куб с регидбоди.
3. Втыкаю второй пустой объект в сцену - эт у меня GameMenager, в него засовываю скрипт на js.
4. Происходит событие (куб из Car'a врезался в стену), в результате которого GameMenager должен изменить параметры в Car имея ДОЧЕРНИЙ элемент этого Кара - куб.
Задача: получить доступ к скрипту cs из скрипта js для взаимодействия по переменным.

я изо всех сил осознаю, что это задачка для второго дня изучения юньки!! :((
но из js скрипта просто убился получать скрипт с пустого объекта! sad

делал:
(код на js)
Куб.GetComponent(Car)
Куб.GetComponent("Car")
Куб.GetComponent<Car>() -- вообще не принимает такую конструкцию... тоже в шоке

куб.transform.parent.GetComponent(Car) + 2 вариации
куб.transform.parent.gameObject.GetComponent(Car) + 2 вариации

делал var c : Car = GameObject.FindObjectOfType(Car) as Car; + 2 вариации
делал var c : Car[] = GameObject.FindObjectsOfType(Car) as Car[]; + 2 вариации

результат = NULL во всех вариантах! (((((((((((((

уже не знаю че курить... куда копать... ведь сам скрипт Car.js отрабатывает идеально то, что должен. и я его вижу в проекте. почему не видит юнька!?!?!? :((


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
ЛевшаДата: Воскресенье, 16 Июня 2013, 20:35 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Cначала получаешь ссылку на родителя, потом на дочерний обьект, потом на его компонент.
Или можно найти сразу тот самый конечный обьект по имени и перейти к его компоненту (скрипту).
А вот общение меж собой скриптов написанных на разных языках - это отдельная история и не стоит в 1 вопросе все в кучу мешать...


X.cor.R (Prologue)
AlastarДата: Воскресенье, 16 Июня 2013, 20:43 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Car на C#, Manager на JS. Скрипт car в папке plugins лежит?
Код
var cube = GameObject.Find("Твой объект");
var carScript = cube.GetComponent("Car");
carScript.doSomething();

Аналогично с кубиком
Код
var cube = GameObject.Find("Твой объект");
var cubeForm = cube.GetConponent(Cube);
cubeForm.что-то еще


Big Boobs (+18 only!)

Сообщение отредактировал Alastar - Воскресенье, 16 Июня 2013, 20:44
KamiRoninДата: Воскресенье, 16 Июня 2013, 20:58 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата (Левша)
Cначала получаешь ссылку на родителя, потом на дочерний обьект, потом на его компонент.
Или можно найти сразу тот самый конечный обьект по имени и перейти к его компоненту (скрипту).

я уже писал это в описании задачи.
(куб.transform.parent.GetComponent(Car) + 2 вариации
куб.transform.parent.gameObject.GetComponent(Car) + 2 вариации )
рез null

Цитата (Alastar)
Car на C#, Manager на JS. Скрипт car в папке plugins лежит?

нет, в папке созданной мной - scripts, оба.
Цитата (Alastar)
var cube = GameObject.Find("Твой объект"); 
var carScript = cube.GetComponent("Car");

у меня просто есть прямая ссылка на кубик из OnTriggerEnter'a sad я и не думал его повторно искать.. но чем черт не шутит.. попробую.. хотя ммм.. имея прямую ссылку эт конечно делать странно!!
еще раз - если я пишу переменную типа Car - юнька пропускает это. я не могу получить конкретный ЭКЗЕМПЛЯР Car'а из конкретного пустого объекта... никакими способами...

сейчас сяду и перепишу Менеджер на c# посмотрим как пойдет .. но это полная .опа!!!! если так оно заработает! :(((
это будет значить, что юнька не умеет корректно работать из js с c# скриптами! sad
хотя у меня предчувствие - что где то уже показали как решать...

кто знает - дайте ориентировку плиз!

З.Ы. в двух строчках от моих безуспешных попыток получить cs с пустого объекта, я в одну команду успешно получаю js компонент с другого объекта (из Менеджер.js)!! так что ... делайте выводы.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Воскресенье, 16 Июня 2013, 21:00
AlastarДата: Воскресенье, 16 Июня 2013, 21:09 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Цитата
нет, в папке созданной мной - scripts, оба.

Ошибки пишет? Если Null reference, то закинь C# скрипт в Plugins. А так, ничем помочь не могу.


Big Boobs (+18 only!)
KamiRoninДата: Воскресенье, 16 Июня 2013, 21:15 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Цитата (Alastar)
Ошибки пишет? Если Null reference,


нет, ошибки не пишет. просто не может получить прикрепленный скрипт из ссылки на содержащий его объект (т.е. результа GetComponent = null).


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
seamanДата: Воскресенье, 16 Июня 2013, 21:15 | Сообщение # 7
старожил
Сейчас нет на сайте
Код
void OnTriggerEnter (Collider other)
{
     Transform parent = other.transform.parent;
     Car с = parent.gameObject.GetComponent<Car>();
}

Если все С#.
Если все же нужно на разных языках - тот скрипт который нужно увидеть из другого скрипта кладем в папку Plugins. Однако, имхо - все это лажа. Советую писать на одном языке и не мучаться.


Сообщение отредактировал seaman - Воскресенье, 16 Июня 2013, 21:18
KamiRoninДата: Воскресенье, 16 Июня 2013, 21:31 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Цитата (seaman)
На С#. Советую писать на одном языке и не мучаться.

я б с удовольствием.. но были обстоятельства. и написаный тобой код я описал вначале - не пашет. спасибо за участие.

Добавлено (16.06.2013, 21:31)
---------------------------------------------

Цитата (Alastar)
то закинь C# скрипт в Plugins. А так, ничем помочь не могу.

Цитата (seaman)
тот скрипт который нужно увидеть из другого скрипта кладем в папку Plugins.

этому есть разумное объяснение
(взято тут)


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
seamanДата: Воскресенье, 16 Июня 2013, 22:10 | Сообщение # 9
старожил
Сейчас нет на сайте
Я видел, что написано. И если скрипт Car.cs положить в Plugins все должно работать. Во всяком случае у всех остальных работает. Если у Вас не работает - значит что-то еще не так. Что - Вам виднее. Можете выложить минипроект, чтобы посмотрели другие. Может увидим в чем дело.
KamiRoninДата: Понедельник, 17 Июня 2013, 23:49 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
ВСЕМ СПАСИБО!

задача РЕШЕНА

решение: 1. перенести в папку plugins скрипт Менеджера. 2. и естественно - доступ к паренту бокса и оттуда GetComponent(ИмяСкрипта)

советы на горьком опыте для тех кто наступит на те же грабли:
- старайтесь писать все на одно языке.
- если делаете скрипт на C# - то имя файла и класса должны писаться в одинаковом регистре! (юнька почти ничего не показывает при этом, но запускать не дает).
- упрощайте схемы взаимодействия скриптов прямыми связками, где только возможно - в менеджере например завести публик переменную и туда ручками кинуть ссылку на скрипт (совет годится для 10% случаев - в остальных так делать не нужно! smile )
- можно использовать для связи скриптов глобальные переменные с типом Type - в котором можно сохранить скрипт (получится буфер посредник).
- если пытаетесь разложить скрипты по папкам - то javascript должен находиться в папке с самым НИЗКИМ приоритетом компиляции (при условии что НА него не ссылаются прочие скрипты).


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Вторник, 18 Июня 2013, 00:41
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как получить компонент прикрепленный к пустому объекту? (убил кучу времени.. не работает ни один алгоритм :()
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг