Понедельник, 11 Ноября 2024, 07:49

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Поднять предмет 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 ошибка в том, что у тебя со скриптом соединен скинмеш оленя, а не ящиков smile
На самом деле лучше подписывать объекты, что бы не путать...
Держи поправленный проект:
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

Я вконтакте
  • Страница 1 из 1
  • 1
Поиск:

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