Работающие скрипты для Unity, колекция.

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

Re: Работающие скрипты для Unity, колекция.

Сообщение Левш@ 25 ноя 2009, 22:09

а демо будет ?
вообще вы делаете какой то проект ? так а что в "Кузню" не отписываете ? всем было бы наверно интересно посмотреть ....

Разумеется делаем проект. По мотивам СТАЛКЕРа.
Все будет, не выкладываю пока потому что собственно нечего.
Пока работаем, как будут какието итоги, выложу.

И как ты всё-таки выдрал модельку рук/оружия с анимацией?

Эти технологии давно, еще с креатора отработаны.
Позже как освобожусь, если есть надобность могу уроки сделать по моделингу и конвертации медиа из игр.

А пока мои и не только уроки конвертации из сталкера до 3Дмакс можете посмотреть тут: http://fpscreatorworld.ucoz.ru/forum/41-65-1
Дальше не так сложно. ;;)
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Работающие скрипты для Unity, колекция.

Сообщение Zaicheg 25 ноя 2009, 22:48

Левш@ писал(а):А пока мои и не только уроки конвертации из сталкера до 3Дмакс можете посмотреть тут: http://fpscreatorworld.ucoz.ru/forum/41-65-1

Вот это уже интересно. Спасибо, посмотрю.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Работающие скрипты для Unity, колекция.

Сообщение Левш@ 25 ноя 2009, 23:13

А с помощью SDK можно вытащить и анимацию персонажей сталкера, но об этом позже, процесс достаточно сложный.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Работающие скрипты для Unity, колекция.

Сообщение Graveier 26 ноя 2009, 16:56

Есть ещё программа для "выдёргивания" 3D моделей из игры-3D Ripper DX называется.В Игромании по ней была статья,так именно на Сталкере её показывали(если правильно помниться).Поставили программе 9 из 10.
Аватара пользователя
Graveier
UNIт
 
Сообщения: 149
Зарегистрирован: 08 ноя 2009, 20:25

Re: Работающие скрипты для Unity, колекция.

Сообщение Левш@ 26 ноя 2009, 17:59

для "выдёргивания" 3D моделей из игры-3D Ripper DX называется.

Толку с нее... она голые меши тащит, без костей и анимации и те деформированные, в максе править приходится. :-w
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Работающие скрипты для Unity, колекция.

Сообщение ziat 27 ноя 2009, 14:36

Значит появилась идейка, (пока не доработанная и недоконца испытанная.) вечером возможно выложу скрипт.
Реализовать присед через изменение высоты Character Controlera(он же выполняет функции колайдера).
+этого метода в том что мы меняем высоту конкретного элемента а не маштабируем весь префаб.
-надо внести две строчки в скрипт камеры чтобы она отслеживала высоту контролера и соответсвенно меняла положение.
-пока не тестировал прозрение сошло позно вечером и делал на скорую руку
Уже найденые баги:
-в том скрипте который есть камера отслеживает нажатие клавиши. а не размер контролера как итог если ползти под препятствием и отпустить кнопку сидения камера(?надеюсь что не сам контролер?) прошибает препятствие
Возможный баг:
Возможно (ещё не тестировал) перпятствие которое выше персонажа пробивается контролером.


Баги проверю и поправлю, а заодно испытаю с "руками".
В случае успеха запостю отрывок кода тут.

Кста а как вешать действия на Ctrl скажем или на Shift? (чтобы привычней мне было управление))
ziat
UNITрон
 
Сообщения: 199
Зарегистрирован: 07 окт 2009, 21:28
  • Сайт

Re: Работающие скрипты для Unity, колекция.

Сообщение Zaicheg 27 ноя 2009, 17:03

ziat писал(а):+этого метода в том что мы меняем высоту конкретного элемента а не маштабируем весь префаб.

С обычным коллайдером тебе тоже масштабировать весь префаб не нужно. Масштабируй только коллайдер. По-моему, CC — это просто заранее настроенные "сферический коллайдер + ригидбоди", с парой плюшечек. Сам избегаю использовать его.

