cast instaniate и c# (Решено)

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

cast instaniate и c# (Решено)

Сообщение Grin 20 июл 2010, 23:22

Инстанцирую объект
Синтаксис:
Используется csharp
Object missileInst = Instantiate(missile, transform.position, new Quaternion(0,0,0,0));
 

и хочу установить ему скорость
Синтаксис:
Используется csharp
Rigidbody missileRBody = (Rigidbody)missileInst;
missileRBody.velocity = new Vector3(0,0,missileSpeed);
 

Но получаю ошибку InvalidCastException: Cannot cast from source type to destination type.
Понимаю, что неправильно привожу тип, но как сделать правильно?
Последний раз редактировалось Grin 27 июл 2010, 23:22, всего редактировалось 1 раз.
Grin
UNец
 
Сообщения: 34
Зарегистрирован: 12 июл 2010, 04:45
Откуда: Россия, г. Челябинск
  • ICQ

Re: cast instaniate и c#

Сообщение DbIMok 20 июл 2010, 23:43

http://unity3d.com/support/documentatio ... efabs.html
missileInst наверное должен иметь тип инстанцируемого объекта (Rigidbody?):
Rigidbody missileInst = Instantiate(missile, transform.position, Quaternion.identity);
тогда не понадобится ошибочное преобразование
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: cast instaniate и c#

Сообщение Zaicheg 21 июл 2010, 07:54

Как-то мне помнится, что даже
Rigidbody missileInst = Instantiate(missile, transform.position, Quaternion.identity) as Rigidbody;
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: cast instaniate и c#

Сообщение Grin 21 июл 2010, 12:50

DbIMok писал(а):Rigidbody missileInst

Получаю ошибку: Cannot implicitly convert type `UnityEngine.Object' to `UnityEngine.Rigidbody'. An explicit conversion exists(are you missing a cast?).

Zaicheg писал(а):Rigidbody missileInst = Instantiate(missile, transform.position, Quaternion.identity) as Rigidbody;

Тогда missileInst равно null.
Grin
UNец
 
Сообщения: 34
Зарегистрирован: 12 июл 2010, 04:45
Откуда: Россия, г. Челябинск
  • ICQ

Re: cast instaniate и c#

Сообщение Zaicheg 21 июл 2010, 13:12

Сделайте так:

Код: Выделить всё
GameObject missile;
GameObject missileInst = Instantiate(missile, transform.position, new  Quaternion(0,0,0,0)) as GameObject;
Rigidbody missileRBody = missileInst.GetComponent<Rigidbody>();
missileRBody.velocity = new Vector3(0,0,missileSpeed);
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: cast instaniate и c#

Сообщение Mr_Anderson 21 июл 2010, 13:12

missile и missileInst должны быть типа Rigidbody + обычный каст как указывалось выше. У Вас случаем missile не null ???
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: cast instaniate и c#

Сообщение Grin 21 июл 2010, 14:40

missile сфера с Rigidbody.
Zaicheg писал(а):Сделайте так:

Код: Выделить всё
GameObject missile;
GameObject missileInst = Instantiate(missile, transform.position, new Quaternion(0,0,0,0)) as GameObject;
Rigidbody missileRBody = missileInst.GetComponent<Rigidbody>();
missileRBody.velocity = new Vector3(0,0,missileSpeed);

Вот хотел бы пару вопросов задать:
1. Почему missile GameObject (в документации должен быть Object)?
2. Почему missileInst GameObject в документации опять же там Object(хотя тут вроде чтобы GetComponent работал)?
3. Ну GetComponent почему используется в принципе понятно, ни GameObject, ни Object не приводится к компонентам?
Grin
UNец
 
Сообщения: 34
Зарегистрирован: 12 июл 2010, 04:45
Откуда: Россия, г. Челябинск
  • ICQ

Re: cast instaniate и c#

Сообщение RefractoR 27 июл 2010, 18:20

Возможно дублирую пост Zaicheg'a, но когда-то делал так и работало:
Синтаксис:
Используется csharp
GameObject building = (GameObject) Instantiate(currentBuilding);
 

т.е в данном случае попробуйте сделать так:
Синтаксис:
Используется csharp
GameObject missileInst = (GameObject) Instantiate(missile, transform.position, new Quaternion(0,0,0,0));
missileInst.rigidbody.velocity = new Vector3(0.0f, 0.0f, missileSpeed);
 
RefractoR
UNIт
 
Сообщения: 50
Зарегистрирован: 05 ноя 2009, 16:31
Откуда: Краснодар
  • ICQ

Re: cast instaniate и c#

Сообщение Grin 27 июл 2010, 23:22

Извините забыл дооформить тему. Задача решена в посте Zaicheg`а.
Всем спасибо.
Grin
UNец
 
Сообщения: 34
Зарегистрирован: 12 июл 2010, 04:45
Откуда: Россия, г. Челябинск
  • ICQ


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

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

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