Поднять предмет 3d rad
| |
gmmmm | Дата: Суббота, 12 Мая 2012, 19:14 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Вообщем создаю игру, сегодня столкнулся с трудностью... Есть Cam1STPerson, некий объект. Необходимо реализовать следующее: если камера подошла к объекту и нажат пробел, то происходит некое действие, к примеру объект переходит в инвентарь. Думаю реализовывать нужно с помощью скриптов? Или еще как... короче нужна помощь. Для наглядности скрин прилагается.
пусто!)
Сообщение отредактировал gmmmm - Суббота, 12 Мая 2012, 19:16 |
|
| |
wing13 | Дата: Суббота, 12 Мая 2012, 21:01 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Да надо написать сканер, правда там надо будет чтоб игрок смотрел на предмет:
Code Vector3 scanDirection;float scanLength; Vector3 contactPoint;Vector3 contactNormal;Vector3 PlayerL;Quaternion PlayerO;
void Main() { scanLength= 5; //Длинна сканера в метрах iObjectOrientation(OBJ_X,PlayerO);iObjectLocation(OBJ_X,PlayerL); //OBJ_X - игрок. iVectorRotate(scanDirection,Vector3(0,0,scanLength),PlayerO);
if (iKeyDown(iKeyCode("DIK_SPACE")) && iObjectScan(OBJ_X,PlayerL,scanDirection,0.5,contactPoint,contactNormal)) //OBJ_X - объект, который надо поднять {iObjectHide(OBJ_X); } //А тут внутри скобок надо написать то, что произойдет, когда предмет будет поднят, этот код например просто спрячет OBJ_X - сам объект
}
Я вконтакте
Сообщение отредактировал wing13 - Суббота, 12 Мая 2012, 21:10 |
|
| |
gmmmm | Дата: Воскресенье, 13 Мая 2012, 06:17 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Так.. то есть необходимо привязать камеру и right body к скрипту, и написать вот так: Code Vector3 scanDirection;float scanLength; Vector3 contactPoint;Vector3 contactNormal;Vector3 PlayerL;Quaternion PlayerO;
void Main() { scanLength= 20; //Длинна сканера в метрах iObjectOrientation(OBJ_0,PlayerO);iObjectLocation(OBJ_0,PlayerL); //OBJ_X - игрок. iVectorRotate(scanDirection,Vector3(0,0,scanLength),PlayerO);
if (iKeyDown(iKeyCode("DIK_SPACE")) && iObjectScan(OBJ_22,PlayerL,scanDirection,0.5,contactPoint,contactNormal)) //OBJ_X - объект, который надо поднять {iObjectHide(OBJ_22); } //А тут внутри скобок надо написать то, что произойдет, когда предмет будет поднят, этот код например просто спрячет OBJ_X - сам объект
} Но когда подхожу к ящикам и жму пробел - ничего не происходит. Скрин показываю.
пусто!)
Сообщение отредактировал gmmmm - Воскресенье, 13 Мая 2012, 06:18 |
|
| |
Nasa13 | Дата: Воскресенье, 13 Мая 2012, 13:26 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Code /// Как определять расстояние между 2-мя объектами /// Сделано Alec-ом 19 апреля 2011. http://3drad-alec.ucoz.com/ void Main() { Vector3 cameraLocation;// объявить переменную для местоположения камеры Vector3 meshLocation;// объявить переменную для местоположения СкинМеша (рыбки) float distance;// объявить переменную для расстояния iObjectLocation(OBJ_0,cameraLocation);// определить местоположение камеры iObjectLocation(OBJ_3,meshLocation);// определить местоположение СкинМеша (рыбки) distance = iVectorLength(meshLocation - cameraLocation); // получить расстояние // между этими 2-мя объектами if(distance <5 && iMouseButtonClick(0)) { iObjectHide(OBJ_XX);//объект, который лежит в поле зрения,он скроется, мы как бы его подобрали } } Это примитивный пример
У меня есть полностью пример инвентаря, там можно брать предмет, выкидывать, одевать/снимать...Все предметы независимы друг от друга, и поэтому ты не путаешься в количестве связей..
Скоро выложу видео, правда он платный*)
все люди одинаково полезны,говорил людоед туристам.
Мешает грудь? Спячь под "СПОЙЛЕР.*)
моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1
|
|
| |
wing13 | Дата: Воскресенье, 13 Мая 2012, 15:31 | Сообщение # 5 |
участник
Сейчас нет на сайте
| gmmmm а ошибок не выдает на чек скрипт? {iObjectHide(OBJ_22); } вот этом моменте нужно прописать Скинмеш, ридгидбоди то итак скрыт же) Ну и этот код подразумевает, что игрок смотрит на предмет то есть предмет в центре экрана.
Кстати деревья эти стандартные дочерта ресурсов жрут, если тормозить начнет, их в первую очередь надо заменить.
Я вконтакте
Сообщение отредактировал wing13 - Воскресенье, 13 Мая 2012, 15:36 |
|
| |
gmmmm | Дата: Воскресенье, 13 Мая 2012, 17:37 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| wing13, сделал предмет по координатам 0,0. Code Vector3 scanDirection;float scanLength; Vector3 contactPoint;Vector3 contactNormal;Vector3 PlayerL;Quaternion PlayerO;
void Main() { scanLength= 10; //Длинна сканера в метрах iObjectOrientation(OBJ_0,PlayerO);iObjectLocation(OBJ_0,PlayerL); //OBJ_X - игрок. iVectorRotate(scanDirection,Vector3(0,0,scanLength),PlayerO);
if (iKeyDown(iKeyCode("DIK_SPACE")) && iObjectScan(OBJ_22,PlayerL,scanDirection,0.5,contactPoint,contactNormal)) //OBJ_X - объект, который надо поднять {iObjectHide(OBJ_88); } //А тут внутри скобок надо написать то, что произойдет, когда предмет будет поднят, этот код например просто спрячет OBJ_X - сам объект
} сделал в {iObjectHide(OBJ_88); } _88 - скинмеш. Но как-то не работает. То есть подхожу и жму пробел. Ящики как были, так и стоят себе.
пусто!)
Сообщение отредактировал gmmmm - Воскресенье, 13 Мая 2012, 17:43 |
|
| |
wing13 | Дата: Воскресенье, 13 Мая 2012, 18:08 | Сообщение # 7 |
участник
Сейчас нет на сайте
| gmmmm хм, построил сейчас у себя такую сцену с этим кодом, все работает... ну наверное дело в том, что сканер при нажатии пробела ищет объект, который находится по проекции от центра экрана, можно в этом куске кода iObjectScan(OBJ_22,PlayerL,scanDirection,0.5,contactPoint,contactNormal) увиличить число, выделенное жирным, оно отвечает насколько "толстой" будет линия проекции. Например число 10 покрывает почти всю зону видимости.
Я вконтакте
Сообщение отредактировал wing13 - Воскресенье, 13 Мая 2012, 18:09 |
|
| |
gmmmm | Дата: Воскресенье, 13 Мая 2012, 18:24 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| Может я чего-то простого не понимаю? Еще раз есть скинмеш, ригхтбади, камера и другое. Эти три объекта взаимосвязаны...со скриптом. Я подхожу к ящикам и наклоняю камеру к полу...жму SPACE. По идее должен исчезнуть ящик...но нет же.
Если не трудно, посмотри, отпишись получилось или нет... http://zalil.ru/33228897 Скажу в 3d rad второй день, но с программированием знаком 1 год.
пусто!)
|
|
| |
wing13 | Дата: Воскресенье, 13 Мая 2012, 19:34 | Сообщение # 9 |
участник
Сейчас нет на сайте
| Залей всю папку 3DRad_res, с этим проектом, а то вылетает с ошибкой, у меняж нет этих объектов.
Я вконтакте
Сообщение отредактировал wing13 - Воскресенье, 13 Мая 2012, 19:37 |
|
| |
gmmmm | Дата: Воскресенье, 13 Мая 2012, 19:58 | Сообщение # 10 |
почетный гость
Сейчас нет на сайте
| Хорошо. Залил полную папку и проект. 97mb. Огромное спасибо за все! файл!!!
пусто!)
|
|
| |
wing13 | Дата: Воскресенье, 13 Мая 2012, 20:46 | Сообщение # 11 |
участник
Сейчас нет на сайте
| gmmmm ошибка в том, что у тебя со скриптом соединен скинмеш оленя, а не ящиков На самом деле лучше подписывать объекты, что бы не путать... Держи поправленный проект: http://narod.ru/disk/49067131001.ce4ad20d5658d354faa3c27ffef71edb/%D0%B8%D0%B3%D1%80%D0%B0.3dr.html
Обращайсо.
Я вконтакте
Сообщение отредактировал wing13 - Воскресенье, 13 Мая 2012, 20:47 |
|
| |
gmmmm | Дата: Понедельник, 14 Мая 2012, 06:16 | Сообщение # 12 |
почетный гость
Сейчас нет на сайте
| ааааа...спс=) опробую завтра, сейчас иду спать!
-- Работает!
Добавлено (14.05.2012, 06:16) --------------------------------------------- Итак, возник следующий вопрос. Решил сделать спрайт инвентаря по клику ENTER скрыть/показать. Вот допилил код, но по нажатию enter не работает
Vector3 scanDirection;float scanLength; Vector3 contactPoint;Vector3 contactNormal;Vector3 PlayerL;Quaternion PlayerO; int inv1;
void Main() { scanLength= 10; //Длинна сканера в метрах iObjectOrientation(OBJ_0,PlayerO);iObjectLocation(OBJ_0,PlayerL); //OBJ_X - игрок. iVectorRotate(scanDirection,Vector3(0,0,scanLength),PlayerO);
if (iKeyDown(iKeyCode("DIK_SPACE")) && iObjectScan(OBJ_22,PlayerL,scanDirection,5,contactPoint,contactNormal)) //OBJ_X - объект, который надо поднять {iObjectHide(OBJ_110); inv1 = 1; } //А тут внутри скобок надо написать то, что произойдет, когда предмет будет поднят, этот код например просто спрячет OBJ_X - сам объект
if (iKeyDown(iKeyCode("DIK_RETURN"))) { if (IN_132 == 1) { iObjectHide(OBJ_132); } else { iObjectShow(OBJ_132); }
} }
пусто!)
Сообщение отредактировал gmmmm - Понедельник, 14 Мая 2012, 06:16 |
|
| |
wing13 | Дата: Понедельник, 14 Мая 2012, 17:03 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Пиши DIK_ENTER вместо DIK_RETURN
Я вконтакте
|
|
| |
|