Это копия, сохраненная 16 августа 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий тред >>103296 в бамплимите
Полезные ссылки:
http://docs.unity3d.com/Documentation/ScriptReference/ справка по скриптингу в юнити
unity3d.ru - Русскоязычный форум
forum.cgpersia.com - главный пиратский форум для всех юнитибогов, огромная свалка, в которой при желании можно найти практически любой ассет для юнити
https://mega.co.nz/#F!YBNjmZZa!BcEIxhmg6ykJivStEQXVQg -
Сборочка ассетов от доброго анона на 48 Гб. Запускать через хром.
Unity Technologies предcтавила Unity 5 на Game Developers Conference в San Francisco.
Заявлено о 2.5 млн разработчиков и около 600 тыс. в мес. активных пользователей. Новую версию можно купить по предзаказу сейчас с получением 4-к и всех ее последующих обновлений.
Из нового Enlighten, реалтайм система освещения, дающая сценам реалистичность за счет точного соответствия света и теней при сдвиге сцены или движении персонажа. "Физические" шейдеры, предпросмотр lightmap в редакторе в реальном времени, улучшенный asset bundling. Улучшена звуковая система, 64-битность, Nvidia PhysX 3.3, и "другие спецэффекты".
Unity Cloud это ad-sharing network для кросс промоушена мобильных игр.
Заявлена поддержка WebGL
Unity Cloud — рекламный инструмент, который позволит просто и быстро интегрировать рекламные блоки в свои игры. Они могут быть полноэкранными, промежуточными или поп-апами. Контролировать рекламу можно будет целиком через веб-интерфейс — например, отключать полностью (пока игра не наберет популярность) или продвигать свои другие проекты. Unity заключила партнерские соглашения с десятком издателей (среди них, например, Glu и Kabam), которые готовы предоставлять рекламные объявления за деньги.
>Я - ОП всех юнити тредов, начиная с первого (кроме того которого по уебански создал джабберикс). Я сделал 90% всех юнити игр, когда либо появлявшихся в гдаче. Я учавствовал в КАЖДОМ СРАЧЕ за последние полтора года на этой. Я занял второе место на первом конкурсе. Я на данный момент получаю весьма нехилый стабильный доход со всех своих проектов.
>Я, джабберикс, пара залётных и аватарки, пришедшие из /б/ после второго конкурса - вот и весь /гд/.
Саганул тред дегенерата с манией величия.
http://www.kongregate.com/games/ironcoregames
Перетекайте пока туда, этот не бампайте, пусть утонет до поры до времени, пока тот в лимит не уйдет. А то два треда получаются, неаккуратненько.
Есть уже юнититред, а ещё есть уебищный оп этого, которому припекло, что тред создал не он - кананичний оп. Ебаный школьник, блядь, аж трясет с таких.
>а у твоего нет
Ага, это ты и есть. Дебил, хули, семёнь теперь, так пабидим.
Нет номера треда, в архиваче ищи свищи пе пойми что потом, нет мало мальских ссылок на обучающие материалы хотя и эти уже приелись, зато есть высокомерное "Узнать как - http://unity3d.com/". Отпугивающее нюфагов.
Нет смищной пасты про говно, самое главное. Никанон, никанон! Скрываю.
Охуительная идея, воспользуюсь моментом.
Прошу ответа на такой вопрос: как реализуется физика в 2Д-играх? Я не про Юнити, нет разницы. Хочу узнать связь классов, то есть что к кому обращается в игровом цикле. Не могу чётко уяснить как это организовывается: то ли нужен класс "физика", который хранит значения гравитации как static-поле, имеет методы "придать ускорение телу (Point тело)" и другие, а его экземпляры хранятся в каждом классе "игрок", "враг" и т.д., то ли у каждого тела должны быть свои методы, и тогда не знаю зачем вообще класс "физика". Поясните как правильно это организовывается.
В каждом цикле делай Y-1, вот тебе гравитация, а дальше я не знаю. Смотри исходники Box2d они ведь открыты.
Если что, это не я задавал вопрос.
котоны, need help!
как сделали вот эти надписи? отображаются только сцене, в игре их нет. Перелопатил код, ничего не шашел. Как они подписали эти штуки?
не то. эти надписи есть на ГО, где нет скриптов вообще. Перетаскиваешь префаб на сцену, появляется надпись. втф?
Есть какой-то скрипт, который работает для всех префабов. Возможно, поиск по имени или тегу. Или на префабе скрипт висит, а ты в глаза ебёшься.
Неделя на юнити, два дня сишарпа.
Сверху справа.
http://beta.hstor.org/getpro/habr/post_images/4fd/4aa/3d7/4fd4aa3d776318d6bf7aac095908643c.png
Бинго! Посылаю тебе лучи добра и плюс 4 к карме
Говорят, что boo - это стильно, модно, молодежно. Лучшее от си шарпа и типа как питон. Кто пробовал? Какие подводные камни? Жив ли брат? Есть ли зависимость?
чо так?
Я слышал, что в нём макросы охуенные. И больше ничего не слышал, так что если метапрограммированием не обмазываешься, то это ненужное говно, скорее всего.
Глянул кто с кем реагирует и стало все ясно. Я так понял меня спасет Physics.CapsuleCast для поиска коллизий.
Отключить ему гравитацию?
костылики начинающего юнитипетуха в треде
Это почти тот же райкаст. Только немного сложнее. По идее, вся физика хорошо оптимизированна, но коллайдер всё равно как-то лучше смотрится. Даже если перевести его в триггер мод и получать скриптом коллизии для обработки, по-моему, всё равно лучше будет.
Collider же не получает сообщение о коллизии с другим Collider. Т.е мне приёдется делать рижит боди и двигать его через addForce, чего бы я не хотел.
Ну я ебусь с этим уже несколько дней, ты сам то проверял? Не срабатывает OnCollisionEnter для колайдера, если он сталкивается с другим коллайдером.
Вот, табличка чуть ниже на странице, что с чем взаимодействует.
http://docs.unity3d.com/Documentation/Components/class-BoxCollider.html
Что-то делаешь не так, всё должно работать. Нет, не проверял, у меня персонаж на 50% двигается физикой, через чарактер контроллер, потому юзаю это
https://docs.unity3d.com/Documentation/ScriptReference/ControllerColliderHit.html
Работает.
Бамп же!
Я бы так не делал. Когда писал свой я просто сделал сферу внизу и считал количество колизий с этой сферой через OnTriggerEnter. Когда колизий 0 то сфера решала что персонаж на земле.
конечно на высоких скоростях скорей всего я получу хуиту, но я не предполагаю что персонажа можно будет перемещать так быстро.
Вообще есть хороший вариант - постоянно применять очень маленькое движение вниз. Тогда каждый кадр при коллизии буде тсрабатывать onCollisionHit. Если земля резко уёдет из под ног (лифт или ящик под ногами взорвался) - контроллер сразу узнает. Но иногда это работает хуево на подёмах/спусках со степенек - из-за чего персонаж иногда "борется с выступом перед тем как залезть на него."
Я бы так делать не стал точно. эти полужопинские методы ощутимо потом усложнят потом все остальное. Например, попытки отличить столкновение персонажа со стеной и с полом, какие-то финты с гравитацией, поведение персонажа на склонах и другая хуйня. Говно писать можно потом, то на чем будут потом базироваться другие фрагменты лучше сделать основательно.
Инструментов нет. Есть какие-то ебанутые ассеты в сторе, но они говно.
Сам вчера искал подобное
> попытки отличить столкновение персонажа со стеной и с полом,
Постоянное движение вниз тут не мешает, ты просто на каждой коллизии берешь нормаль и проверяешь её наклон, y больше определенного значения - поверхность ходибельна, меньше определенного - с поверхности соскальзываешь.
Ну или подскажите, как можно организовать навигацию мышкой в этом самом пространстве.
А в чем проблема то? начни с http://docs.unity3d.com/Documentation/ScriptReference/Camera.ScreenPointToRay.html
и рэйкасти себе на плоскость, а потом указывай высоту от сохраненной кординаты.
>>120205
А потом ты решишь сделать различный звук ходьбы и твой персонаж видимо начнет топтать по стенам. или еще какая хйня.
>Как проверять для большого количества объектов находится ли игрок рядом?
Не легче ли разбить карту на участки и грузить разом все объекты участка при попадании его в зону видимости? Разбиваешь скажем на квадраты со стороной равной дальности зрения, и всегда в памяти должны находится предметы из текущего участка и 8 участков вокруг. А при перемещении в соседний участок легко понять: что выгружать, что загружать, что оставить.
Что мешает создать ещё один клиент на сервере для проверки всех коллизий хуйни-малафьи, а с игровых клиентов слать только клики клавишь и поворот мыши?
То, что тогда сервер будет требовать дохуя больше ресурсов включая видюшку
Тебе обязательно юзать физику из юнити штоле? Пиши сервер без юнити вообще, чисто сишарп. Няшная либа для этого дела - lidgren network а дальше сам
да у меня с сетью все ок, в плане отправки и принятия сообщений, физику юзать не обязательно, но вот смотри, если персонаж падает с горы, то он должен медленно падать с ускорением, тут нужна физика?
> дохуя больше ресурсов включая видюшку
Ну так графику всю вырубить же, только проверка коллизий, прием и отправка сообщений.
> то он должен медленно падать с ускорением, тут нужна физика?
Проверка на коллизии должна быть. Уравнение свободного падения есть на вики.
Логика подсказывает, что да, падение предметов есть действие физического закона гравитации. Но если тебе нужно исключительно падение с ускорением, не будет ли оверкилом юзать для этого физику юнити с её рэгдоллами, массой и силами? Напиши свою, в которой будет только то, что тебе нужно. Формулы есть в вики.
Я знаю как это можно делать. Это не сгодится если я захочу отрисовать большие пространства забитые мелочью.
Ну так я это понимаю. Но я не совсем понимаю понятие физики в Юнити, проверка коллизий, это же физика?
Тогда мне нужна физика.
ты непонятливый или просто лингвистический формалист?
>А то рассчитывать позицию персонажа на клиенте, а потом передавать всем остальным клиентам через сервер - зашквар
у меня вот просто не укладывается в голове, что ты в состоянии сам для себя сформулировать преимущества расчета положения сетевого персонажа на серверной стороне перед расчетом положения на стороне клиента, но одновременно не в состоянии представить алгоритм работы расчета на стороне сервера
Назрели вопросы по юнити.
1. От чего зависит количество игроков или чем оно ограничено в мультиплеере.
2. От чего зависит или чем ограничен размер карты уровня в юнити?
3. С чего лучше начинать изучение Юнити?
ой, кароч)
>1. От чего зависит количество игроков или чем оно ограничено в мультиплеере.
Используемой технологией. Во встроенной ракнет, если не ошибаюсь, 32 лимит. Если брать фотон - то там лимиты другие, на количество соединений. Есть безлимитный. Я пишу себе сервер на шарпе, потому, собственно, ограничений нет.
>2. От чего зависит или чем ограничен размер карты уровня в юнити?
Координаты хранятся во флоатах, потому ограничено точностью флоатов. Если использовать хитрые костыли - ограничений нет. Больше 2х2 км уровни лучше не делать, если без костылей.
>3. С чего лучше начинать изучение Юнити?
С уроков. Наверное.
2. производительность от тебя больше в этом случае зависит. на юнити взлетит всё в той или иной мере.
почти любой ММО-ФПС. АПБ например.
Ну здравствуй, очередной Киррил. Поведай же нам о своих великих планах на очередную легендарную игру уровня /gd.
Не
>Если использовать хитрые костыли - ограничений нет.
Поподробнее. Собираюсь пилить игру про космос в пределах одной солнечной системы, думаю, делать ли инстансы или можно запилить все в одной локации.
>Поведай же нам о своих великих планах на очередную легендарную игру уровня /gd.
Карочь игра будет такая. Песочница, где из подручного материала собирается всё, причем отдельных жестких объектов как таковых нет, каждый объект уникален. Есть три мира. Один мир просто навороченный чатик-социалка с комнатами, где юзеры общаются о сути бытия во внутренних и внешних мирах, ожидая новое воплощение. Второй мир есть аналог нашего астрала, т.е. мир привязанный к фундаменту нашего, в нем весьма специфичные законы. Третий он как наш, есть песочница со свободой действия материального аватара.
Ясное дело, юнити такое не потянет. Буду пилить свой движок. Сначала, максимально простой, но потом постепенно усложняя. Главного сервера не будет, вернее будет, но как DNS, каждый клиент будет частью общемирового сервера по P2P, аля битторент. Игра будет опенсурсная без донатов и криптобезчитерная.
Я языков не знаю, так что это пока влажные фантазии. Но идею я дал, идите делайте.
>Поподробнее
Двигай мир, а не игрока. Знаю, звучит странно, но игрока можно всегда держать относительно недалеко от нолевых координат, динамически подгружая и выгружая части мира. Если разберёшься, то бесшовный мир с ебанистическим размером гарантирован.
Координаты в юнити хранятся во флоате, а у него в мантиссу влазит порядка 7 разрядов десятичного числа со знаком. Значит, если минимальной единицей измерения взять миллиметр, то предельный разряд - это порядка тысячи метров, то бишь относительно безболезненно можно менять координату в пределах -9,999,999/+9,999,999 - то есть до десяти километров туды-сюды с точностью до миллиметра. что-то я уже формулирую хуево, спать пора наверное
Подбрось что-нибудь над террейном километра на четыре-пять. Вибрация и дрожание заебёт. Километров с четырёх с копейками начинаются явные погрешности. А на десяти тысячах метров дрожание превращается в лютый пиздец. Причём если моделька состоит из нескольких сабмешей, то трусит их независимо, иногда в разные стороны и вообще смотрится, как говно. Может, ты и правильно считаешь, но сразу перемещай точку на 4 знака.
>>120284
Спасибо, буду знать.
Подскажите, правильно мыслю ли: запилить в уголке сцены небольшую копию локации (сфера, игра-то в космосе происходит), в ней в виде точек - копии всех объектов в локации. Координаты - с коэффициентом в сторону уменьшения, скорость тоже. Эдакий уровень в миниатюре, где не отрисовываются, но перемещаются и взаимодействуют игровые объекты. Если копия-точка объекта оказывается ближе определенного расстояния к копии-точке игрока, то объект отрисовывается в основной сцене. По-моему, должно удобно получится.
В своем любимом графическом редакторе рисуешь белый круг, с нечеткими полупрозрачными краями. К каждой звезде прицепляешь спрайт с этой текстурой, крашеный в цвет звезды.
Хуйню же пишешь.
>>120291
Делай соответствующую текстурку, накладывай её на квад, делай светящийся шейдер, квад в каждом кадре поворачивай так, чтобы он смотрел на камеру.
Либо можно иначе. Если тебе нужно что-то типа блюма, то работай с 2д картинкой. В интернете поищи алгоритмы, на хабре вроде где-то видел.
Что такое квад и где взять светящийся шейдер? Самому пилить или есть в ассетах?
Вообще, надо вот для чего: есть кораблик, если от него удалить камеру на определенное расстояние, то вместо корабля игрок должен видеть эту самую светящуюся точку (ну или значок какой запилить, но это потом).
Да, во время удаления, когда кораблик меняется на точку, модель кораблика удалять совсем или как-то можно по-другому обойтись? Боюсь, что если корабликов будет дохуя, производительность упадет.
>Где можно почитать про вэйпоинты нормальный гайд? Не пойму как в коде объекты выглядят сами, на что ссылаются? На Вики есть сикер для построения пути но я не понимаю что к чему в его коде относится. Сишарп.
http://wiki.unity3d.com/index.php/SeekSteer
Где можно комментарии к этому посмотреть? Посаны! Скопировать то скопировал, но куда это пихать?
Смотрел код башенок простеньких, там вообще не так сделано.
http://forum.unity3d.com/threads/54678-A-Waypoint-Script-Explained-in-Super-Detail!
Нашел что-то вроде, кому интересно будет.
Я добавлял скрипт к пустому обджекту, потом добавлял collider and rigidbody, нихуя не ехало. Вэйпоинтов-то нету.
Как расставить вэйпоинты? Тоже самое, даже добавлял тег им waypoint, но не ехало.
Суть кода не понимаю еще, но это от неопытности, сейчас помаленьку учу ООП в общем и сишарп в частности.
Спасибо, анон, хоть за это.
>public Transform[] waypoints;
Видел? Вот сюда пиши трансформы твоих точек пути.
>if(waypoints.Length<=0) { Debug.Log("No waypoints on "+name); }
А это видел? Нет? Ты слепошарый..
Culling Mask у камеры менять или у объекта Mesh Renderer выключить? Как лучше сделать?
И как сделать так, чтобы светящаяся точка по достижению некоторого расстояния от удаляющейся камеры перестала уменьшаться в размерах?
И в самом деле, лол, не понял я этого просто.
Спасибо, бро, надо читать всю документацию.
>if(waypoints.Length<=0) { Debug.Log("No waypoints on "+name); }
А нэйм тут что показывает?
Сделал по маске, так как логика подсказывает, что это легче, чем менять рендер меша каждому объекту в сцене. Все правильно?
{
xform = transform;
currentHeading = xform.forward;
if(waypoints.Length<=0)
{
Debug.Log("No waypoints on "+name);
enabled = false;
}
targetwaypoint = 0;
if(rigidbody!=null)
{
useRigidbody = true;
rigidmember = rigidbody;
}
else
{
useRigidbody = false;
}
}
Можете построчно пояснить дурачку?
Ну давай разберем по частям, тобою написанное )) Складывается впечатление что ты реально контуженный , обиженный жизнью имбицил )) Могу тебе и в глаза сказать, готов подойти послушать) Вся та хуйня тобою написанное это простое пиздабольство , паладин ты комнатный)) от того что ты много написал, жизнь твоя лучше не станет)) пиздеть не мешки ворочить, много вас таких по весне оттаяло )) )Про таких как ты говорят Мама не хотела, папа не старался) Вникай в моё послание тебе постарайся проанализировать и сделать выводы для себя ))
Да, хороша паста. Но все же, братишки.
Чго обеснять всеж ясно, первоначальная инициализация всего. Ты книжку по шарпу осиль для начала, хеловорлды попиши окошки с кнопками посоздавай.
Да, там все более-менее норм, кроме:
targetwaypoint = 0;
if(rigidbody!=null)
{
useRigidbody = true;
rigidmember = rigidbody;
}
else
{
useRigidbody = false;
Еще вот это интересует:
protected void FixedUpdate ()
{
targetHeading = waypoints[targetwaypoint].position - xform.position;
currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
}
Там где targetwaypoint - мы вставляем свой трансформ, но ведь он должен меняться.
Ты английский могешь? До шарпа подучи немного английский, например
>targetwaypoint = 0;
индекс текущ. целевой точки пути. вначале = 0.
>if(rigidbody!=null)
проверка на нул. если ты установил ригид боди - будет исп оно. А иначе нет.
>targetHeading = waypoints[targetwaypoint].position - xform.position;
направление на ближайшую точку пути.
>currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
плаааавный поворот текущего направления на неё.
>Там где targetwaypoint - мы вставляем свой трансформ
targetwaypoint - это индекс трансформа, непосредственно его менять не надо. очевидноже.
> но ведь он должен меняться.
И ты не нашол где он меняется. Ну не читай код жепой плиз.
Тебе сколько лет?
>public Transform[] waypoints;
>Видел? Вот сюда пиши трансформы твоих точек пути.
Т.е. через запятую что ли писать, лол?
Я таки начал курс на курсере, пока просто времени нет слушать, работа жи.
>targetwaypoint - это индекс трансформа, непосредственно его менять не надо. очевидноже
Т.е., он просто поочередно перебирает те, что я задал?
>Т.е. через запятую что ли писать, лол?
Ага, для начала норм. Потом бери из других объектов уровня например.
Ну смотри, один двупроходный шейдер "удваивает" количество трисов. Проходов может быть и пять, и двадцать пять. Материалы смотри свои. Но, вообще, это похуй. Можно и лям трисов нахуярить, у меня начинало тормозить на 3кк+ трисов, без материалов.
от шейдера. в нем написано чего и сколько делать.
ну например я хочу сделать самописный динамический лод. для кустиков. но обычные лоды только в юнити-про. ну хули пускай у меня будет свой лод с блекджеком и шлюхами, написал способ детекции расстояния до игрока через триггер и корутин, вроде заебись. дестроить и инстантиировать новый обьект как-то не комильфо, если их дохуища. решил что пускай я буду менять только меш. и такой сначала решил ну хули, пускай у меня будет контейнер с префабами из которого я буду копировать меши. сделал, понял что я ссылаясь на меши префабов в итоге делаю с ними ебенячее говно и в сцене то нормально работает, а вот стоит её выключить и включить как все префабы заявляют что меша у них нет. теперь вот сел и думаю как же мне копировать меши с префабов не ссылаясь на них.
Из того, что я понял, я понял, что ты ебанутый. Тебе не нужно менять меши префабов, тебе нужно менять меши ГО.
>дестроить и инстантиировать новый обьект как-то не комильфо, если их дохуища
Почитай про пулинг
я меняю меши ГО, но из-за того что я меняю меш ссылаясь на другой меш, в итоге оригенальный меш говнякается. например если я напишу
Mesh mesh = new Mesh();
mesh = go1.GetComponent<MeshFilter>().mesh;
mesh = go2.GetComponent<MeshFilter>().mesh;
при условии что go1, go2 я заполняю в инспекторе через публичные переменные, то в итоге если включить и выключить сцену на обоих префабах я получаю то что на картинке
И почему у меня с сеткой вот такая хуйня как на пикрелейтед?
Алсо, как-то можно на точку нацепить билборд, который не будет менять размер при удалении/приближении камеры?
Сферы бывают трёх основных видов:
1. Полярная.
2. Геосфера.
3. Кубосфера.
Тебе какую? Если не умеешь в редакторы, скажи нужное число поликов, и я тебе вышлю.
>весь мир каждый фрейм
Не будь ебанутым. Зачем двигать постоянно? Передвигай только каждые n километров. Только следи, чтобы в этот же тик небыло массового инстансирования объектов.
Полярная, наверное. Полигонов сколько я хз, если честно, как посмотреть, сколько на моей? Verts, tris - что из этого полигоны? И не гуглится ничего, лол.
Трисы - полигоны. И я бы порекомендовал кубосферу. На полярной слишком неоднородная сетка. В одних местах поликов получается гораздо больше, чем в других.
using UnityEngine;
using System.Collections;
public class SeekSteer : MonoBehaviour
{
public Transform["Waypoint1", "Waypoint2"] waypoints;
public float waypointRadius = 1.5f;
public float damping = 0.1f;
public bool loop = false;
public float speed = 2.0f;
public bool faceHeading = true;
Где вэйпоинты - имена обджектов. Я все верно делаю? Не работает таки же.
Скинь тогда кубосферу на 1500 трисов. У моей 700 и она угловатая пиздец. Или тут дело в чем-то другом, а не в количестве полигонов?
Добра.
Да, раз уж анон сегодня доброанон, подскажи, как запилить такой же радар, как в ИВ, на пикрелейтед. То есть плоскость со шкалой и сфера. Подскажи, в какую сторону копать. Там билбордом это все реализовано или обычной сферой?
тут лучше видно
>ИВ
Не играл.
>Там билбордом это все реализовано или обычной сферой?
Не понял. Что ещё за билборд? Лично я вижу на этом скрине просто сферу с особым шейдером.
Со сферой разобрался благодаря тебе, меня шкала интересует. Билборд - это спрайт, я так понимаю, который не меняет своего размера и угла относительно камеры. Мне бы шкалу запилить по-нормальному, плюс еще хотелось бы узнать, как сделать точки, которые тоже не будут менять свой размер даже если камера от них удаляется (если я правильно понял, это тоже через спрайт надо делать).
>Мне бы шкалу запилить по-нормальному
Это наверно плавающий текст - билборд со спарйтом текста.
>плюс еще хотелось бы узнать, как сделать точки
Скалить их на величину пропорциональную их удаленности.
Это тебе матан нужно учить. Я сам в матан не очень умею, но алгоритм примерно такой:
1. Делаешь 4 вершины с координатами (1, 1, 0), (1, -1, 0), (-1, 1, 0), (-1, -1, 0).
2. Находишь угол от нужной точки до камеры. Поворачиваешь вершины на этот угол.
3. Находишь расстояние от камеры до точки. Масштабируешь свои точки. Чем больше расстояние, тем больше масштаб.
4. Натягиваешь треугольники на эти точки. Двигаешь получившийся квад в то место, где должно быть свечение.
5. Профит.
Или ещё есть вариант сделать всё в 2д. Это проще, но затратнее по скорости выйдет немного. Я не знаю - позволяет ли Юнити использовать юзеру буфер глубины, но если позволяет, то можно сделать так:
1. Переводим координаты точки в экранные.
2. Рисуем в этом месте 2д спрайт, делая для каждого пикселя проверку на глубину.
Из стандартной библиотеки код:
var targetTransform : Transform; // Transform to follow
var faceForward : boolean = false; // Match forward vector?
private var thisTransform : Transform;
function Start()
{
// Cache component lookup at startup instead of doing this every frame
thisTransform = transform;
}
function Update ()
{
thisTransform.position = targetTransform.position;
if ( faceForward )
thisTransform.forward = targetTransform.forward;
}
Короче, есть такой код, которые меняет размеры объекта. Как мне сделать так, чтобы размеры стали менять не сразу после старта сцены, а после некоторой задержки в n секунд?
Код вот:
using UnityEngine;
using System.Collections;
public class RadarOpen : MonoBehaviour {
public GameObject go; // Объект, размер которого будем менять (задается в инспекторе)
public float speed; // Переменная для скорости
public Vector3 scale; // Переменная для текущего размера
public Vector3 newscale; // Переменная для нового размера
public float timer; // Переменная для задержки
void Start()
{
}
void Update()
{
go.transform.localScale = Vector3.Lerp(go.transform.localScale, newscale, Time.deltaTime*speed);
}
}
Ссылку на вебплеер или без игор.
public float timer; // Переменная для задержки
public float startTime = 5f;
void Update()
{
timer += Time.deltaTime;
if (timer > startTime)
{
go.transform.localScale = Vector3.Lerp(go.transform.localScale, newscale, Time.deltaTime*speed);
}
}
Pastbin yzai uebok.
Бобра.
Invoke ("Huipazda", 5f);
protected void FixedUpdate ()
{
targetHeading = waypoints[targetwaypoint].position - xform.position;
currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
}
// moves us along current heading
protected void Update()
{
if(useRigidbody)
rigidmember.velocity = currentHeading * speed;
else
xform.position +=currentHeading * Time.deltaTime * speed;
if(faceHeading)
xform.LookAt(xform.position+currentHeading);
if(Vector2.Distance(xform.position,waypoints[targetwaypoint].position)<=waypointRadius)
{
targetwaypoint++;
if(targetwaypoint>=waypoints.Length)
{
targetwaypoint = 0;
if(!loop)
enabled = false;
}
}
}
Почему это в 2д не работает? Меняет координату по Z, вообще в космос улетает!
protected void FixedUpdate ()
{
targetHeading = waypoints[targetwaypoint].position - xform.position;
currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
}
// moves us along current heading
protected void Update()
{
if(useRigidbody)
rigidmember.velocity = currentHeading * speed;
else
xform.position +=currentHeading * Time.deltaTime * speed;
if(faceHeading)
xform.LookAt(xform.position+currentHeading);
if(Vector2.Distance(xform.position,waypoints[targetwaypoint].position)<=waypointRadius)
{
targetwaypoint++;
if(targetwaypoint>=waypoints.Length)
{
targetwaypoint = 0;
if(!loop)
enabled = false;
}
}
}
Почему это в 2д не работает? Меняет координату по Z, вообще в космос улетает!
Все, нашел там трехмерный вектор был.
Но моб все-равно делает круг вокруг вэйпоинта, из-за инетрности. Как её убрать?
{
if(useRigidbody)
rigidmember.velocity = currentHeading * speed;
else
xform.position +=currentHeading * Time.deltaTime * speed;
if(faceHeading)
xform.LookAt(xform.position+currentHeading);
if(Vector2.Distance(xform.position,waypoints[targetwaypoint].position)<=waypointRadius)
{
targetwaypoint++;
if(targetwaypoint>=waypoints.Length)
{
targetwaypoint = 0;
if(!loop)
enabled = false;
}
}
}
Еще за эту хуйню поясните пожалуйста.
if(useRigidbody)
rigidmember.velocity = currentHeading * speed;
Если мы используем риджидбоди, то вектор скорости задается такой.
else
xform.position +=currentHeading * Time.deltaTime * speed;
Если нет, то что это за хуйня?
{
if(useRigidbody)
rigidmember.velocity = currentHeading * speed;
else
xform.position +=currentHeading * Time.deltaTime * speed;
if(faceHeading)
xform.LookAt(xform.position+currentHeading);
if(Vector2.Distance(xform.position,waypoints[targetwaypoint].position)<=waypointRadius)
{
targetwaypoint++;
if(targetwaypoint>=waypoints.Length)
{
targetwaypoint = 0;
if(!loop)
enabled = false;
}
}
}
Еще за эту хуйню поясните пожалуйста.
if(useRigidbody)
rigidmember.velocity = currentHeading * speed;
Если мы используем риджидбоди, то вектор скорости задается такой.
else
xform.position +=currentHeading * Time.deltaTime * speed;
Если нет, то что это за хуйня?
А зачем использовать две переменные для таймера? Можно ведь так написать:
public float timer = 5f;
timer -= Time.deltaTime;
if (timer < 0) { ... }
Анус себе бампани, даун.
Первый инициализирую так: GetComponent<BoxCollider2D>();
.GetComponents<BoxCollider2D>();
Можешь не заморачиваться и на ступеньки положить невидимую плоскость.
Сраный ассетотаскатель. Ты никогда не сможешь сделать игру, воруя куски чукжого кода. Иди там на копро какое-нибудь подрочи, пользы больше будет.
4 гб оперативы
Windows 7 x64
>4 гига оперативы
Да. Я на двух работаю вполне комфортно.
>1.2 ГГц
Тоже да, но ты ведь понимаешь, что крузиса на этом не сделать. Максимум какие-нибудь игры для мобилок, и то лагать будут.
Есть такая штука, но это скорее наноброня
>VCS
Че блять? Ты туда зашел епта модник? Мы тут не по этим делам, тут бля ровные пацаны только. Или таскай ассеты как все мужики или ща рогалик те ебыч разобьет.
Это и раньше можно было делать, если руки не из жопы. Динамическую подгрузку ресурсов читай
Или есть какие-то другие способы?
Лал. Можно вообще сделать одну пустышку и к ней силу приложить. А направление задаётся вектором.
Не рабочий. То, что рисуется в OnGUI всегда будет поверх всего остального. Оно не зависит на какоем слое находится GameObject и вообще ни от чего не зависит. А у меня все рисуется именно там. Кучи контроллов.
Все контроллы рисуются в OnGUI. Их очень много и очень разных. И сейчас все пихать в какие-то GUIТекстуры не вариант
Ну если у тебя юнити про, есть ещё вариант с отрисовкой в текстуру. А вообще, ты 100% упорол какую-то хуйню и сейчас городишь костыли.
Под винду он какойто замороченный, хотя есть теперь няшный клиент официальный.
Поясни. Радар трехмерный, в виде сферы, если что.
введи стороние факторы. партиклы во все стороны, шатания нойсом, свист, грохот. тогда в глаза бросатся не будет.
GUI.Label, например. Рисовать в текстуру радара можно. И, кстати, можно тогда не скейлить твои спрайты, просто рисуй их на фиксированном расстоянии от камеры. Но 3d гуй всё равно придётся рисовать двумя камерами, если хочешь нормальную картинку, Z-буфер заебёт.
Vector3 movement = _thisTransform.forward * speed * Time.deltaTime;
Вот например сюда можно добавить рандомную величину и ракета будет в полёте "рыскать" носом.
Ставлю
var randx=Random.Range(1,100);
Vector3 movement = _thisTransform.forward * speed * Time.deltaTime*randx;
и ракета вообще никуда не летит.
Только все равно "рысканий" никаких нет. Эта строчка отвечает же за скорость перемещения, ракета только быстрее летать начинает, только и всего.
И последний на сегодня вопрос. Хочу, чтобы эти ракеты спавнились из определенной точки в сцене по нажатию кнопки. Все бы хорошо, но как вновь созданному пребафу передать значения переменных скрипта целеуказания ракет? Делаю так: создаю точку спавна, на нее вешаю такой скрипт
using UnityEngine;
using System.Collections;
public class Spawn : MonoBehaviour {
public GameObject RocketPrefab;
private GameObject instance;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.Space)) {
instance = Instantiate (RocketPrefab, transform.position, transform.rotation) as GameObject;
instance.AddComponent<MissileLaunch>();
//вот здесь по идее должен быть GetComponent, но я хз как именно его сюда заюзать. Если оставить как есть, то ракета спавнится и тут же пропадает.
}
}
}
Разобрался, но приходится каждую переменную доставать через GetComponent отдельно. Нельзя как-то сразу все их присвоить?
Разные, от ссылок на объекты, до float и bool. Конструктор использовать?
> Никогда ничего не умножай на deltaTime.
Почему?
>У тебя проблема в том, чтобы найти нужную строчку?
Чо несешь? Анон посоветовал добавить рандомное число в вычисление, я добавил - нужного результата это не дает, ракета не "гуляет". Да, можно назвать и так - ткни меня носом в ту строчку кода, где можно изменить ее идеальное положение относительно цели и подскажи как изменить этот код так, чтобы ракета немного виляла на траектории (но тем не менее, летела к цели).
>Почему?
В кратце, при лагах - всё ломается. Если фпс падает, то это значение становится слишком большим. Нельзя привязывать "физику" к фпс. Есть Time.fixedDeltaTime.
>Да, можно назвать и так - ткни меня носом в ту строчку кода
Берёшь и используешь метод научного тыка.
// направление на цель
Vector3 direction = target.position - _thisTransform.position;
Это явно относится к наведению на цель, таргет позишн это вектор3, к которому можно что-нибудь прибавить или отбавить - это, выходит, наебёт систему наведения и укажет ей лететь слегка в другую сторону.
А как прибавлять или отбавлять к вектор3? Инициализировать переменную s = Vector3(1,1,1);Vector3 direction = (target.position-s) - _thisTransform.position; Так?
>target.position
На самом деле это три флоата, target.position.x, target.position.y, target.position.z. Можно каждую мучить. А можно и как ты написал. Пробуй, хуле. Там есть ещё куча кода, отвечающего за наведение, можно и там поиздеваться.
4.6b смотрел? Если нет - проходи мимо
пацаны чтокак на етом игру делать я скачал унити сих стайт там нифига блин непонатно)) мне вообщем нада чтоб Onlayn-было на 16 играков
Омерзительный голос. Пошёл покупать юнити 4.6b на торрентах. Кстати, а как на счёт обратной совместимости? Старому гую пизда?
Что надо поменять, чтобы при первом нажатии на ПКМ, камера не "прыгала" на позицию точно наверху над целью? Такое происходит только при первом нажатии, потом все ок.
>Что надо поменять
>private var x = 0.0;
>private var y = 0.0;
Почаны, есть слегка измененнёй стандартный шутан Cruzis, что в нем надо поментяь чтобы игралось повеселее?
Даже не вижу смысла баттхертить. Ящитаю, достаточно просто игнорировать.
Ммм, поменял на 20, все равно то же самое. Какие значения этим переменным присвоить, чтобы камера после нажатия ПКМ оставалась там где была или как сделать так, чтобы она сразу после вызова скрипта определенное положение принимала, а не ждала, когда я ПКМ нажму?
>что в нем надо поментяь чтобы игралось повеселее?
sv_gravity 100
Как всегда, решил вопрос сам.
не хочу пиратить.
Спиратил нгуи, покрутил-покрутил, стал делать стандартными ректами. Какой-то нгуй хуёвый.
я вот сделал простой шейдор
Shader "Shad1" {
SubShader {
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct vertex_Input{
float4 vertex : POSITION;
};
struct fragment_input{
float4 pos : POSITION;
float4 positionInLocalSpace : TEXCOORD2;
};
fragment_input vert(vertex_Input v){
fragment_input o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.positionInLocalSpace = v.vertex;
return o;
}
float4 frag(fragment_input i) : COLOR{
return float4(i.positionInLocalSpace.rgb+float3(.5,.5,.5), 1.0);
}
ENDCG
}
}
}
который должен выводить xyz+(0.5) локальные кординаты как rgb палитру для фрагмента(наверное). прикрепил к кубику, заебись охуеть, то что ожидал. прикрепил к рандомной хуйне, заебись охуеть. решил прикрепить к кваду, получил вроде то что ожидал. но потом я решил покрутить обжекты в сцене и получил результат который я не ожидал.
скажите, почему так произошло?
я вот сделал простой шейдор
Shader "Shad1" {
SubShader {
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct vertex_Input{
float4 vertex : POSITION;
};
struct fragment_input{
float4 pos : POSITION;
float4 positionInLocalSpace : TEXCOORD2;
};
fragment_input vert(vertex_Input v){
fragment_input o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.positionInLocalSpace = v.vertex;
return o;
}
float4 frag(fragment_input i) : COLOR{
return float4(i.positionInLocalSpace.rgb+float3(.5,.5,.5), 1.0);
}
ENDCG
}
}
}
который должен выводить xyz+(0.5) локальные кординаты как rgb палитру для фрагмента(наверное). прикрепил к кубику, заебись охуеть, то что ожидал. прикрепил к рандомной хуйне, заебись охуеть. решил прикрепить к кваду, получил вроде то что ожидал. но потом я решил покрутить обжекты в сцене и получил результат который я не ожидал.
скажите, почему так произошло?
Лесенка? Не замечал. Но всё равно не так, как надо работает. Тени от объектов лесенкой налаживаются, это да. Но они и на стандартных шейдорах так лежат, мне бы селфшейдинг нормальный сделать. Вроде, так эта хуйня называется. А у меня получается, что состыкованных объекта освещаются абсолютно по-разному.
Я пробовал и мне не понравилось. Разница в освещении пикселя и вертекса на картинке.
Селл шейдор? тот у которого резкие границы? если хочешь только для освещения то могу дать такой.
Пиксельный лучше. Но у меня вообще surface.
>>121193
>Селл шейдор?
Забавный эффект.
Нет, у меня проблема в том, что селфшейдинг пересчитывается только при перемещении источника света. Тупо как-то, но так получается. Если делать mul с _World2Object, то получаем пик 2. Если не делать, то получаем пик 1, но селфшейдинг не работает. Хуёво как-то всё, качаю сруэнжин пока что.
Короче, _Object2World матрица хуёвая. Просто хуёвая, не спрашивай почему. Та же UNITY_MATRIX_V работается совершенно по-другому - именно так, как и должна работать. А _Object2World выглядит так, будто берётся освещение одной точки и премяется ко всему мешу.
или я совсем упорот?
код забыл
Pass{
Cull Off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma geometry geom
uniform float _Height;
uniform float _Width;
struct appPoint{
float4 pos : POSITION;
};
struct geom_empy_shit{};
[maxvertexcount(3)]
void geom(point geom_empy_shit shit[1], inout TriangleStream<appPoint> pointsStream){
float halfWidth = 0.5f * _Width;
appPoint ap;
float4 v[3];
v[0] = float4(-halfWidth, 0, 0, 1);
v[1] = float4(+halfWidth, 0, 0, 1);
v[2] = float4(0, +_Height, 0, 1);
for (int i=0;i<3;i++) {
v = mul(UNITY_MATRIX_MVP, v);
ap.pos = v;
pointsStream.Append(ap);
}
}
void vert(void){}
float4 frag(void) : COLOR{
return float4(1,1,1,1);
}
ENDCG
код забыл
Pass{
Cull Off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma geometry geom
uniform float _Height;
uniform float _Width;
struct appPoint{
float4 pos : POSITION;
};
struct geom_empy_shit{};
[maxvertexcount(3)]
void geom(point geom_empy_shit shit[1], inout TriangleStream<appPoint> pointsStream){
float halfWidth = 0.5f * _Width;
appPoint ap;
float4 v[3];
v[0] = float4(-halfWidth, 0, 0, 1);
v[1] = float4(+halfWidth, 0, 0, 1);
v[2] = float4(0, +_Height, 0, 1);
for (int i=0;i<3;i++) {
v = mul(UNITY_MATRIX_MVP, v);
ap.pos = v;
pointsStream.Append(ap);
}
}
void vert(void){}
float4 frag(void) : COLOR{
return float4(1,1,1,1);
}
ENDCG
Cперва ты сосёшь хуйцц. Потом ищешь ассеты. Потом смотришь на скрипты, охуеваешь - скрипты это заебись. Охуеваешь от гуи, но потом понимаешь, что в нём есть своя магия. Лезешь в меканим, понимаешь, что он говно. После чего либо юзаешь меканим и миришься с его авторигом, любо чувствуешь себя долбоёбом, но юзаешь легаси мод, который прост и надёжен, как ак 47 года выпуска. В шейдоры можешь так и не залезть и выпустить игру. Область применения шейдоров - вообще похуй, серьёзно. Можно делать поверхности пиксельными, можно воду фрагментарными - вообще поебать. Шейдоры это материалы, потому применяются - везде. Каждый материал - суть шейдор с парой текстур.
на шейдоры поебать. путь познания юнити начинается с правильно заданных вопросов о тех проблемах которые ты встретил по мере прочтения документации.
>>121371
если хочешь поворачивать в точку прицеливания то да. хотя это редко делают. и это будет забавно смотреться если ты будешь тыкаться в стену лицом.
>и это будет забавно смотреться если ты будешь тыкаться в стену лицом.
У меня поворот оружия вверх/вниз завязан на повороте мыши вверх/вниз и все, а направление вылета снаряда, так как я описал. Я проверял в КУ3 - там при максимальном повороте мыши вверх - камера смотрит под 90 градусов (ну или может 85), оружие повернуто вверх градусов на 70 от силы, а ракеты тем не менее вылетает в соответствие с поворотом камеры, т.е. не а ту сторону, в которую указывает ствол. И никто этого несоответствия не палит, я сам спалил, только когда специально присматривался, ища как там они сделали.
рейкаст лучше
Вспомнил ПУТЬ НЭО, когда в прыжке с подвыподвывертом оружие направлено строго в пол, а ты стреляешь вперёд, назад, вверх, даже в Аллаха. При этом, видно трассеры, которые вылетают из конца ствола в цель под углом 90 градусов.
>>121385
Обсасывалось же пять сотен раз. При стрельбе физическими объектами они на большой скорости пролетают сквозь коллайдеры, событие пенетрейшена не срабатывает. Рейкасти.
А смысл пулей рейкастить, если у него будет полёт прямолинейный? Если какую-то баллистику завозить, то ещё имеет смысл. А если без - то и пули не нужны.
Имеется ввиду, что спавнится пуля, рейкастит перед собой на какой-то отрезок, не видит коллизий, летит, рейкастит снова, летит. И так до коллизии. Для баллистики хак удобный.
Олсо, как в шейдоре узнать положение источника света относительно объекта? lightDir даёт глобальное.
>Олсо, как в шейдоре узнать положение источника света относительно объекта?
Домножить позицию источника на мировую матрицу объекта?
Я немного не разбираюсь в шейдорах, потому и такие дебильные вопросы. Если ты под мировой матрицей подразумеваешь _Object2World, то она и есть корень всех моих проблем, эта матрица какое-то говно, потому пришлось выбросить её из расчёта нормалей. Чтобы теперь нормально осветить модель я и ебусь. Ничего лучше, кроме как запилить корутину, которая будет просыпаться 60 раз в секунду и писать поворот в свойства материала, пока не придумал. Пик стронгли рилейтед, но, скорее всего, так и придётся сделать.
Эта хуйня в бетаверсии? Значит, ты бетатестер. Репорти баг, ёпта.
Для расчета света надо чтобы модель и источник были в одной системе координат. Походу после _Object2World - модель будет в мировых координатах, ист. тоже.
>расчёта нормалей
Если ты берешь нормали из текстуры, их нужно превести к диапазону (-1, 1) из цветового диапазоно (0, 1). Только потом домножать на мировую матрицу.
мимо телепат
>их нужно превести к диапазону (-1, 1)
Там есть normalize, я так понимаю, это оно и есть? Олсо, нашёл хитрую хуйню с * 2 - 1, вроде, так модель освещается красивее.
>Походу после _Object2World - модель будет в мировых координатах, ист. тоже.
mul((float3x3)_Object2World, tex2D(_ObjMap, IN.uv_MainTex).rgb);
Вот такая хуйня в шейдоре с этим перемножением. Пробовал всю эту tex2D оборачивать в нормализ, ни на что не влияет. Хуй его, в общем, знает. Меня бы устроил результат, но состыкованные сабмеши освещаются совершенно по-разному, >>121196. Плюс освещение приходит непонятно откуда, получается, что сторона модели, повёрнутая к свету - затемнена, а "теневая" - освещена. Может, поэтому и сабмеши неправильно освещены, только хуй его знает, как это побороть. Если выбросить мул с _Object2World, то я получаю идеал. Именно то, что надо. Но только освещение не реагирует на поворот модели. Либо если я там вместо мировой матрицы возьму UNITY_MATRIX_V или что-то такое (кроме UNITY_MATRIX_M и производных), то тогда нормали ложатся хорошо, "освещение" тоже, но оно же получается зависящим от угла зрения, что не есть гуд. Думал заменить в шейдоре lightDir на _Object2Light, но его вырезали и больше не поддерживают. В общем, грустно как-то мне стало от осознания своей тупости.
Какие дегенеративные хуйлы собрались, ни одной книжки по программированию не прочитали, 6й класс закончили и пошли писать игры
>с * 2 - 1
Лолд, это и есть
>превести к диапазону (-1, 1) из (0, 1)
>normalize
Нет. Это переобразование вектора произвольной длины к вектору длиной 1, с сохранением пропорций его компонент.
>mul((float3x3)_Object2World, tex2D(_ObjMap, IN.uv_MainTex).rgb);
float3 N01 = tex2D(_ObjMap, IN.uv_MainTex).rgb;
float3 Nm11 = N01 * 2 - 1;
float3 WorldNormal = mul((float3x3)_Object2World, Nm11);
Наверно так надо.
Анон, спасибо большое. Пока что это самый охуенный результат, но освещение по-прежнему приходит откуда-то из астрала. Буду еще трое суток думать над этой хуйнёй.
Я задам глупый вопрос - а зачем ты пишешь шейдер освещения, разве в юнити не реализовано годное освещение?
Юнити не может в нормали. Ну, якобы может, но на самом деле нет. Только бамп. Потому я пытаюсь обзавестись хоть каким-то шейдором с нормалями, ибо это охуенная тема. Для этого нужно задать освещение - если его не задавать, то угол падения света на модель встроенным годным шедором не пересчитывается. Нужно задавать это всё в явном виде, походу.
UNITY_MATRIX_V не годится? Вообще, вот http://docs.unity3d.com/Manual/SL-BuiltinValues.html
Но только рабочее из этого только "трансформэйшонс", остальное уже выбросили из движка.
Шейдерами, скриптами, текстурами, частицами, всякими стандартными компонентами и всяческими комбинациями вышеперечисленного.
Когда использую UNITY_MATRIX_MVP , то рисуется плоская линия(мне так надо). Я смотрю на неё с разных сторон и все как, но нужно чтобы эта полоска смотрела на меня. Когда использую UNITY_MATRIX_V, то полоска исчезает
>но нужно чтобы эта полоска смотрела на меня
Не проще поворачивать трансформ, на котором ты рисуешь?
Проще, но хотелось бы, чтобы этим занимался шейдер, а не скрипт. Тем более, что это будет в будущем не просто полоска.
Может, стоит попробовать не MVP, а все перебрать? MV, например. Я вообще хз, жди умного доброанона, который мне помог.
Олсо, по моей проблеме - от перемены мест слагаемых сумма меняется!
mul((float3x3)_Object2World, Nm11)
Освещение из астрала, рандомным образом прилетает на модель
mul(Nm11, (float3x3)_Object2World)
Всё относительно неплохо, лол.
Все перепробовал. Полоса либо не видна, либо располагается непонятно где.
Кстати, как повернуть объект лицом к нам(если не шейдерами?)
http://forum.unity3d.com/threads/billboard-sprite-shader.181287/
Вот, кстати, глянь, вроде годный шейдор?
Все, про LookAt прочитал
Спасибо большое, именно то, что нужно.
Тебе же уже отвечали, что использовать бету - это личное сумасшествие.
Хотя нет, хуита на хуите и хуитой погоняет. Видимо, для разных объектов сурфайс шейдер считает освещение по-разному. Попытаюсь в пиксель.
>от перемены мест слагаемых сумма меняется!
Действительно, кто бы мог подумать, что от перестановки матриц поменяется порядок.
берет любой наглядный пример
А похуй, поверну сначала и смещу, или смещу и поверну, да?
>А похуй, поверну сначала и смещу, или смещу и поверну, да?
Да уже совершенно похуй, это всё равно не работает, как надо. Свет всё так же прилетает из астрала и только при некоторых углах вращения всё совпадает. Очень нехватает возможности залезть в переменные, в те же матрицы - что, блядь, реально в них находится?
Дай угадаю, ты сначала поставил траву на террейн, потом выставил хелси и драй? Стирай, что понарисовал и рисуй заново.
>>121551
Ну или рефреш нажми. Я помню, что там есть проблема с террейном, запихивал туда детейл меши, потом их редактировал и это никак не отображалось в сцене, приходилось удалять и заливать по-новой. Пивоты крутил.
а просто взять кординату света через _WorldSpaceLightPos0.xyz не?
да жал я рефреш. я уже все что смог найти нажал. сделал через просто текстуры - заебись работает все цвета как я хочу. делаю не через текстурки - оно зеленое. втф
>а просто взять кординату света через _WorldSpaceLightPos0.xyz не?
Да там не со светом проблема была, а с матрицей. А точнее, верхняя левая подматрица 3x3 от матрицы 4х4 для двух разных мешей очень-очень сильно отличалась, потому и получалась хуита хуит. Взял матрицу одного меша, накинул на все меши - и стало заебок. На фотореалистичность не тянет, но и я не эпик гейс какой-нибудь.
>делаю не через текстурки - оно зеленое
Попытался повторить, сделал детейл меш, который рисуется на террейне. Убрал с него текстуру - он рисоваться перестал вообще, лул. А что мешает налагать текстуру-то?
патамушта ты лох тупой)
А, и ещё вспомнил, цвета больной\здоровый попробуй не выкручивать в идеально белый, выкрути всё по 127, помогает от лишней колоризации. Я этой хуйнёй пользовался, чтоб цвета не пидорасило.
Короче, тоже взялся за эту хуйню. Террейн энжину глубоко до пизды, какие шейдеры у материала, у него свой шейдор. Нужно его перезаписать его шейдером, создать новый
Shader "Hidden/TerrainEngine/Details/WavingDoublePass"
И уж там-то можно развернуться.
А где их можно скачать? По ссылке в оп -посте они? Извиняюсь заранее за нубские вопросы.
Раздел Particle Systems, из него интересует эффекты магии и заклинаний и тд.
https://www.assetstore.unity3d.com/en/#!/content/3903
Вот этот http://rghost.ru/56155158
Есть ещё Cartoon FX все 3 штуки, скажи залью потом
Спасибо!
Спасибо, добрый человек, за наводку. И правда стоит поковырять это добро.
cgpeers cgpersia
иди нахуй отсюда, знаток
Частицы у него на гпу. На гпу только рендер. Посмотрю я на тебя, как ты будешь делать систему частиц без процессора на одной видеопамяти и шейдерах
Ты ведь знаешь что gpu-партикли не подойдут в этом случае? Это другие партикли, за оффскрином они не считаются, да и у них много других ограничений, учитывая что они держатся на шедорах.
Ты ведь знаешь что партикл система это всего лишь набор инструкций для описания изменений параметров кучки объектов во времени? Ты ведь знаешь что у тебя есть возможность хранить это в видеопамяти и считать на gpu? Ты ведь знаешь что ты можешь составить обсчет так, чтобы куллинг не херил параметры частиц? Наверное не знаешь, ты знаешь только то, какие слайдеры есть в юните.
Блядь. На шейдере разве можно менять напрямую сохраненный на видеокарте буфер вершин? Пиздец, если да.
Тогда я хуй.
Но на юнити не сидел, иди нахуй.
Геометрический шейдер, например. Иди подотрись, если потом еще будет интересно я тебе еще пару способов это сделать расскажу.
Сам понял, какую хуйню спросил, и решил удалиться?
Можно, да. Например, смотри: скукоженая по синусойде вертексным шейдером капсула. Можно красиво анимировать всяких рыбок и медуз шейдерами.
Хотя я не знаю как писать вершины в буфер изничего.
Кстати да, спасибо анон на наводку. Правда, из ссылки я понял метод плохо, но поняв общую идею я наделал как понял. Получилось заебись. По сравнению с моим прошлым методом улучшения с 6-8 секунд до 0.15-0.2.
Юзаю короче OnCollisionEnter(Collider col){} для отлавливания столкновений. И, блядь, детектит столкновения между объектами, находящимися в разных углах сцены. Ну почему я должен ломать себе пердак об это дерьмо? Какие читы вы используете, чтобы обойти это?
Нужно сделать эффект на текстурах типа пульсации линий, примерно как на картинке. Каким путём это лучше всего сделать? В идеале бы получить эффект по дополнительной карте канала и цвет как внешний параметр.
Ну так подскажи хули, не будь мудаком.
Есть пуля. На ней хуиджит бади и бокс хуяйдер. Она летит короче в быдланов у которых только хуяйдеры(ими rigitbody не нужен, вроде). При столкновении с быдланами пуля вместе с ним исчезают нахуй сразу. Везде стоит Continuous в хуижен детекшон.
Я в отчаянии уже, меня заебало 3 часа копаться тратить время на распутывание этого дерьма, вместо того, чтобы творить шедевры.
Не используй коллайдеры для пуль, мудила. Шедевры он блядь делать собрался, лолка.
Делай пули колайдером, делай из неё рей трейс, длина трейса - расстояние, которое пуля пролетает за кадр.
Нет, лучше свою попробуй.
с просветленьицем!
Получился такой сладкий хлебушек.
Суть кратко: http://pastebin.com/5gBD9JkV
Суть норм: есть текстуры трафарет и задержки времени - считается интреполяция цвета главной текстуры и блика со значением времени через трафарет.
Вот так выглядит текстура времени, например.
Бамп
Нужны ли знания жабы и другого языка для написания аи?
Нужен ли граф планшет под свои текстурки?
Сложно ли вообще?
Ньюфаг
Ну ты и уебок. Неужели так трудно было погуглить? Нет блять, полезу в тред и спрошу, ебаное поколение стаковерфлоу. Это уже золотые вопросы, блять
Ява нинужна, нет ее тут. Есть яваскрипт, но если ты думаешь, что это почти одно и то же - лучше возвращайся обратно, откуда пришел.
Планшет нахуй не нужен.
Нет, несложно, если масса мозга в пределах нормы. Но ты своим постом уже начал доказывать обратное.
Теоретически можно собрать игру мышкой, но результат будет плачевен. Так что если не хочешь потоков говна в свой адрес, действительно есть желание запилить игоря и ты здравомыслящий человек - то пиздуй читать документацию к движку, учить сишарп/жабаскрипт и ГУГЛИТЬ.
Да, у меня бомбануло. Впервые.
Чем ньюфагов зарисать - пиздуй-ка ты мой друг сам учиться!
>Ява нинужна, нет ее тут. Есть яваскрипт, но если ты думаешь, что это почти одно и то же - лучше возвращайся обратно, откуда пришел.
Если ты думаешь, что JavaScript и UnityScript одно и то же - то ты сам хуй безграмотный и ламо!
> А недавно в юнититредах, да?
Год. Держался до сего момента.
> Если ты думаешь, что JavaScript и UnityScript одно и то же - то ты сам хуй безграмотный и ламо!
От того, что к куску говна прихуярили классы, он не перестал быть куском говна.
Нет времени. Как вообще делаются интерфейсы? Есть что-то внятное? Запоминать данные и отрисовывать все в OnGUI я уже делал. Но это не подходит, ибо частицы и все гей обджекты находятся всегда за GUI. Спецэффекты ниподелать.
Альтернатива - Quad с текстемешем на нем, но это пиздец какой-то получается. Ощущается резкий, противный запах диких костылей. Чувствую, что все это делается как-то совсем иначе.
Потому реквестирую годные советы интерфейсо-строителей. Ждать 4.6 не могу, дедлайны, все дела.
У меня пропсы - домики деревянные, фурнитура, все свое.
>трисовывать все в OnGUI я уже делал. Но это не подходит, ибо частицы и все гей обджекты находятся всегда за GUI
Вообще-то, так обычно и бывает.
Мб делать отдельную камеру для интерфейса, хуярить его гейобджектами, а потом каким-нибудь раком выводить на экран сразу с двух камер?
http://www.41post.com/3255/programming/unity3d-creating-a-gui-with-both-3d-and-2d-elements
мимо никогда не пилил интерфейсы на юнити
Это ебанистический костыль. И этот уёбок всплывает уже второй раз тут. Нахуя, вот нахуя ему надо рисовать гуи ЗА игровым миром?
Сейчас впёрся на динамических Lightmap'ах.
Кто может поведать о ужасах, с которыми я столкнусь, если буду использовать Texture2D.apply(), или каким образом проще реализовать постоянное динамическое обновление карты освещений как в оригинальной игре? Все лайтмапы умещаются на текстуре 1024х1024, оригинальная игра работает с страницами по 128х128.
Повесить в нужных местах юнитевскую лампочку не предлагать, они с гмо и от них вторые drawcall'ы растут. И тени от них не ламповые.
Сука, ты не понял всей хуйни. Фишка в том, что я хочу, чтобы при нажатии на кпоку было блять до пизды молний всяких, взрывыкишкиэффекты и т.д. Хуйня в том, что эти ебнутые хуи перекрывают все гей обжыкты, которыми эти эффекты и являются.
Я же не кубы хочу видеть перед интерфейсом.
А подробнее? В смысле каждый кадр эффекта будет текстурой? Если да, ты понимаешь какой это пиздец будет? И потом, хочется чтобы эффекты были разнообразные, рандомные.
Захуярь 3д гуй отдельной камерой, блядь. Костыли ему не нужны, блядь.
Vector3 closestPoint;
float closestDist = Vector3.Distance (заданная_точка_ в_Vector3, массив_координат_Vector3[0]);
for (int i = 0; i < массив_координат_Vector3.Length; i++) {
float dist = Vector3.Distance (заданная_точка_ в_Vector3, массив_координат_Vector3);
if (dist < closestDist)
closestPoint = массив_координат_Vector3;
}
абасрись гомосека скриптовая.
Vector3 closestPoint;
float closestDist = Vector3.SquareDistance (заданная_точка_ в_Vector3, массив_координат_Vector3[0]);
for (int i = 0; i < массив_координат_Vector3.Length; i++) {
float dist = Vector3.SquareDistance (заданная_точка_ в_Vector3, массив_координат_Vector3);
if (dist < closestDist)
closestPoint = массив_координат_Vector3;
}
Засерать твоими ебаными корнями мой SIMD тебе никто не позволял.
мерж сцен это пиздец какой то, там же нихуя не понятно
Начинать с нуля - конвенция. Начинать с единицы, потому что так красивее - это как насрать себе на голову и выйти на перформанс.
мимоартист
Я просто оставлю это здесь.
http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html
Нет.
Да и зачем? В ассет сторе полно анимаций - если есть ригнутый персонаж, просто используй меканим. Или блендер/макс для создания собственного анимированного персонажа с уникальными анимациями, если уж такая необходимость.
> смотрит Lua
Если кто-то берёт пример с луа - то это конченный человек, его спасёт только самосожжение.
С него не надо брать пример. Его просто надо знать. Это одна из фундаментальнейших сторон геймдева. Те кто не знает этого - школьные ламеры.
Я имел ввиду, взять допустим модель папоротника и при контакте с игроком проигрывать анимацию раскачивания в стороны.
Смотрите как няшно
А совсем заебись нет? До такого я и сам уже догадался. Сделал такую картинку этим способом, но мягко говоря поиск ближайшей точки для каждого пикселя в эррэе занимает дохуя времени. Даже не знаю как ускорить.
>>122311
у меня нет такой хуйни как Vector3.SquareDistance
>>122314
так начинать эррэи с еденицы как-то неадекватно. получается что диапазон 1-9 это 9 чисел, а 10-19 это 10 чисел.
впрочем любой вариант правильный, учитывая что я не говорил с какого индекса начинаются значения.
верней, очевидно знаю что можно ограничить максимальный сегмент для поиска радиусом кругляшка и тому подобную хуйню, но как заебись сделать не знаю.
Идиот блджад.
>у меня нет такой хуйни как Vector3.SquareDistance
(x1-x2)²+(y1-y2)²+(z1-z2)² без корня
>так начинать эррэи с еденицы как-то неадекватно. получается что диапазон 1-9 это 9 чисел, а 10-19 это 10 чисел.
ААААА БЛЯДЬ. Ты совсем дебил? Ты первую точку (с индексом [0] в массиве) уже взял, когда инициализировал float closestDist, нахуя тебе сравнивать первую точку с первой точкой? Вот и начинай с индекса [1], сука. Без этого, конечно, будет работать, и практически так же быстро, но не понимать элементарный кусок кода это блядь пиздец нахуй.
Пиздуй НЯШНУЮ СИШЕЧКУ дрочить, даже не кресты. Пока не осилишь, не возвращайся.
У меня багет.
мимопроскакал
>ААААА БЛЯДЬ. Ты совсем дебил? Ты первую точку (с индексом [0] в массиве) уже взял, когда инициализировал float closestDist, нахуя тебе сравнивать первую точку с первой точкой? Вот и начинай с индекса [1], сука.
какая-то у тебя жопа больная.
я не говорил что массив одномерный. лично у меня координаты хранятся в bool[,]. плюс сравниваются не точки внутри массива, а точка за пределами массива с точками внутри массива.
Да не, лол, я её изобрел уже. думаю как травку сажать в лесу.
Нет, мы тут обсыкаем долбоёба-луадрочера.
Чем тебя не устроил родной террейн энжин? Давно тебя наблюдаю здесь, успехи хорошие, но почему?
DontDestroyOnLoad();
Уёбывай.
С моей точки зрения, самый просто способ анимировать подобное: сделать растению риг из 2-3 костей и анимировать в своем любимом 3д редакторе, потом импортировать в юнити, настроить анимации, сделать скрипты активации и так далее. Встроенные средства создания анимации в юнити годятся в основном для анимации дверей, в целом - для любых объектов, вершины которого не перемещаются в процессе анимации относительно друг друга.
А кому-то проще сделать процедурную вертексную анимацию.
Именно для колышащейся растительности есть какое-то встроенное решение - wind в разделе настроек террейна вроде. Хотя вряд ли это можно использовать для анимации при касании.
Можно через донддестройонлоад() но вообще лучше просто сохраняй все это куда-нибудь, заодно и систему сохранений сделаешь. Можно вон как бородач "BurgZerg Arcade" сохранять в PlayerPrefs.
>>122421
М. Спасибо за умное слово. Посмотрел, но решил что в результате выйдет примерно то-же самое, только с еще дольше.
Доделал текущий вариант, чтобы он не считал то что не надо.
Создание этих дырочек сократилось с 9-15 секунд до 0.3-0.5.
>>122420
Да вроде всем устроил, кроме некоторых мелочей, которые потом растормошу.
Слева просто графическое отображение чтобы я понимал что вообще происходит внутри карты, как присваиваются биомы и всякая ерунда. Справа юнитевский террэйн.
Хотя была мысль воспользоватся наработками слева для создания чего-нибудь стилизованного как дарвиния.
>читалку .bsp файлов q1/q2/goldsrc пишу под Unity
Нахуя нужно? Делай читалку .rmf, или .map файлов. Скомпиленные бсп непригодны для редактирования.
И противоположная задача: как из отдельных префабнутых прямоугольников разных размеров собрать подобие квадрата так, чтобы между ними не было зазоров?
Ну блядь, это же классическая задача построения атласов. Гугли как создаются атласы.
> Нахуя нужно? Делай читалку .rmf, или .map файлов. Скомпиленные бсп непригодны для редактирования.
Сомневаюсь что кому то придётся редактировать .bsp внутри того же Unity, для этого существуют всякие плагины к блендерам и прочим пакетам моделирования. Да и для .rmf/.map такие же плагины есть.
Главная суть ради чего я это делаю - интерес, получится ли у меня ли воссоздать в Unity систему Entit'ей из Half-Life такую, чтобы работали хотя бы базовые скрипты (Да если трамвай в начале игры доедет до точки назначения, это уже будет отлично).
Q1 и Q2 второстепенные цели, просто отличия формата минимальны, и сделать поддержку отрисовки не особо сложно. Q1 вобще использует виртуальную машину для всей игровой логики, и я давно бросил её писать на Unity, так как тогда не разобрался, каким макаром можно сэмулировать работу edict'ов, хотя после реализации этой виртуальной машины, теоретически, у нас уже будет абсолютно вся оригинальная логика из игры.
В любом случае, на свой вопрос я похоже придумал ответ.
Так как в оригинальных движках похоже на один Face может наложиться только 1 статическая и 2 динамических Lightmap'ы, и мигающих лампочек явно меньше чем всех Lightmap'ов вобще, есть вариант запечь освещение от мигающих лампочек в текстуру на максимальной яркости, а в шейдере просто смешивать их и мерцать ими.
Вот движущиеся источники света похоже придётся реализовывать через юнитевское освещение. Всё равно в оригинале они не отбрасывают тень.
Ну тут все просто. Берешь массив вершин плоскости, добавляешь парочку в месте разреза, сохраняешь в меш только первые четыре вершины, потом создаешь новый меш с двумя крайними вершинами от первой плоскости и двумя от разреза. Создаешь знач новый ГО и туда в меш фильтер этот меш пихаешь. Ну там тебе еще надо будет правильно их расставить, чтоб нормали не наебнулись и текстурные координаты посчитать, но эт все хуйня.
Вот, а чтоб обратно короче сделать, там слегка посложней, но тоже все просто. Для начала берешь от обоих мешей вершины, переводишь их в мировые координаты и находишь две ближайших. Можно конечно искать по точному совпадению, но там же флоаты, ну их нахуй. Вот, короче потом берешь опять убираешь совпадающие вершины, а из тех, что остались склеиваешь меш, ну там текстурку просчитываеш для него вся хуйня. Ну и геймобджекты тоже удаляешь. И все.
> Поделишься этой годнотой?
Пока что эта "Годнота" Представляет из себя набор из костылей и функций написанных на скорую руку чтобы проверить работоспособность. Нужно изрядно всё оптимизировать, и привести код в более менее логичный вид.
Ну а так или иначе - исходники читалки .bsp в том или ином виде в итоге выложу в публичный доступ.
Да не важно в каком виде. Если оно импортирует карты с голдсорса с таким же ламповым освещением, то ему цены нет. Алсо, насколько я помню, вис нужен для куллинга? Он и его переносит? Так это же вообще охуенно!
джва_года_жду.тхт
>Проблема в том, что чем дальше персонаж отходит, тем ник ниже опускается
Ткну пальцем в небо: ты в своём скрипте случайно два раза x не использовал?
нет
using System;
using UnityEngine;
using System.Collections;
public class ViewHPBar : MonoBehaviour
{
public string nick = "Vasyan";
public GUIStyle style1;
private Vector3 v3;
// Use this for initialization
void Start()
{
style1.fontSize = 15;
style1.alignment = TextAnchor.LowerCenter;
}
// Update is called once per frame
void Update()
{
}
void OnGUI()
{
v3 = Camera.main.WorldToScreenPoint(transform.position);
GUI.Label(new Rect(v3.x,Screen.height-v3.y,100,20),nick);
}
}
это висит на объекте-указателе ( ну который над башкой перса)
using System;
using UnityEngine;
using System.Collections;
public class ViewHPBar : MonoBehaviour
{
public string nick = "Vasyan";
public GUIStyle style1;
private Vector3 v3;
// Use this for initialization
void Start()
{
style1.fontSize = 15;
style1.alignment = TextAnchor.LowerCenter;
}
// Update is called once per frame
void Update()
{
}
void OnGUI()
{
v3 = Camera.main.WorldToScreenPoint(transform.position);
GUI.Label(new Rect(v3.x,Screen.height-v3.y,100,20),nick);
}
}
это висит на объекте-указателе ( ну который над башкой перса)
Ну хз, попробуй так:
GUI.Label(new Rect(v3.x, Screen.height-v3.y + 20, 100, 20), nick);
На каком расстоянии оно съезжает то?
> Алсо, насколько я помню, вис нужен для куллинга? Он и его переносит? Так это же вообще охуенно!
Ну так то да, Visibility List тоже импортируется, но я в сомнениях насчёт необходимости его использования.
Со времён Q1, максимальное количество вершин на карту - 65536. Учитывая что некоторые вершины делятся между собой разными фейсами, грубо говоря эта цифра увеличивается в худшем случае на 20000.
Нарисовать Модельку даже в 100 000 полигонов для современных видеокарт это раз плюнуть. Даже на моём древнем телефоне с adreno 205 карта уровня cs_office выдаёт более менее играбельный fps. Поддержку VIS я сделал буквально недавно, но уже успел намучиться от неё. Главная проблема - перестроение модели видимой части уровня. Перепробовав кучу решений, придумал хитрость - Заливаем в Mesh все вершины и их данные, а когда нужно отрисовать определённые листы дерева - тупо генерируем для этой модели треугольники для нужных нам фейсов. При рендеринге не указанные вершины не используются, и у нас получается нехилый профит в производительности в виде 2 мсек на генерацию треугольников + 6 мсек на заливку этого буфера в Mesh для сложных карт. Вот только всю малину обламывает сборщик мусора, из-за которого иногда возникают просто ОЧЕНЬ сильные проседания в производительности, пикрелейтед. Вроде как и обьектов создаётся не так много, чтобы вызывать настолько большие проседания. Да и даже если создавать в Update 10000 интов и пробегаться по ним, таких диких тормозов не найти.
Если не разберусь, придётся сделать опциональной фишкой.
Всё таки иметь стабильные 30 fps это куда лучше, чем 60fps с внезапным дёрганьем при движении раз в ~15 секунд.
тогда y инвертируется вообще
кокрастыке нет. Хотя что считать редактируемостью? BSP можно открыть в BSPViewer или Crafty и экспортировать в виде OBJ. Потом в юнити запихиваешь и все.
Я конечно не разбираюсь в классических языках и технологиях, но вроде как лайтмаппинг, который можно сделать в юнити, ничуть не хуже, чем тот который был "тогда". А энтити и расположение лампочек можно и руками сделать, загрузив карту в нетрадиант и посмотрев, что где. http://31.41.40.221/dm4/dm4.html вот карта сделанная так. И РТ тени нафик не нужны, лайтпробов достаточно.
Не, ты фишку просто не понял.
Импортировать уровень как .obj и порасставлять на нём обьекты вручную любой школьник сможет.
Лайтмамы юнитевские запечь в рантайме ты не сможешь, и даже если бы мог, эта процедура длилась бы слишком долго.
А это - загрузчик оригинальных файлов в рантайме. Почти любой .bsp файл от goldsrc может загрузится вобще без какой либо обработки.
да, я таки не понимаю. Оригинальные файлы - это тот же самый уровень + лайтмапы, которые пеклись отнюдь не в рантайме, я очень хорошо помню, что пеклись они сука часами... Не все ли равно как именно грузить? В чем такая особая соль работы напрямую с bsp, кроме экспонатно-музейной ценности?
> В чем такая особая соль работы напрямую с bsp, кроме экспонатно-музейной ценности?
Ну, примерно главная идея и лежит в этом.
Хотя вобще, я просто люблю обмазываться несвежими спецификациями и делать читалки. Пикрелейтед - карта из МЕСТИ БОКСЁРА в Unity, загруженная в том же рантайме через читалку .ms3d (да, в оригинальной игре файлы хранятся именно в этом формате)
К тому же - всё это добро очень помогает набить скилл.
почтительно снимаю шляпу. GD-археология.
Привет всем
Подскажите как реализовать скрипт, суть такова:
Труба а внутри объект (игрок)
Нажимаем на A/D и перемещаем игрока по стенкам трубы
Как примерно, можно даже без трубы чтобы он просто так вращался.
формула круга же, епт
Радиус, синус, косинус, квадрат координат, корень, Пифагоровы штаны. Не? Незнакомые слова? sqr(x) + sqr(y) = sqr(r)
Ты либо еще в 5-м классе, либо ты вообще всю школу проебал. Бросай геймдев, иди охранником. Не мучай себя.
Не депрессируй его. Если есть желание, то он со всем разберется. В конце концов можно спросить на дваче, и тут решат твои проблемы.
Ну ты ему еще посоветуй на физике все это сделать. Если у человека фундаментальные проблемы, библиотечные методы ему не помогут. Ну пустит он сейчас шарик по орбите с RotateAround, а через полчаса прибежит с новым вопросом "а как мне сделать полоску хелсы". Надо чтобы он написал сам RotateAround, а потом уже использовал библиотечные методы, понимая что и как. Иначе это бессмысленный онанизм.
Джуниор попросил подсказку в реализации скрипта. Одновременно, он не просил сделать скрипт за него.
Пример кода из справки - и есть именно такая подсказка.
И он не говорил, что он хочет стать программистом, может он вообще модельщик или художник, а этот скрипт будет первым и последним в его жизни.
Следовательно, в данном случае ссылка на справку является достаточно полным и в нужной степени лаконичным ответом.
Да, мы не знаем этого джуниора. Дали ссылку, хорошо. Но кем бы он ни был, факт в том, что справку самостоятельно он открыть не может. Будешь с ним нянчиться? Или же мы скинем человека в воду и пусть он научится плавать hard way. И вскоре он придет с прототипом игры, а не со школьным вопросами.
Апдейт. Я не против конкретно этого анона с пробелами в тригонометрии. Ему здоровья и успехов. Я просто решил поворчать про юнити, унрил, вот это все. Ноды, ассеты. Сам я тоже далеко не Кармак, но оглядываясь на свой путь учения, мне думается, что лучше все же начинать с восполнения пробелов в азах. Они есть у всех (кроме Вассермана и Норриса). И восполнять их придется в любом случае. А движки дают ложную иллюзию всемогущества. Что-то вроде "да нахера мне линейка, вот тут методы готовые". Я просто очень жестко дал человеку понять, что если он хочет идти вперед и делать игоря, то нужна, нужна ему будет и линейка и тригонометрия и матрицы и логика и двоичное счисление и все такое. Движки оттягивают этот момент когда человек понимает "я дурак, открою книжку". Время тратится впустую. Пусть сначала будут книжки. Я так щитаю. И он будет уже как джедай потом щелкать методы из справок.
>справку самостоятельно он открыть не может
У меня иногда бывает так, что я не могу нагуглить ответ на вопрос, либо потому что не могу сформулировать его в нужных терминах или не хватает знания английского или просто случается заморочка. В таких случаях я обращаюсь к знакомым, а если это не помогает - к тематическим форумам и группам. И как правило это работает! Забавно, что иногда решение возникает в мозгу просто на этапе написания вопроса.
Однако я обратил внимание на такой интересный момент: некоторые участники этих форумов и групп априори считают, что ВСЕ, кто задает сообществу вопрос, сложность которого не вызывает никаких затруднений у них самих - не использовал предварительно поиск, не изучал справку, не пытался разобраться методом тыка, не анализировал ситуацию, а сразу посмел начать задавать вопросы им, высшим существам. Только на основании того, что НЕКОТОРЫЕ действительно так делают.
Конечно же, нянчиться я ни с кем не собираюсь. Но и уподобляться сварливому, брюзжащему о беспомощности джуниоров седомуду тоже не хочу.
Ну это не stackoverflow. Это двач.
Тебя может еще и ОП-пост напрягает? Несерьезный же какой-то он.
>не использовал предварительно поиск, не изучал справку, не пытался разобраться методом тыка, не анализировал ситуацию
Взял и сам же подлил еще говнеца не беднягу-джуниора.
Как быть?
Помоги мне, анон, молю.
Откуда нам знать? В апдейте хуета какая-нибудь у тебя, профайлер же показывает
У них мозг есть? Может ты каждый кадр расчитываешь их поведение и стратегию. Надо делать это пореже - 5 раз в сек досточно.
Хз что у тебя там в фиксет упдейте кроме ИИ.
погадал
>>122668
Ничего. Просто выходит, что независимо от расстояния мобы активны каждый кадр. Все мобы, со всей карты. Вероятно следует сделать нечто вроде триггера, отключающего мобов за рамками сферы (предоложим 100 метров) и включающего их, когда они внутри неё.
Гугл советует:
function OnTriggerEnter (c : Collider)
{
if (c.CompareTag("Player"))
{
enabled = true;
}
}
function OnTriggerExit (c : Collider)
{
if (c.CompareTag("Player"))
{
enabled = false;
}
}
Это, как я понял, повесить на всех мобов?
Зачем ты спашиваешь, если сам все знаешь.
>Гугл советует:
С это и надо было начинать.
>Это, как я понял, повесить на всех мобов?
Очевидная очевидность очевидна.
Что-то у тебя дохуя сборка мусора жрет и others. Ты что? Ебанутый? Ты что там делаешь?
Пикча отклеилась. Я конечно не знаю, сколько у тебя там мобов, но вот нагрузка с 6 ботами, которые тоже просчитываются вне зависимости от расстояния.
Мой вопрос к Единству не относится, но отдельный тред создавать не хочу:
Как обычно делают collision detection? Вытаскивают данные прямо из модели в рантайме, или делают карту коллизий из проекции модели?
Аналогичный вопрос по определению высоты.
>Чому у вас нет общего ньюфаг-треда?
На борде живет дух старой школы. Здесь каждый тред такой.
Что-то утебя вопросы какието гнутые.
>Как обычно делают collision detection?
Ну в редакторе или двиге расчитавают ограничивающий объем для модели. Обычно это сфера или коробка, для особо двинутых детекций есть конвекс(силуэт по-русски). Для повышения качества пересеченй сложных фигур использут лоды(уровни детализации), обьемы организованы иерархически и на самом дне находится конвекс(силуэт по-русски). Вот. Затем все объекты индексирутся по пространственной сетке, дальше проверка на пересечение ограничивающих объемов "всех со всеми" попавших в одну группу в сетке.
>Аналогичный вопрос по определению высоты.
В смысле ландшафт? У ландшавта есть карта высот(текстура , один пиксель = одной вершине в сетке), надо определить в какою клетку попал обьект, выбрать соотвеструющий приксель из текстуры и превести его из цвета в реальные координаты. Затем прото прировнять у обьекта координату высоты(у или z) найденой высоте.
написал хуиту и доволен
Когда-нибудь, лол.
Вот тебе дается рисунок, и ты должен мышкой его повторить. Обычный контур, ничего сложного. Чем ровнее тем больше очков. Как такое реализовать? В голове не укладывается.
Определение выполнения по проценту покрытия контура + начисление очков по доле внеконтурных пикселей.
Гугли процедурное изменение моделек
Так почему же в /гд никто не создал убийцу Митбоя? Тут же явно есть очень секущие во всем этом.
Не, ну серьезно. В чем такая сложность сделать реально хороший платформер? В идее или реализации. Я пока что проблем с реализацией не увидел.
Серьезно. Все просто ждали когда ты придешь и сделаешь и станешь богатым и известным. Абсолютно серьезно. Это действительно очень просто. Просто все мы очень хотим, чтобы это был именно ты и никто другой. Делай, мы уже ждем и подключаем геймпады.
Господи, еще один ебан.
На самом деле хорошую игру сделать сложно. Чертовски сложно.
Как и нарисовать хороший рисунок, придумать хорошую мелодию и снять хороший фильм. Конечно, любой ротозей посмотрит на твою картинку и скажет что это хуйня и так он сможет левой ногой нарисовать.
Но именно в этом все и дело. Именно в этом вся проблема. Сделать так просто и так гениально. А что и чем не важно.
Поэтому даже если бы придумали кнопку "Зделать пиздата", у нас не появились бы охуенные игры. Потому что для этого нужно упорство. А инструмент это дело второе.
Тебе не митбоя надо побеждать. Тебе надо побеждать Braid, Shank, Mark of the Ninja, FEZ, Rayman Origins/Legends. Обыграйся в них и ты все поймешь.
Не сложность. Митбой дейтствительно прост в реализации и прост графически. Как и большинство игр других жанров. Тонкость тут в том, что когда авторы митбоя представили миру митбоя, митбоя до этого не было. А все что ты соберешься сейчас разрабатывать - уже есть. Серьезно, ни одна из твоих идей не будет свежей на этом этапе. И никому твои убийцы нахер не вперлись, как бы просто они не делались. Пройдет много лет, прежде чем ты поймешь что означают эти два слова - Game Design. А потом тебя будут ждать фейлы, когда в середине разработки своего "хита" ты увидишь, что кто-то выложил такое же в стиме. Можешь перестать потирать ручонки - чуда не будет. Готовься дохуя работать.
С нуля обмажься юнити.
Тебе же сказали - делай. Мы ждем. Пока мы видим что ты пиздоболишь на дваче, вместо того чтобы работать.
йеп. пользуюсь чем-то вроде этого: https://www.youtube.com/watch?v=IX041ZvgQKE
>>122755
попиксельно как. сделай себе на гуи(который в текущем варианте внезапно отлично на это сгодится) какой-нибудь аналог карандаша пэйнта и сравнивай перфоманс по удачным пикселям.
По нажатию на экран происходит ХУЙНЯ. Но на экране есть еще кнопка. По нажатию на кнопку происходит КНОПКУ.
Я тыкнул по кнопке и произошла ХУЙНЯ и НЕЧТО.
Как мне сделать так, чтобы по нажатию на кнопку всякая ХУЙНЯ не происходила?
Вопрос уничтожент.
Как всегда, стоит мне написать проблему здесь, как тут же я нахожу решение.
>>forum.cgpersia.com
Анон, кинь в меня ссылкой где там ассеты лежат, а то на главной какие-то 3демаксы, юникряи...
А еще лучше если скажешь где своровать вот эти два ассета
http://unityassetreview.com/assets/26450
http://unityassetreview.com/assets/6040
Они есть везде. Но не забудь спросить: "Могу ли я задать вопрос по js?".
Ок. Могу ли я задать вопрос по js? Так как я сам в js не шарю.
Не суть в общем, дело такое:
Есть сворованный с ютуба скрипт.
#pragma strict
var FootSteps : AudioClip []; // Таблица звуков.
private var StepTime : float = 0; // Время шага.
var audioSource : AudioSource;
private var stepping : boolean = false; // Шагаем? По умолчанию нет.
var controller : CharacterController = GetComponent(CharacterController);
function Update () {
if(controller.isGrounded){ // если персонаж на земле тогда...
if(!stepping){ // если персонаж не шагает тогда...
if (Input.GetButton("Vertical") || Input.GetButton("Horizontal")){ // нажата ли клавиши ходьбы.
StepTime = 0.5; // назначаем время одного шага.
footfall();
}
}
}
}
function footfall(){
stepping = true;
audioSource.PlayOneShot (FootSteps[Random.Range(0,FootSteps.length)]);
yield WaitForSeconds (StepTime);
stepping = false;
}
мне рисует ошибки: пиклирейтед
Не суть в общем, дело такое:
Есть сворованный с ютуба скрипт.
#pragma strict
var FootSteps : AudioClip []; // Таблица звуков.
private var StepTime : float = 0; // Время шага.
var audioSource : AudioSource;
private var stepping : boolean = false; // Шагаем? По умолчанию нет.
var controller : CharacterController = GetComponent(CharacterController);
function Update () {
if(controller.isGrounded){ // если персонаж на земле тогда...
if(!stepping){ // если персонаж не шагает тогда...
if (Input.GetButton("Vertical") || Input.GetButton("Horizontal")){ // нажата ли клавиши ходьбы.
StepTime = 0.5; // назначаем время одного шага.
footfall();
}
}
}
}
function footfall(){
stepping = true;
audioSource.PlayOneShot (FootSteps[Random.Range(0,FootSteps.length)]);
yield WaitForSeconds (StepTime);
stepping = false;
}
мне рисует ошибки: пиклирейтед
1. Это не JS.
2. Прочитай сообщения об ошибках. Попробуй заменить
var controller : CharacterController = GetComponent(CharacterController);
на
var controller : CharacterController = null;
, а в конструкторе(наверняка "function new(…" или "function ИмяКласса(…") вызвать функцию GetComponent.
>var controller : CharacterController = null;
Заработало. Спасибо. Теперь такой вопрос, в чем была проблема? Мне нужно понять чтобы такого больше не было.
function OnTriggerEnter (other : Collider)
{
if (other.tag = "player")
{
Application.LoadLevel ("0");
}
}
Почему ругает " = "?
У тригера - ГО имеет бокс колайдер 2Д с галкой триггер, и скрипт этот:
function OnTriggerEnter (other : Collider) {
if (other.tag == "Player") {
Application.LoadLevel("0");
}
}
Уровни в билд сетингс назначены, "0" - название (НЕ номер) слудующего уровня.
Хули он ходит сквозь триггер сукаблядская?
Так вот, если я вызову этот метод setTrue прямо в start скрипта 2 - то все работает, а если из скрипта 1 вызываю скрипт2.setTrue - то флаг меняется на ТРУ в методе setTrue, а в update этого изменения не видно. Т.е. значение переменной меняет в методе, а для объекта класса ничего не меняется. Причем, если я меняю любые переменные класса, трансформ например - они меняются только в пределах метода, а для всего экземпляра класса - нет. Как такое вообще может быть?
Вот, у чувака в точности моя проблема, но я так и не понял как он её решил,
GetComponent<Movement>()
я ведь тоже получаю экземпляр объекта через GetComponent.
http://answers.unity3d.com/questions/682798/calling-function-from-other-script-doesnt-change-i.html
Это копия, сохраненная 16 августа 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.