Требуется помощь со скриптом.
| |
Black_Racer | Дата: Воскресенье, 29 Мая 2011, 21:18 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Ребят, какой командой дописать в данном скрипте радиус ограничения отдаления камеры, и еще вопрос необходимо чтобы этот скрипт активировался только при нажатии на определенный объект (тоесть чтобы камера вращалась только с зажатой кнопкой мыши на автомобиле)?
Code Quaternion CameraOrientation; Vector3 CharacterLocation,CameraLocation; int Heightoffset; float Radius,lastMouseZ;
void Main() {
if (iInitializing()) { Heightoffset=0; iMouseLookSet(24,157); iObjectLocation(OBJ_22,CharacterLocation); Radius=4; }
if(Radius>=3.2){ if(iMouseZ(false)>lastMouseZ)Radius-=0.5;} if(iMouseZ(false)<lastMouseZ)Radius+=0.5; lastMouseZ=iMouseZ(false);
iObjectLocation(OBJ_22,CharacterLocation); iMouseLookYRangeSet(80,-0); CameraLocation.x=CharacterLocation.x+Radius*iFloatSin(-iMouseLookY())*iFloatSin(90-iMouseLookX()); CameraLocation.y=CharacterLocation.y+Heightoffset+Radius*iFloatCos(90-iMouseLookX()); CameraLocation.z=CharacterLocation.z+Radius*-iFloatCos(iMouseLookY())*iFloatSin(90-iMouseLookX()); iObjectLocationSet(OBJ_0,CameraLocation); iQuaternionFromEulerAngles(CameraOrientation,iMouseLookX(),iMouseLookY(),0,"xyz"); iObjectOrientationSet(OBJ_0,CameraOrientation);
}
|
|
| |
CaptainHunt | Дата: Воскресенье, 29 Мая 2011, 22:33 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| Вообще-то трудно понять, что это за проект. Но, если я правильно понял, то нужно менять переменную Radius. Попробуй перед строкой поставить:
if(Radius>=10) Radius=10;// 10 - ограничение; поставь вместо 10-ти ограничение, которое нужно тебе.
Второе тоже сделать нетрудно; если никто не ответит, я отвечу позже.
WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться
Сообщение отредактировал Alek - Воскресенье, 29 Мая 2011, 22:36 |
|
| |
Black_Racer | Дата: Понедельник, 30 Мая 2011, 17:11 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Alek Спасибо большое Помогло! Теперь осталось решить вопрос с захватом вращаемого объекта.
|
|
| |
CaptainHunt | Дата: Понедельник, 30 Мая 2011, 21:08 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Пожалуйста, Black_Racer. Quote Теперь осталось решить вопрос с захватом вращаемого объекта. У тебя автомобиль - RigidBody или RigidBody + SkinMesh ?
WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться
|
|
| |
Black_Racer | Дата: Вторник, 31 Мая 2011, 10:47 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Alek автомобиль, RigidBody + SkinMesh
Сообщение отредактировал Black_Racer - Вторник, 31 Мая 2011, 10:47 |
|
| |
CaptainHunt | Дата: Четверг, 02 Июня 2011, 09:03 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| Посмотри стандартный проект MouseOverSkinMesh.3dr Если не разберёшься, я помогу.
WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться
|
|
| |
Black_Racer | Дата: Воскресенье, 19 Июня 2011, 12:19 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Alek
Я все еще не решил эту проблему
|
|
| |
roman453848 | Дата: Воскресенье, 19 Июня 2011, 19:59 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| и еще вопрос необходимо чтобы этот скрипт активировался только при нажатии на определенный объект (тоесть чтобы камера вращалась только с зажатой кнопкой мыши на автомобиле)? чо сложного то добавляешь обьект кнопку соеденяешь со скриптом ставь условие if(IN_номер кнопки >0) { if (iInitializing()) { Heightoffset=0; iMouseLookSet(24,157); iObjectLocation(OBJ_22,CharacterLocation); Radius=4; }
if(Radius>=3.2){ if(iMouseZ(false)>lastMouseZ)Radius-=0.5;} if(iMouseZ(false)<lastMouseZ)Radius+=0.5; lastMouseZ=iMouseZ(false);
iObjectLocation(OBJ_22,CharacterLocation); iMouseLookYRangeSet(80,-0); CameraLocation.x=CharacterLocation.x+Radius*iFloatSin(-iMouseLookY())*iFloatSin(90-iMouseLookX()); CameraLocation.y=CharacterLocation.y+Heightoffset+Radius*iFloatCos(90-iMouseLookX()); CameraLocation.z=CharacterLocation.z+Radius*-iFloatCos(iMouseLookY())*iFloatSin(90-iMouseLookX()); iObjectLocationSet(OBJ_0,CameraLocation); iQuaternionFromEulerAngles(CameraOrientation,iMouseLookX(),iMouseLookY(),0,"xyz"); iObjectOrientationSet(OBJ_0,CameraOrientation); } }
Самой кратой чубак
|
|
| |
CaptainHunt | Дата: Вторник, 21 Июня 2011, 16:21 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Black_Racer, если решение roman453848 не подойдёт (я его не проверял на работоспособность), то позже напишу. Извиняюсь, что пообещал, но медлю.
Итак, давай уточним:
У тебя есть скрипт, который должен активироваться, когда мышь наводишь (и зажимаешь кнопкой) на машину. Правильно я понял ?
Добавлено (21.06.2011, 16:21) --------------------------------------------- Black_Racer, я сделал демку.
Скачать здесь Некоторые пояснения: - у объекта SkinMesh машины должна быть галочка на свойстве 'detect mouse-over event'; - в демке 2 скрипта: один - твой (для вращения), другой для активации 1-го скрипта; - во 2-м скрипте (который активирует 1-ый) у свойства 'Working at start' не должно быть галочки; - iMouseButtonDown(0) - для левой кнопки мышки, (1) для правой и (2) для средней; - в этой демке скрипт для вращения - под номером 44 - (OBJ_44), ты поставь номер, под которым он у тебя (это ты, наверное, знаешь); также и у других объектов - поменяй номера, если отличаются от номеров в твоём проекте.
Код доплнительного скрипта (который нужен для активации скрипта вращения):
Code void Main() { if(iMouseButtonDown(0) && IN_25>0) iObjectStart(OBJ_44); // задаём 2 условия: 1) (iMouseButtonDown(0)) - нажата ли левая кнопка мыши // 2) (IN_25>0) - находится ли курсор мыши над SkinMesh // если оба условия выполняются, то iObjectStart(OBJ_44) - активируем // скрипт для вращения камеры else // если оба условия не выполняются iObjectStop(OBJ_44);// остановить работу скрипта для вращения камеры }
WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться
Сообщение отредактировал Alek - Вторник, 21 Июня 2011, 16:44 |
|
| |
roman453848 | Дата: Вторник, 21 Июня 2011, 20:56 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| зачем 2 скрипта? можно все в 1 Quaternion CameraOrientation; Vector3 CharacterLocation,CameraLocation; int Heightoffset; float Radius,lastMouseZ;
void Main() {
if(iMouseButtonDown(0) && IN_25>0) { if (iInitializing()) { Heightoffset=0; iMouseLookSet(24,157); iObjectLocation(OBJ_22,CharacterLocation); Radius=4; }
if(Radius>=3.2){ if(iMouseZ(false)>lastMouseZ)Radius-=0.5;} if(iMouseZ(false)<lastMouseZ)Radius+=0.5; lastMouseZ=iMouseZ(false);
iObjectLocation(OBJ_22,CharacterLocation); iMouseLookYRangeSet(80,-0); CameraLocation.x=CharacterLocation.x+Radius*iFloatSin(-iMouseLookY())*iFloatSin(90-iMouseLookX()); CameraLocation.y=CharacterLocation.y+Heightoffset+Radius*iFloatCos(90-iMouseLookX()); CameraLocation.z=CharacterLocation.z+Radius*-iFloatCos(iMouseLookY())*iFloatSin(90-iMouseLookX()); iObjectLocationSet(OBJ_0,CameraLocation); iQuaternionFromEulerAngles(CameraOrientation,iMouseLookX(),iMouseLookY(),0,"xyz"); iObjectOrientationSet(OBJ_0,CameraOrientation); } } вот получится тоже самое токо меньше писанины
Самой кратой чубак
Сообщение отредактировал roman453848 - Вторник, 21 Июня 2011, 20:58 |
|
| |
Black_Racer | Дата: Среда, 22 Июня 2011, 13:30 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| Спасибо большое ребята, но всеже скрипт работает не так как надо, еще хотелось бы чтобы была инерция у камеры, камера должна врощатся как в Undeground, и рывки очень раздражают.
Скрин с моего проекта:
Меню игрушки. именно там должна вращаться камера вокруг авто!
Сообщение отредактировал Black_Racer - Среда, 22 Июня 2011, 13:31 |
|
| |
roman453848 | Дата: Среда, 22 Июня 2011, 14:50 | Сообщение # 12 |
частый гость
Сейчас нет на сайте
| Quaternion CameraOrientation; Vector3 CharacterLocation,CameraLocation; int Heightoffset; float Radius,lastMouseZ; bool menu = false; void Main() { if(iMouseButtonDown(0) && IN_25>0) if(menu == true) // а вот как menu станет true подумай сам =) поставь условие что когда включено меню тоесть например нажал на кнопку меню включилось то menu = true; { if (iInitializing()) { Heightoffset=0; iMouseLookSet(24,157); iObjectLocation(OBJ_22,CharacterLocation); Radius=4; }
if(Radius>=3.2){ if(iMouseZ(false)>lastMouseZ)Radius-=0.5;} if(iMouseZ(false)<lastMouseZ)Radius+=0.5; lastMouseZ=iMouseZ(false);
iObjectLocation(OBJ_22,CharacterLocation); iMouseLookYRangeSet(80,-0); CameraLocation.x=CharacterLocation.x+Radius*iFloatSin(-iMouseLookY())*iFloatSin(90-iMouseLookX()); CameraLocation.y=CharacterLocation.y+Heightoffset+Radius*iFloatCos(90-iMouseLookX()); CameraLocation.z=CharacterLocation.z+Radius*-iFloatCos(iMouseLookY())*iFloatSin(90-iMouseLookX()); iObjectLocationSet(OBJ_0,CameraLocation); iQuaternionFromEulerAngles(CameraOrientation,iMouseLookX(),iMouseLookY(),0,"xyz"); iObjectOrientationSet(OBJ_0,CameraOrientation); }
}Добавлено (22.06.2011, 14:46) --------------------------------------------- еще хотелось бы чтобы была инерция у камеры, камера должна врощатся как в Undeground я не играл это типо зажимаешь кнопку поворачиваешь а когда отпускаешь то камера еще некоторое время поворачивает? Добавлено (22.06.2011, 14:50) --------------------------------------------- вообще обьясни как у тебя включается гонка ?
Самой кратой чубак
|
|
| |
Black_Racer | Дата: Среда, 22 Июня 2011, 15:37 | Сообщение # 13 |
частый гость
Сейчас нет на сайте
| Quote еще хотелось бы чтобы была инерция у камеры, камера должна врощатся как в Undeground я не играл это типо зажимаешь кнопку поворачиваешь а когда отпускаешь то камера еще некоторое время поворачивает? да она не останавливается моментом, имеет небольшую инерцию вращения.
Добавлено (22.06.2011, 14:50)
Quote вообще обьясни как у тебя включается гонка ?
обычная навигация по меню. (кнопок меню нет на скрине)
при активации скрипта пишет Error IN_25 is not declarated (где я не поставил связь?)
Сообщение отредактировал Black_Racer - Среда, 22 Июня 2011, 15:40 |
|
| |
roman453848 | Дата: Среда, 22 Июня 2011, 15:55 | Сообщение # 14 |
частый гость
Сейчас нет на сайте
| IN 25 это Detect mouse-over element соедени соедени со скимешом машины если тебе надо чтобы камера вращалась независимо от намедения мышки на машину убери в скрипте && IN_25>0 в условии Добавлено (22.06.2011, 15:51) --------------------------------------------- а все понял значит так у тя есть кнопка старта игры да? соединяешь спрайт кнопки со скриптом потом при нажатии на кнопку старта menu = false; при заканчивании гонки menu = true; Добавлено (22.06.2011, 15:55) --------------------------------------------- если тебе непонятно обьясни как у тебя работает меню я те конкретнее обьясню
Самой кратой чубак
|
|
| |
CaptainHunt | Дата: Среда, 22 Июня 2011, 20:11 | Сообщение # 15 |
был не раз
Сейчас нет на сайте
| Quote всеже скрипт работает не так как надо, еще хотелось бы чтобы была инерция у камеры, камера должна врощатся как в Undeground, и рывки очень раздражают.
Это уже другой вопрос. Нужно модифицировать скрипт для вращения.
WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться
|
|
| |
roman453848 | Дата: Среда, 22 Июня 2011, 21:03 | Сообщение # 16 |
частый гость
Сейчас нет на сайте
| сложновато просто если ненажата кнопка скрипт непашет а енерция запускается при отпускании кнопки а она работает токо когда скрипт рабоатет
Самой кратой чубак
|
|
| |
Black_Racer | Дата: Пятница, 24 Июня 2011, 10:27 | Сообщение # 17 |
частый гость
Сейчас нет на сайте
| ну вот нужно каким нибудь образом реализовать это, все встало на данном этапе.
Сообщение отредактировал Black_Racer - Пятница, 24 Июня 2011, 10:28 |
|
| |
SEFA1370 | Дата: Пятница, 24 Июня 2011, 10:55 | Сообщение # 18 |
Аццкий юзер UDK
Сейчас нет на сайте
| Если кто знает как, то можно просто останавливать действие скрипта не сразу после отпускания кнопки, а после 1 секунды*) Наверно...
|
|
| |
Nasa13 | Дата: Пятница, 24 Июня 2011, 15:36 | Сообщение # 19 |
заслуженный участник
Сейчас нет на сайте
| http://3drad-alec.ucoz.com/forum/5-226-1 Вот, посмотри, решил тоже сделать, там рывков мало)))может быть , скоро сделаю инерцию
все люди одинаково полезны,говорил людоед туристам.
Мешает грудь? Спячь под "СПОЙЛЕР.*)
моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1
|
|
| |
|