Как получить компонент прикрепленный к пустому объекту?
|
|
KamiRonin | Дата: Воскресенье, 16 Июня 2013, 20:19 | Сообщение # 1 |
почти ветеран
Сейчас нет на сайте
| Доброго времени суток всем!
Ситуация: 1. В пустую сцену добавляю пустой объект. 2. Вешаю на него скрипт - ну допустим называется "Car" (написан на с#); и вкладываю туда же куб с регидбоди. 3. Втыкаю второй пустой объект в сцену - эт у меня GameMenager, в него засовываю скрипт на js. 4. Происходит событие (куб из Car'a врезался в стену), в результате которого GameMenager должен изменить параметры в Car имея ДОЧЕРНИЙ элемент этого Кара - куб. Задача: получить доступ к скрипту cs из скрипта js для взаимодействия по переменным.
я изо всех сил осознаю, что это задачка для второго дня изучения юньки!! :(( но из js скрипта просто убился получать скрипт с пустого объекта!
делал: (код на 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 я и не думал его повторно искать.. но чем черт не шутит.. попробую.. хотя ммм.. имея прямую ссылку эт конечно делать странно!! еще раз - если я пишу переменную типа Car - юнька пропускает это. я не могу получить конкретный ЭКЗЕМПЛЯР Car'а из конкретного пустого объекта... никакими способами...
сейчас сяду и перепишу Менеджер на c# посмотрим как пойдет .. но это полная .опа!!!! если так оно заработает! :((( это будет значить, что юнька не умеет корректно работать из js с c# скриптами! хотя у меня предчувствие - что где то уже показали как решать...
кто знает - дайте ориентировку плиз!
З.Ы. в двух строчках от моих безуспешных попыток получить 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% случаев - в остальных так делать не нужно! ) - можно использовать для связи скриптов глобальные переменные с типом Type - в котором можно сохранить скрипт (получится буфер посредник). - если пытаетесь разложить скрипты по папкам - то javascript должен находиться в папке с самым НИЗКИМ приоритетом компиляции (при условии что НА него не ссылаются прочие скрипты).
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Вторник, 18 Июня 2013, 00:41 |
|
| |