Кста а как вешать действия на Ctrl скажем или на Shift? (чтобы привычней мне было управление))

Input.GetKeyDown("left shift")
Input.GetKeyDown("left ctrl")
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Работающие скрипты для Unity, колекция.

Сообщение ziat 27 ноя 2009, 17:06

Я уже понял что маштабировать с колайдером тоже не нужно.
Просто в скрипте Левши маштабирование происходит всего префаба(насколько я понял) и поэтому требуется балансир для рук(чтобы их не плющило).

На счёт клавиш спс) я пытался написать просто Ctrl и просто Shift а оказывается юнити их два знает)
ziat
UNITрон
 
Сообщения: 199
Зарегистрирован: 07 окт 2009, 21:28
  • Сайт

Re: Работающие скрипты для Unity, колекция.

Сообщение Левш@ 29 ноя 2009, 11:06

Я уже понял что маштабировать с колайдером тоже не нужно.

Если коллайдер не массштабировать, тогда что получиться?
Ты укроешься за камушком, а в тебя все равно будут враги попадать, коллайдер то торчать будет... :-?
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Работающие скрипты для Unity, колекция.

Сообщение ziat 29 ноя 2009, 11:13

Можно напрямую обратиться к высоте колайдера а не маштабировать его.
Поскольку обращаемся к высоте а не маштабируем весь префаб и не получаем глюков с прикреплёному к префабу частями(как с руками)

Скрипт не ваыкладывал тк опасения подтвердились и когда мы под препятствием прошибаем головой препятствие, но почти исправил введя проверку есть ли над тобой препятствие или нет. Там ещё немного с ней повозится и выложу свой вариант.
ziat
UNITрон
 
Сообщения: 199
Зарегистрирован: 07 окт 2009, 21:28
  • Сайт

Re: Работающие скрипты для Unity, колекция.

Сообщение Zaicheg 29 ноя 2009, 12:36

ziat писал(а):Можно напрямую обратиться к высоте колайдера а не маштабировать его.

Высота СС == масштаб коллайдера по Y. Применительно к данному случаю. А масштабировать весь префаб необязательно, да )
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Работающие скрипты для Unity, колекция.

Сообщение ziat 01 дек 2009, 18:49

Моя версия скрипта для сидения.
только сейчас понял свою ошибку(исправляя один баг сотворил ещё один)

Присед тоже выливается в два скрипта и запись выглядет немного страшнее)

Сам скрипт
Код: Выделить всё
var speed = 6.0;
var jumpSpeed = 8.0;
var gravity = 20.0;
var sitflag=0;
var roof=0;
private var range=2.0;//задётся высота крыши зависет от высоты контролера, поэтому правильней расчитывать
//но конкретно для моего случая сойдёт

private var moveDirection = Vector3.zero;
private var grounded : boolean = false;

function Update() {
   if (grounded) {
      // We are grounded, so recalculate movedirection directly from axes
      moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
      moveDirection = transform.TransformDirection(moveDirection);
      moveDirection *= speed;
      
      if (Input.GetButton ("Jump")) {
         moveDirection.y = jumpSpeed;
      }
   }

   // Apply gravity
   moveDirection.y -= gravity * Time.deltaTime;
   var hit : RaycastHit;
   
   var controller : CharacterController = GetComponent(CharacterController);
   if (Physics.Raycast (transform.position, Vector3.up, hit, range))//Каждый кадр выпукаем луч для проверки
   {if (hit.collider){roof=1;}}//есть ли над нами крыша, нужен для устранения бага пробивания башкой препятсвия
   else{roof=0;}//если есть крыша вешаем флаг 1
   if (Input.GetButton("Sit") ){controller.height = 1.0;}//Собственно сам присед
   if(roof==0){if(Input.GetButton("Sit")==false)controller.height = 2.0;}//если крыши над нами нет
   sitflag=controller.height;//cидит ли персонаж? нужен для скрипта на камере, да и потом будет проще чем обращаться
   var flags = controller.Move(moveDirection * Time.deltaTime);
   grounded = (flags & CollisionFlags.CollidedBelow) != 0;
}

