Страница 1 из 2

Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 11:57
Quasar
Вот осваиваю Ray. Fps.tutorial перечитал, форум по поиску слова Ray тоже. "Сварганил" кодик, который выдает ошибку)

Задача: Ray ищет обьект(ы) с тегом "blablabla" и при коллизии что то происходит.

Ошибка - "NullReferenceException: Object reference not set to an instance of an object
CameraZoom.Update () (at Assets/Script/CameraZoom.cs:23)"

Синтаксис:
Используется csharp
Ray ray = camera.ScreenPointToRay(new Vector3(Screen.width / 2,Screen.height / 2, 0));
Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);   

RaycastHit hit;
               
Vector3 fwd = transform.TransformDirection(Vector3.forward);
   if (Physics.Raycast(transform.position, fwd, 10) == true){
       if (hit.collider.gameObject.tag == "Player")
                                Destroy(gameObject);
                }

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 12:39
seaman
А Вы прочитали ошибку то, которую он Вам выдал? Там же ясно написано что в CameraZoom.Update () не указан какой-то объект, необходимый для работы того скрипта. Ну а какой объект - Вам видней, т.к. Вы привели совсем не нужный для решения проблемы код...

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 12:55
Quasar
Ок. Если не затруднит приведите пример строчки кода, которая описывает коллизию луча и обьекта. Не могу догнать :D

Приведу интересующую меня задачу: При коллизии луча и куба, куб уничтожался(Destroy).

Знаю, что это основы. Но буду благодарен, за этот маленький но, очень важный для моего понимания кусок кода)

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 13:23
seaman
Ну Вы же его привели. Если у Вас ошибка в другом скрипте, зачем этот мучать?

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 13:50
Quasar
Ошибка именно в этом коде)) В hit.collider

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 14:14
seaman
Вы писали:
Object reference not set to an instance of an object CameraZoom.Update () (at Assets/Script/CameraZoom.cs:23)"
Четко написано где ошибка. Приведите эту строку, пожалуйста...

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 14:19
Quasar
if (hit.collider.gameObject.tag == "Player")

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 14:22
seaman
Может на Вашем объекте нет тега?

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 14:27
Quasar
Да нет, на кубе установлен стандартный тег Player....

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 14:50
seaman
Ох, е...
Ну я и ступил.
А где Вы hit устанавливаете? Нужно
Синтаксис:
Используется csharp
if( Physics.Raycast(transform.position, fwd, hit, 10) == true)

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 14:57
Quasar
Нет, опять ошибка)) Use of unassigned local variable `hit' в этой строке

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 15:05
Quasar
Может пнете на реальный пример?? Я на форуме не нашел исходников данного типа

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 16:35
Zaicheg
Перенесено.

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 21 май 2011, 16:36
seaman
Синтаксис:
Используется csharp
Ray ray = camera.ScreenPointToRay(new Vector3(Screen.width / 2,Screen.height / 2, 0));
Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);  

RaycastHit hit = new RaycastHit();
               
Vector3 fwd = transform.TransformDirection(Vector3.forward);
   if (Physics.Raycast(transform.position, fwd, hit, 10) == true){
       if (hit.collider.gameObject.tag == "Player")
                                Destroy(gameObject);
                }

Re: Ох уж этот Ray. Замучался, нужна подсказка.

СообщениеДобавлено: 22 май 2011, 03:33
Quasar
Спасибо огромное за помошь! Все заработало!