Результаты поиска
| |
Artaniel | Дата: Четверг, 27 Августа 2015, 11:02 | Сообщение # 1 | Тема: создание генерируемого мира по форме |
частый гость
Сейчас нет на сайте
| Возможно, любую достаточно хорошо формализованную задачу возможно решить. Пусть все состоит из типичных майнкрафтовских кубиков-блоков. Нужен метод проверяющий занята ли позиция для блока. Например рейкастом светим из соседнего блока в проверяемый, если наткнулся на стенку - там кто то есть. Обволакиваемый объект представляет из себя множество блоков. Нужно их как то хранить, например как массив GO. Для каждого GO из этого массива проверяем все соседние позиции. Тут важно определить что значит соседние, только вверх-вниз, влево-вправо, вперед-назад или еще и угловые через ребро или вершину. Если там пусто - ставим туда блок, часть обволакивающего объекта.
|
|
| |
Artaniel | Дата: Четверг, 20 Августа 2015, 21:11 | Сообщение # 2 | Тема: Нужен графический дизайнер для создания UI. |
частый гость
Сейчас нет на сайте
| Нужен дизайнер UI для небольшой инди казуалки под андроид. За деньги. Сумму обсудим в привате. Игра разрабатывается с начала мая, готова где то на 70%. И тут внезапно оказалось что дизайнер занимавшийся UI ничего не сделал и похоже не собирается. Фрилансеры такие фрилансеры... В результате мы с ним расстались и ищем нового. Нужно согласовать стилистику с нашим гемдизайнером/продактменеджером и сделать около 10 окошек, панелек и прочего UI в этом стиле: скрин Грубая оценка по времени 40 рабочих часов. Мы будем рады продолжить сотруднечество в следующих проектах, но сейчас нужна именно разовая работа над конкретной задачей. Просьба сразу присылать ваши работы, в идеале UI завершенных игр. Если нет - что угодно лучше, чем ничего. Технодемо: юнити веб билд. Контакты: * в ЛС этого форума. * Skype: artamiel * https://vk.com/id216930864 * https://www.facebook.com/quark.strange.9
Сообщение отредактировал Artaniel - Четверг, 20 Августа 2015, 21:14 |
|
| |
Artaniel | Дата: Суббота, 08 Августа 2015, 13:25 | Сообщение # 3 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| ivan2009, главное подключить модуль UnityEngine.UI . После этого появляются все нужные классы. Например Scrollbar.value - значение положения скроллбара от 0 до 1.
http://docs.unity3d.com/ScriptReference/UI.Slider-value.html вот тут есть хороший кусок кода с примером использования.
Официальная документация тут будет полезнее самодельных туториалов, хотя бы потому что полная.
Сообщение отредактировал Artaniel - Суббота, 08 Августа 2015, 13:26 |
|
| |
Artaniel | Дата: Пятница, 07 Августа 2015, 16:59 | Сообщение # 4 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Бозингар, в основном потому что такой способ движения. Rigidbody2d.MovePosition для физики это грубая телепортация без скорости. Фактически ты переустанавливаешь объект в новые позиции, а не задаешь ему скорость. Для Rigidbody скороость это причина движения, а не результат, т.е. если она есть то координаты будут сами меняться, но переустановка в новую позицию не создает скорость. Вобщем, если нужен спидометр - его придется написать самому. Как разность векторов позиции прошлого и этого кадра делить на Time.deltaTime, например. Есть подозрение что Rigidbody там лишний, присваивать координаты можно и без физики, а так ты этим самым присваиванием будешь затирать любые попытки физ движка сдвинуть ГО куда он считает правильным.
Была у меня попытка реализоать веревку на джоинтах, в качестве одной из проблем - неадекватное поведение когда веревка слишком растянута. Боролся как раз с помощью подавления Rigidbody физики тупым присваиванием transform.position так чтобы все частицы находились на одной линии, а силы рассчитывались вручную и прилагались только к концам веревки. Но если веревка снова сокращалась до длины меньше критической - интерполировал частицам веревки координаты и скорости и отправлял в свободное плавание на основе Rigidbody физики.
Мораль: или Rigidbody физика или покадровое присваивание координат. Поотдельности работают прекрасно, одновременно - второе подавит все проявления первого.
|
|
| |
Artaniel | Дата: Среда, 22 Апреля 2015, 19:53 | Сообщение # 5 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Спасибо, помогло. Оказывается не хватало всего лишь using UnityEngine.UI; появился класс Text, и все стало просто и понятно.
|
|
| |
Artaniel | Дата: Среда, 22 Апреля 2015, 15:15 | Сообщение # 6 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Пытаюсь разобраться с новым GUI, в частности его скриптингом. Новым в смысле не легаси, а тот который на Canvas-е, с rect transform-ами и т.п.. И что то не получается найти толковый мануал. То ли в гугле меня забанили, то ли карма не достаточно чистая, но попадаются или мануалы по легаси или предложения пойти погуглить. В частности не могу понять как динамически выводить текст. Например счетчик hp типичного RTS юнита. Покидайтесь ссылочками пожалуйста.
|
|
| |
Artaniel | Дата: Пятница, 02 Января 2015, 14:39 | Сообщение # 7 | Тема: Облако мыслей |
частый гость
Сейчас нет на сайте
| Мб, GIU? Делаем спрайт белого облачка с цепочкой кружочков, возможно несколько вариантов в разных направлениях, чтобы за рамки экрана не вылазило. Когда надо рисуем этот спрайт гуями, поверх него что нам надо, текст, другие спрайты, т.п со смещением так, чтобы попадало в свободную зону облачка. Если персонаж не в центре FOW камеры, придется повозится чтобы облачко росло откуда надо, но ничего сверхсложного, векторов боятся в юнити не кодить)
|
|
| |
Artaniel | Дата: Пятница, 19 Декабря 2014, 20:11 | Сообщение # 8 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата allods ( ) скажите плиз каким методом моментально аннулировать скорость rigidbody? Летит объект, мне нужно сразу его остановить, но при этом чтобы он сразу мог заново набирать скорость метода не знаю, но rigidbody.Velocity = Vector.Zero; должно работать.
|
|
| |
Artaniel | Дата: Четверг, 20 Ноября 2014, 15:58 | Сообщение # 9 | Тема: еще проблема с get component |
частый гость
Сейчас нет на сайте
| Смутил кусок Код if(Input.GetAxis("Mouse ScrollWheel")>0) { curWeapon += 1; StartCoroutine(Switch()); } if(curWeapon>2) { curWeapon = 1; StartCoroutine(Switch()); } Вы сначала запускаете корутин потому что скроллер провернулся, потом сразу же запускаете еще один такой же потому что curWeapon перевалил за 2. Не могут ли они друг друга нейтрализовать? Аналогичная ситуация для проворота с 1 вниз, должен дважды запуститься.
|
|
| |
Artaniel | Дата: Вторник, 18 Ноября 2014, 17:30 | Сообщение # 10 | Тема: Зависимый от камеры куб с небольшим изменением положения |
частый гость
Сейчас нет на сайте
| Вообще задачка на линейную интерволяцию, т.е. Lerp Пусть есть A0 - начальное значение 1 параметра A1 - конечное его же B0 - начальное значение второго параметра B1 - конечное второго
Пусть в каком то состоянии значение первого параметра A тогда значение второго: B = Mathf.Lerp(B0,B1, (A-A0) / (A1-A0));
В принципе можно и через пропорции расписать, но если разобраться с лерпом, дальше будет проще. Он работает и в векторах и в кватерионах. Для плавного вращения намного удобнее, чем самому пропорции для уголов составлять.
Вот списочек разных лерпов в документации Unity Scripting API: Lerp
Сообщение отредактировал Artaniel - Вторник, 18 Ноября 2014, 17:32 |
|
| |
Artaniel | Дата: Воскресенье, 16 Ноября 2014, 12:15 | Сообщение # 11 | Тема: Направление между двумя векторами (Vector3) |
частый гость
Сейчас нет на сайте
| Цитата robertono ( ) Archido, Я не знаю что вообще в принципе делает normalize. Объясните? Превращает любой вектор в вектор направленный в том же направлении, но длиной в 1. Иначе говоря выбрасывает длину, сохраняет только направление. Удобно потом умножать его на число, как у вас в примере выше было.
|
|
| |
Artaniel | Дата: Суббота, 15 Ноября 2014, 21:18 | Сообщение # 12 | Тема: Направление между двумя векторами (Vector3) |
частый гость
Сейчас нет на сайте
| Цитата KamiRonin ( ) Цитата Artaniel () Не вполне понял что имеется ввиду под "направлением". Любой вектор указывает какое то направление, кроме того имеет длину
вектор как класс в Юнити это 3D координата ТОЧКИ - х, y, z.
Не всегда. Есть например Rigidbody.velocity Тоже вектор, тоже с координатами, но это не координаты точки, это только координаты вектора скорости. Так же с силами, ускорением свободного падения и практически чем угодно кроме вектора position. Я имел ввиду что задавая вектор (задавая координаты) мы уже задаем направление. Ну и длину кроме того. Отдельное действия превращающего вектор в направление не имеет смысла. По крайней мере пока не ясно что человек имел ввиду под направлением.
|
|
| |
Artaniel | Дата: Суббота, 15 Ноября 2014, 11:30 | Сообщение # 13 | Тема: Направление между двумя векторами (Vector3) |
частый гость
Сейчас нет на сайте
| Не вполне понял что имеется ввиду под "направлением". Любой вектор указывает какое то направление, кроме того имеет длину. Направление всегда можно превратить в конкретные углы через Vector3.Angle() с осями типа Vector3.up или ктототам.transform.forward Возможно под "направление между векторами" вы имели ввиду угол между векторами? Тогда Vector3.Angle() - оно. Но одним углом направление не задашь, разве что в 2d.
Где применяется. Например у нас есть турель которой надо автоматически повернуться в сторону мишени. У нас есть вектор положения турели (Vector3 TurretPosition) и вектор положения мишени (Vector3 TargetPosition). Чтобы узнать куда повернуться надо получить вектор из конца вектора TurretPosition в конец вектора TargetPosition. Вот тут нужно бы рисунок, но вцелом несложно узнать что это будет Vector3 TurretDirrection = TargetPosition - TurretPosition; Длина (магнитуда) этого вектора это расстояние от турели до цели. Например если у нас есть текущее направление турели, то мы можем легко получить куда надо поворачивать турель и на сколько ее нужно провернуть за фрейм через Vector3.Angle() от этих двух векторов.
Еще часто использую, если надо убрать вертикальную составляющую (спроектировать на горизонтальную плоскость) достаточно просто вычесть её. Где то так VVV -= VVV.y*Vector3.up;
|
|
| |
Artaniel | Дата: Пятница, 14 Ноября 2014, 10:36 | Сообщение # 14 | Тема: Направление между двумя векторами (Vector3) |
частый гость
Сейчас нет на сайте
| Вектор получится. Для начала если есть вектор X, то вектор -X это вектор той же длины в противоположную сторону. Отнять X значит добавить -X. Сумма векторов получается геометрически, к одному пристраиваем из конца второй. Тут будет так же, из конца уменьшаемого строим вектор противоположный вычитаемому. Разностью будет вектор из начала уменьшаемого к концу этой схемки. (звучит страшно, но рисуется просто)
На уровне координат все еще проще {x1,y1,z1}-{x2,x2,z2} = {x1-x2, y1-y2, z1-z2}
Для юнити все это справедливо.
Сообщение отредактировал Artaniel - Пятница, 14 Ноября 2014, 10:38 |
|
| |
Artaniel | Дата: Воскресенье, 09 Ноября 2014, 11:54 | Сообщение # 15 | Тема: Связь локаций на карте мира |
частый гость
Сейчас нет на сайте
| В целом согласен с предыдущим оратором. Немного уточню. делаем массив ссылок, 2-мерный (C#) Код int maxX = 100;//или сколько там надо int maxY = 100; GameObject[,] World = new GameObject[maxX,maxY]; создавая или как то инициируя локацию заносим ее в этот массив. Если персонаж находится в локации с координатами X, Y и хочет пойти на север - переходит в локацию World[X,Y+1]. На запад - World[X-1,Y]. Остальное соответственно. Можно проверять World[X+1,Y]==null, если будет true - локации нету. Плюс стоит проверить границы массива.
|
|
| |
Artaniel | Дата: Четверг, 16 Октября 2014, 22:13 | Сообщение # 16 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Я б подпер костылем. Сделал бы отдельный управляющий скрипт. Он помнит состояние GetAxis в прошлом фрейме и отсылает контроллеру анимаций ноль, только если в прошлом фрейме на осях был ноль и в текущем ноль.
Код private float LastAxisStatus = 0;
void Update(){ float CurrentAxisState = Input.GetAxis("Horizontal");//или какая там нужна ось if (CurrentAxisState<0){ //отсылаем контроллеру анимации переменную чтобы бежал влево }else if (CurrentAxisState>0){ //тоже самое вправо }else if (CurrentAxisState == 0 && LastAxisStatus == 0){ //говорим стать в стойку } LastAxisStatus = CurrentAxisState; }
Сообщение отредактировал Artaniel - Четверг, 16 Октября 2014, 22:15 |
|
| |
Artaniel | Дата: Четверг, 16 Октября 2014, 21:54 | Сообщение # 17 | Тема: Как ограничить поворот? |
частый гость
Сейчас нет на сайте
| Да, должно быть связано, если parent объект подвижный - точно. Можно попробовать заменить transform.rotation= Quaternion.Euler(0, 0, MaxAngle); на transform.localRotation = Quaternion.Euler(0, 0, MaxAngle); Ну или что там вместо нулей уже.
|
|
| |
Artaniel | Дата: Четверг, 16 Октября 2014, 20:33 | Сообщение # 18 | Тема: Как ограничить поворот? |
частый гость
Сейчас нет на сайте
| Может статься что я перепутал оси. Отсюда плохо видно в какой ориентации объект изначально. Я предположил что он стоит по эйлерам в (0,0,0) и вращается только относительно Vector3.forward, это по идее ось z. Попробуйте для начального значения вывести эйлеры. Код void Start(){ Debug.Log( transform.eulerAngles.x,"," transform.eulerAngles.y,"," transform.eulerAngles.z ); } если там не (0,0,0), то и в строку transform.rotation= Quaternion.Euler(0, 0, MaxAngle); должно попасть то что там выведется.
|
|
| |
Artaniel | Дата: Четверг, 16 Октября 2014, 17:41 | Сообщение # 19 | Тема: Как ограничить поворот? |
частый гость
Сейчас нет на сайте
| Наверное просто создать переменную, в которой хранишь максимум для угла поворота, если угол стал больше максимума, то не вращаем (а лучше ставим строго на максимум), иначе вращаем. Код public float MaxAngle = 30;
void.... { if (transform.rotation.eulerAngles.z > MaxAngle){ transform.rotation= Quaternion.Euler(0, 0, MaxAngle); }else{ transform.Rotate(Vector3.forward * Input.acceleration.x * 1); } } Както так. Возможно стоит и минимум сразу ограничить. Еще бы надо учесть случай, когда transform.rotation.eulerAngles.z перейдет через 0 вниз и станет 360 минут немного, это тоже больше максимума. Еще в принципе для этого есть Mathf.Clamp(), позволит избавится от ифа , но как его совместить с transform.Rotate я не вижу.
|
|
| |
Artaniel | Дата: Среда, 15 Октября 2014, 12:35 | Сообщение # 20 | Тема: Набор в команду |
частый гость
Сейчас нет на сайте
| С позиции соискателя: Цитата Harrison ( ) мы работали сначала в Nival, следом работали в Wargaming Это самое интересное место. Тут нужна конкретика. И дело не в том что поверят или не поверят. Если у вас команда профессионалов об этом надо рассказать. Кто, сколько времени чем занимался, точно и конкретно. Даже если перекладывал цифровые бумажки на багтреккере, это важная информация. Цитата Harrison ( ) Основной груз работы примерно 75% я ложу на себя, остальные 25% ложится на мою команду. И дальше список менеджерских обязанностей. Это может говорить либо человек с совсем нулевым опытом, либо лжец. Чудовищно неверная оценка. И почему в этом списке нет слова "геймдизайн"? Серьезно, его используют все в индустрии, и инди, и корпорации, и русские, и корейские, и американские. Этот чудо-менеджер вообще хоть с кем то общался в индустрии?
Не назван движок, не названы графические технологии (2d или 3d хотябы). Соискателю это необходимо знать, просто чтобы понимать пригодится ли свой опыт. Сроки из вас выдавили тролли на третьи сутки. 5 лет разработки на энтузиазме? Серьезно? У меня в первой команде на энтузиазме все продержалось 8 месяцев. Цитата Harrison ( ) Почему мы решили создавать свое? Потому что надоело пахать за копейки это во-первых, а во-вторых убогость игр которая приобретается методом ухудшения качества и увеличением доната уже достала. Тем самым осознавать что на твоем труде делают миллиарды, а тебе платят 0.00002% от этой суммы угнетает, аргументируя это тем что ты "Винтик в адской машине геймдева". То есть теперь винтиком должен стать соискатель? Или оно взлетит само, без исполнителей на одной силе мысли менеджера?
С позиции инвестора: Цитата Harrison ( ) Наш первый проект это MMORPG игра на основе инновационных разработок MMORPG = дорого. Инновационный = рисковый. Иначе говоря надо вложить много, отобьется это с весьма низкой вероятностью. Да, есть шанс что вы окажетесь талантами и завоюете мир, но объективно шанс низкий. Субъективно нулевой, пока не докажете обратного. Ваш первый ориентир (TERA) имеет бюджеты порядка 10млн долларов. Понятно что тут не стоит называть сколько конкретно вы хотите с инвестора. Но даже примерная пристрелка до переговоров заставит значительную часть инвесторов пройти мимо. Просто потому что не по карману. Идеи: Цитата Harrison ( ) Мы разрабатываем игру в которой не будет ограничений по развитию персонажа, то есть мы убираем планку которую когда игрок достигает теряет смысл играть. Вы понимаете зачем эта планка есть? Наращивание статов выше запланированного приведет к дисбалансу. Просто первое поколение игроков будет гнобить и распугивать последующие. В ПвЕ тоже есть конкуренция и фалометрия. Как только новый игрок поймет что ему никогда не сравниться, он уйдет. Вы шатаете опору, не потрудившись замерить нагрузку, на нее приходящуюся. Цитата Harrison ( ) Мы даем возможность игрокам развивать самим игровой мир, то есть каждый игрок может разрабатывать и внедрять игровой контент. Объемы трафика кто то прикидывал? Если игроков n, каждый создает объект, То каждый должен скачать n объектов. Суммарная нагрузка на сеть n*n. Это довольно злая прогрессия. Сервера с передачей координат по такому принципу не всегда справляются (задача решаемая, но не простая), если так 3d модели пересылать, нагрузка будет намного больше, чем для других игр. В том же minecraft это реализовано и старые сервера тормозят как проклятые, даже при всем их оптимизационном примитивизме. Цитата Harrison ( ) Так же мы предоставляем возможность полноценно зарабатывать игрокам... Игры с выводом денег - не новость. Это просто плохая идея. Вспоминаем близзард с диаблой3. Попробовали, получили адовы убытки и разочарование аудитории, закрыли аукцион нафиг. Ну вы то конечно считаете себя умнее близзарда, но вот с точки зрения инвестора это не правда. Цитата Harrison ( ) Мы уходим от стандартной дизбалансной системы статов, НР и МР. Интересно чем она диЗбалансна? Да, система не безупречна, ни разу не реалистична, но в ней есть смысл. Она дозирует время схватки. Бой, в котором можно убить одним точным ударом может слишком быстро закончиться, бой в котором от ударов можно уходить может никогда не закончиться. И то и то расстраивает игрока значительно больше, чем напряженные n секунд с 50% исходом в конце. Цитата Harrison ( ) Движок Unreal Engine 4 позволяет полностью разрабатывать строение тела и тем самым мы создаем условие реальной схватки Весь этот "честный" расчет траекторий сводится к вычислению большого количества геометрии игровым сервером. Расчеты нагрузки на сервер кто то делал? Опять идея не новая, просто все умные люди от нее отказались. В небольших сессионных играх (Vindictus, Dark Souls) ее еще можно реализовать, но для MMO она сильно прожорлива. Цитата Harrison ( ) есть травмы и повреждения после которых можно выжить, а есть после которых нет. Это хорошая идея для сурвиалки, в тех же DayZ, SpaceStation13, Project Zomboid она смотрится замечательно. Но она убивает напрочь экшен. Один раз умереть медленно интересно. Но когда игрока, уже знакомого с процессом умирания, выведут из боя такой раной, а остальные будут продолжать веселиться, это большой минус.
Резюмируя, с точки зрения инвестора, каждая из этих идей может убить игру, а значит и прибыль.
Что вам с этим делать? Резать амбиции. Сделать тетрис - образное выражение. С маленькой игрой дошедшей до релиза, вам проще будет проще и с соискателями и с инвесторами, да и просто опыт не бывает лишним. 7 энтузиастов, даже с нулевым опытом могут сделать чтото уровня Rust за годик. Уровня TERA - точно не смогут.
ЗЫ, просто для проверки адекватности, сколько по вашему человекочасов потребует разработка обычного тетриса?
|
|
| |
|