@script RequireComponent(CharacterController)


Скрипт близнец, который вешается на камеру
Код: Выделить всё
var sitflag;//наш флаг из первого скрипта
private var x=0;//флаг который необходим чтобы камера после приседа останавливалась
function Update () {//реализуем в Update тк камера должна проверять постоянно
scriptParentSit = transform.parent.GetComponent(typeof(FPSWalker)) as FPSWalker; // получаем первый скрипт и наш флаг из него
sitflag = scriptParentSit.sitflag;
         if ((sitflag== 1.0)&&(x==0)){transform.Translate(-0.5*Vector3.up);x=1;}//если сидим то опускаем камеру на 0,5
         //(Pivot controlerr а находится по центру) поэтому с каждого конца при приседе убирается не по 1 а по 0.5
         //если бы камеру понижали ровно на 1 то смотрелибы из центра контроллера
         if ((sitflag == 2.0)&&(x==1)){transform.Translate(0.5*Vector3.up);x=0;}//если не сидим то поднимаем на теже 0.5
}


Скрипт реализовывает аналогичный присед из HL, те мы сидим пока нажата клавиша приседа. Если отжали под чем-то продолжаем сидеть.
Как только из под этого выходим разгибаемся.

Скрипт в принципе сыроват, но работает и общее направление я думаю ясно

Важное замечание Изспользую Update тк FixedUpdate в силу настроек физики проекта вызывается значительно чаще.
Но вам не мешает сделать это в функции FixedUpdate
НО В обоих скриптах должна использоваться одна(не знаю как правильней сказать) функция. Если в первом FixedUpdate, то и во втором тоже FixedUpdate и на оброт в противном случае будет присутствовать рассинхронизация камеры и приседа(на эти грабли уже наступал)
ziat
UNITрон
 
Сообщения: 199
Зарегистрирован: 07 окт 2009, 21:28
  • Сайт

Re: Работающие скрипты для Unity, колекция.

Сообщение ziat 03 дек 2009, 16:21

Ещё один скрипт в коллекцию, мало ли кому пригодится

вернее не скрипт, а методика
Рандомный Респаун одного рандомно выбранного префаба из N штук ассортимента на площади.

Создаём пустой GameObject
Вешаем на него boxcollider высоту(y) которого делаем 0 ()впринципе это для удобства.
Ширину(x) и длину(z) подгоняем под ту площадь которая нам нужна.
Ну и ставим галку IsTrigger (чтобы сам коллайдер не мешался)
после чего вешаем скрипт

Код: Выделить всё
var cooldown=5;
private var lastshot=0;
private var i;
function Start()
{
   for (var i=0;i<transform.childCount;i++)
   {
      transform.GetChild(i).gameObject.SetActiveRecursively(false);
   }
}
function Update () {
if (Time.time-lastshot>cooldown){
i=Random.Range(0,transform.childCount);
Instantiate(transform.GetChild(i), Vector3(transform.position.x+Random.Range(-collider.size.x/2,collider.size.x/2), transform.position.y, transform.position.z+Random.Range(-collider.size.z/2,collider.size.z/2)), transform.rotation );
lastshot=Time.time;
}
}

Те объекты которые хотим спавнить делаем дочерними по отношению к GameObject
в cooldown записываем время между респами. Скрипт рандомно выбирает объект из дочерних и спавнит его в рандомной точки площади.
Collider нужен в принципе только чтобы визуализировать область респа.

Можно спавнить любые превабы от противников до бонусов)
ziat
UNITрон
 
Сообщения: 199
Зарегистрирован: 07 окт 2009, 21:28
  • Сайт

Пред.

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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 10