Это копия, сохраненная 28 ноября 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
http://unity3d.com/
Торренты:
http://cgpeers.com/torrents.php?searchstr=unity
Сохранение форматирования кода:
[code]код[/code]
Предыдущий тред:
>>123434
А я люблю обмазываться не свежими ассетами и таскать их мышкой. Каждый день я хожу по ассет стору с черным винтом для ассетов и собераю в него все ассеты которые вижу. На два полных винта целый день уходит. Зато, когда после тяжёлого дня я прихожу домой, иду к компьютеру, включаю юнити...ммм и сваливаю в нее свое сокровище. И таскаю ассеты мышкой, представляя, что меня поглотил единый организм юнити. Мне вообще кажется, что ассеты, умеют думать, у них есть свои семьи, города, чувства, не удаляйте их в корзину, лучше приютите у себя, говорите с ними, ласкайте их.... А вчера за компьютером, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в ассеты, рыбы, водоросли, медузы, все из ассетов, даже небо, даже Аллах.
Предыдущий тред >>109094 в бамплимите
Полезные ссылки:
http://docs.unity3d.com/Documentation/ScriptReference/ справка по скриптингу в юнити
unity3d.ru - Русскоязычный форум
forum.cgpersia.com - главный пиратский форум для всех юнитибогов, огромная свалка, в которой при желании можно найти практически любой ассет для юнити
https://mega.co.nz/#F!YBNjmZZa!BcEIxhmg6ykJivStEQXVQg -
Сборочка ассетов от доброго анона на 48 Гб. Запускать через хром.
Также была длинная подборка линков от анона, но, видимо, проёбана.
Залей на дропбокс в паблик и выложи ссылку
сделай Web build, результатом будет 2 файла с расширениями .html и .unity3d. Оба файла нужно залить на хостинг. Например 3owl.com (бесплатный) или cishost.ru (платный, бесплатно первые 2 недели). В любом случае - будет домен, заливаешь файлы по ftp, сборка будет доступна по адресу домен/названиесборки.html
либо можно использовать специализированный хостинг юнити-веббилдов, например webplayerbuild.ru, там нужно будет загрузить только .unity3d файл и выбрать шаблон.
webplayerbuild.ru
Использую взломанную юнити, ворую ассеты. Если выложить игру на маркет например, но ко мне будут предъявлять претензии. Какие подводные камни?
Обесни зачкм тебе выкладывать игру на моркет. Если зороботать денег то купи юнити. Ты успеешь купить на заработанные и перевыложить билд с нормального ключа.
Если бесплатено просто дать людям свою егру тода к тебе никто не приебеться.
Еще один из /izd, гоните уебка!
Все сейчас делают через фёстпирсон, потому что задний вид у них не обновлялся 100.000.000 лет, вообще полное говно, инерция, камера основана на модели а не наоборот. Спизди ассет, никто не узнает.
Просто эта хрень у меня там не только в стандартном. Но уже решил с 3rd контроллером, просто каким то образом слетела идл анимация.
Трахаюсь уже какой день с этим уебищным Mekanim. Нашел видео уроки от одного дядьки на ютубе, и вот нихрена не получается. Просто пидорство какое то. Когда другие проекты смотришь, то вроде удобно, и даже более чем. Но у меня никак не получается адекватно сделать персонажа.
скачай sample assets (http://u3d.as/6ft) и используй оттуда все. Стандартный 3rd контроллер устарел на технологическую эпоху уже.
>уебищным Mekanim
не смог разобраться с крутейшей фичей - кричи на каждом углу: "кривое говно!"
как трогательно
Я ведь написал, что это удобная вещь.
Асло, реквестирую годных и подробных туторилов на русском языке, по Mekanim.
А думал тут будешь таскать ассеты, в итоге так глядишь и соберешь свою игруню.
Ан нет, нужно кодить точнее перебирать все доступные варианты которые нашел в гугле по тому или иному вопросу, платить 50 тысяч рублей и страдать.
Вы ведь обещали что все так просто будет!
Все итак проще некуда, ебаный ты дегенерат. Если ты думаешь, что это сравнимо с написанием своего движка - я ссу тебе в рот. Если ты тупой Кирилл и думаешь, что можно на чем-либо сделать игру мечты, нажав пару кнопок - я ссу тебе в рот. Если ты даже не можешь осилить додиез на уровне массивов, тебе не место в гейбдеве, - я ссу тебе в рот.
Просто умри, бесполезный кусок говна. Ты никогда не добьешься успеха.
Как и ты.
Крутейшего там много чего - один ретаргетинг анимаций чего стоит! Нодовый редактор контроллера анимаций опять же. Да чего и говорить. Пусть каждый решает сам. Не нравится меканим - поставь себе 3.5 и сиди там как сыч. Бленди анимации скриптами.
Если хочешь просто таскать ассеты - поставь любой фреймворк или демо-проект от юнитеков, найди ассетов на замену и таскай. Хотя бы банально сделай roll-a-ball тутор, а? http://goo.gl/MB8G9m
И возражу - все очень просто, даже с кодингом. Суть юнити в том, что она превратила адский труд в просто труд. Но никто не говорил, просто не мог сказать, что ты сможешь сделать что-то, ничего не делая. Это категориально невозможно
Планирую писать джва дэ под мобильные платформы.
Делаю RigidBody.SweepTest против MeshCollider (Дефолтный Plane). Если точка касания находится на самом треугольнике, возвращается корректная нормаль (Верхняя пикча, жёлтая линия), однако стоит направить Sweep на край треугольника, как нормаль тут же идёт по пизде и возвращается некорректной; Такое ощущение что берётся первый попавшийся треугольник, с которым куб столкнулся гранью а на остальные кладётся хер.
Никто не в курсе как мне получить корректную нормаль на всей модели? (В теории, вместо этого Plane'а будет какая-либо модель).
Затрахался мальца. Рестартнул юнити целиком. Бага самоликвидировалась. Код все тот же.
Это нормальный ход поршня для сего супер-тулза?
Да ты говноед ебаный смотришь уроки такого же говноеда. Еблан. Посмотри оффициальные туторы по Меканиму, пидор.
у анимируемого объекта в сцене удали компонент animator и добавь animation, у модели тип рига поставь legacy
но это жи тупо! меканим точно также можно использовать даже для дверей и сундуков, анимируя их встроенными средствами. По сути - та же старая система, но с новыми удобностями(да, перетащить анимацию в контроллер мышкой удобнее, чем указывать ее имя в скрипте). Но нет, блядь, хотим жрать говно...
фактически, то что ты сделал, эквивалентно AssetDatabase.Refresh
Но по идее то конечно все скрипты, которых коснулись изменения должны рекомпилиться, то есть то, что случилось у тебя - не совсем обычно.
Блядь, и как я недодумался?! Ты понимаешь, что не смотри сюда, пидор я не знаю английского. И кстати, интересно это ведь очень полезная штука, а почему туториалов на русском нет? Может хоть бы перевел кто, а лучше свои сделал.
Но это говно для даунёнков. Самое важное же что меканим с какого-то хуя берёт на себя обязанности скриптоты, а это очень плохо
Они камеру сделали ребёнком модели ГГ, а на саму модель хуйнули mouselook.
Господа, это пиздос.
Действительно
Английский - это самый важный язык для кодера. Не знаешь его - будешь сосать постоянно.
например:
\tprotected class container{
\t\tint val = 0;
\t\tpublic container(int some_val){val = some_val;}
\t}
\tprotected class inherited_class : container{
\t\tpublic inherited_class(int some_val) : base (some_val){}
\t}
\tList<container> lib = new List<container>();
\tvoid Start(){
\t\tlib.Add(new container(123));
\t\tlib[0] = (inherited_class)lib[0];
\t}
я получаю Cannot cast from source type to destination type. а как сделать?
Мой персонаж при повороте камеры поворачивается с едва заметным подлагиванием, однако это нервирует. Памагай.
Нет, поворот не в FixedUpdate().
Никак. Если бы у тебя в наследнике было несколько полей - какое бы им значение по твоему передалось?
Можно вот так естественно:
container A = new inherited_class(123)
...
Да, я знаю что наследственные классы можно хранить в том от которого они наследуются.
передался бы нулл и меня бы это устроило. но раз нельзя, то писать костыль на этот случай не хочу.
спасибо за ответ.
Бампирую. Поворот персонажа кажется идёт позже апдейта камеры.
LoorАt по нормали стены?
а как ее придумать. Есть вобще стратегии на юнити, на код которых можно посмотреть?
>а как ее придумать.
Ну а что таем придумывать. Для начала, сделаий ИИ школорашера: добывает два вида ресов - строи три казармы - НАБИГАЕТ базовым военом. Потом его усложнишь и приспособишь.
>Есть вобще стратегии на юнити, на код которых можно посмотреть?
Загугли, будь навсегда лаской. Я не знаю.
Я кажется протупил: ты говоришь как сделать стратегию как игру, а я как ИИшник, лол.
Если как игру: попробуй собрать геймобжект который может выполнять базовые приказы любой стратежки. Ну и взаимодействовать с другими такимиже обжектами.
Нет, в первый раз ты все правильно понял. Я уже кое-что нагуглил
Я - Кирилл, который хорошо прокачал скилл в программировании. И даже довёл одну из своих простых Игорь в продакшн.
И вот, наконец, решил сделать чтото посложнее, чем тупая карточная игра. Поэтому обмазался мануалами по юнити и стал усердно готовиться к началу производства Игоря, напоминающего это говнище: https://play.google.com/store/apps/details?id=com.fingersoft.hillclimb
Так вот, терпеливый, анон, есть два стула:
1) На одном стуле появившийся модуль в юнити 4.3 для работы с 2д игрушками и куча уроков к нему
2) Плагин 2dToolkit с еще большим количество уроков.
Что выбрать, анон? Под что подтачиваться?
Ванильный юнити вполне себе хорош для 2д.
Слепил на нём masterspark.zz.mu/dyatel , брат жив, зависимость есть.
Есть камера и персонаж. Камера поворачивается независимо от персонажа вокруг него, а персонаж при нажатии WASD бежит в сторону относительно камеры.
Всё вроде бы просто решается через transform.TransformDirection, но тут проблема — камера может смотреть и вверх и вниз, а персонажу можно ходить только в горизонтальной плоскости.
Помоги.
Я использую 2дтулкит, а вот физику использую стандартную из 2D Unity 4.3.
Есть: плоскость с геймобжектами разных форм и цветов в случайном порядке и случайной формы, на них прикреплен скрипт который при их создании заполняется нужной мне информацией и там есть значение из энам : инт.
я хочу получить карту этих предметов с видом сверху, которая бы хранилась в инт[,], где по х,у значению хранился бы инт значения из энама.
попробовал делать рэйкастинг и каждый раз делать геткомпоненнт - вышло медленновато.
подумал что можно сделать сорт коллекции, или другой 2д массив с этими геймобжектами и для каждого из них делать гемкомпонент только один раз. после чего на все нужные кординаты после рэйкастинга совать нужное число.
но не знаю какой способ быстрей, или как лучше его выразить.
public class PlayerControl : MonoBehaviour {
public KeyCode MoveUp;
public KeyCode MoveDown;
public float speed=10;
// Use this for initialization
// Update is called once per frame
void Update () {
if (Input.GetKey (MoveUp))
{
rigidbody2D.velocity.y = speed;
}
}
}
Юнити выдает ошибку пикрилейтед. Что делать?
>rigidbody2D.velocity.y = speed;
Что за спид? У тебя тип данных rigidbody2D.velocity.y не совпадает с типом данных speed. Ньюфаг, учи C#.
>public float speed=10;
а, вот что за спид. Все, как я и говорил. Код форматируешь как лох. RTFM
>public float speed=10;
Алсо, скорость должна быть вектором. У тебя же все на плоскости происходит. Ты еще и ньюфаг в матанах. Ты в каком классе? Физику уже начали проходить?
Заебал. Просто RTFM, написание игр отложи пока что, подучи матан и C#. Сходу у тебя нихуя не получится.
http://docs.unity3d.com/ScriptReference/Rigidbody2D-velocity.html
>The value is not usually set directly but rather by using forces.
Это значит, что тебе следует менять velocity не напрямую, а через механизм_приложения_сил_Юнити, с которым я сам незнаком. Но да, как ты писал в своем тредике, можно попробовать поменять скорость напрямую, при этом скорость должна быть вектором. Ибо по ссылке написано вот это:
>var velocity: Vector2;
что значит, что это вектор двухмерный.
public float speed = new Vector2( 100500, 100500 );
rigidbody2D.velocity = speed;
Сам в юнитях не шарю, может и не заработать.
Блять, знаю я все это просто в видео, по которому я обучаюсь
http://www.youtube.com/watch?v=hCysoAoV3dc автор спокойно присваивает velocity.y значение и норм. Алсо, следующий код работает, и я не до конца понимаю, почему.
void Update () {
\t\tif (Input.GetKey (MoveUp)) {
\t\t\t\t\t\tVector2 v = rigidbody2D.velocity;
\t\t\t\t\t\tv.y = speed;
\t\t\t\t\t\trigidbody2D.velocity = v;
\t\t\t\t} else {
\t\t\tif (Input.GetKey (MoveDown)) {
\t\t\t\tVector2 v = rigidbody2D.velocity;
\t\t\t\tv.y = -1*speed;
\t\t\t\trigidbody2D.velocity = v;
\t\t\t\t}
\t\t\telse
\t\t\t{
\t\t\t\t\tVector2 v = rigidbody2D.velocity;
\t\t\t\t\tv.y = 0;
\t\t\t\t\trigidbody2D.velocity = v;
\t\t\t}
\t\t\t
}
Может объяснишь?
Юнитей у меня нету, проверить оба варианта не могу. Вот это однозначно колдовство:
Vector2 v = rigidbody2D.velocity;
v.y = speed;
rigidbody2D.velocity = v;
Видяшки не смотри, делай так:
>The value is not usually set directly but rather by using forces.
Видел как это происходит автоматически, но у меня не выходит. Приходится вручную, и происходит это довольно долго, и само собой неправильно. Есть способ сделать это легче? Или может я просто неправильно настраиваю? Как это делать правильно?
На примере твоего дауна понял зачем нужна инкапсуляция в ООП. Какие же вы жалкие уебки, ну поймите, что в ваших хуюнитях обьекты по ссылке блядь передаются! Можешь в обоих случаях убрать rigidbody2D.velocity = v и оно будет всё равно меняться.
А вообще нельзя так менять переменную, есть специльные методы бля! Юнитидевелоперы не для этого вам не стали инкапсулировать все поля, чтобы такие дауны как ты, пытались что-то сделать, сууууука.
Долбоебы везде, ёпт.
Пиздос! Нихуя не знает, зато лезет поучать.
Vector2/3/4 - ValueType, Struct, переменной присваивается только копированием. ValueType не может быть равен null.
> А вообще нельзя так менять переменную, есть специльные методы бля!
Это не переменная, бля, это Property, при присвоении которой вызывается метод Set, а при чтении - Get, синтаксический сахар чтобы нигде не писать GetVelocity(), SetVelocity()
Любая ValueType возвращённая из функции это уже копия той переменной которую ты вернул. Так что изменения на возвращённом обьекте не относятся к обьекту хранимому внутри класса. После изменения, его нужно присвоить обратно.
> Долбоебы везде, ёпт.
Кто долбоёб? Ты долбоёб, ёпт!
При чем тут передача по ссылке, дибилушка? Если убрать эту строчку и создавать новый вектор, то скорость по x будет зануляться.
>>130564
Разница в том, что при вызове rigidbody2D.velocity ты получаешь каждый раз новый вектор с координатами объекта на момент вызова (ебучие свойства шершавого...). Полученный вектор никак не связан с объектом и запись rigidbody2D.velocity.y = 10 ни к чему абсолютно не приведет. Создастся новый вектор, поменяется у него координата и он канет в небытие. По этому юнити и ругается на тебя. Правильным в данном случае как раз будет получение вектора текущей скорости (Vector2 v = rigidbody2D.velocity), проведение нужных изменений и запись полученного вектора в свойство velocity (rigidbody2D.velocity = v), что собственно и показано во втором примере.
ну вот допустим у тебя 4 анимации - ходьба вперед, назад, стрейфом влево и вправо. Управляется все это через 2 параметра - движение вперед-назад и влево-вправо, которые изменяются, допустим, от -1 до 1 каждый. ну и ставишь в дереве WalkForward 1, 0; WalkBackward -1,0; StrafeLeft 0,-1; StrafeRight 0,1;
Так в чем вообще проблема?
Вы только посмотрите на этого умника.
А что ты об этом скажешь?
Nullable<int> allah = null;
Console.WriteLine(allah.GetValueOrDefault());
О чудо, я присвоил null, но при этом я всё равно могу обращаться к этой структуре. Значит нет никакого нуля, пидрилюк! Просто там чит с использованием explicit. Маму ебал твою!
Соснёшь. Если делаешь игру на мобилки, то нужно обязательно кешировать объекты и заранее создать нужное количество.
Имеешь в виду, что, грубо говоря, эти 100 пулек генерируются в начале где-то за пределами камеры и при выстреле просто переносятся в точку?
Да. Вот я как-то делал для одной мобильной игры:
http://pastebin.com/qPiVpt9F
http://pastebin.com/vh8aMJCD
http://pastebin.com/8uZeC8gh
InitialPool кинь на ГеймОбджект на сцене.
Ясно, спасибо.
Для вывода одного тайла требуются четыре вершины (2 треугольника). Создаёшь меш с нужных количеством вершин. Допустим, на экране отображаются 100x80 тайлов, значит нам нужно 100 * 80 * 4 вершин. Вся графика тайлов должна быть в одном атласе. Текстуру нужного тайла задаёшь через UV. Таким образом для вывода всех тайлов тебе понадобится всего лишь один DrawCall, что охуительно быстро. Если один из тайлов пуст, то просто задаёшь ему в UV ноли.
Тогда давай отшлёпаем синеблядь.
> не раморачиваться и написать самому
> не раморачиваться
> написать самому
Ты какой-то ебанутый.
У меня опыт юнити ~1.5 часа. После того, как я сделал персонажа, управление и плоскую платформу (оба rigidbody, платформа кинематик) и после задания объекту велосити он проходил расстояние, а потом, сука, возвращался назад (на плоской платформе с кинематиком) по непонятным мне причинам, я понял, что быстрее сам напишу, чем разберусь с этими делами. Опыта геймдева не имел раньше, если что.
Спасибо. Просто я знатный рукожоп и не в первый раз сталкиваюсь с ситуацией, когда готовая реализация адаптируется мною дольше, чем быдлокодится заново.
Первая игра сына Кармака.
http://www.1k3c.com/
Зацените как оно, а то мне приблуды юнити не хочется устанавливать.
(например для TBS-ины, да...)
Да, всё правильно подозреваешь.
>насколько такая концепция построения приложения годится для чего-то сложнее Марио-лайк-гамез?
Нормально годится для любых жанров игр, включая ммо или шутаны
Просто немного непривычно как-то. Я привык сначала придумывать модель данных, а потом на нее уже вешать и вью, и контроль. А тут получается, что вьюшка первична и весь код - это просто обвес к событиям объектов сцены.
Или этот шок у меня от того, что до сего дня я только бизнес-приложения с мелкими БД писал? В гейбдеве так принято?
В Юнити компонентная архитектура.
С этим просто надо смириться и понять как она работает. Ничего сложного в ней нет.
MVC не стоит в нее тащить, будет боль.
Если с нуля пишешь - почему нет. Пример - http://www.badlogicgames.com/wordpress/?p=2668
Интересная ссылочка. libgdx, говоришь. Как вариант, на самом деле. Тем более, что с джавой немного знаком.
Добра, бро.
На самом деле компонентная архитектура очень помогает в геймдеве. Если грамотно разбить крупные цели на небольшие задачи, то смешивая их тем или иным образом можно получать разные результаты. Например можно написать скрипты:
1) для поиска ближайшего объекта с заданным тэгом
2) для поворота в сторону цели
3) для перемещения к цели
При таком раскладе выйдет, что (1)+(2) подойдет для имитации установленной на земле пушки, а (1)+(3) для зомби, который идет к игроку и пытается его убить.
мимо пишу помаленьку свой компонентный движок с использованием libgdx
А то сейчас, если я бегу и жму прыжок, то он останавливается, прыгает вверх на месте, потом опускается и дальше бежит.
Два вопроса:
1) Кто у тебя обрабатывает(обновляет) компоненты (или они сами себя в иерархии)?
1) Как удобно расшаривать состояние одного обьекта на его компоненты?
Вот зомб может идти/стоять/атаковать. Допустим приходит команда от компонента ввода "идти туда", но в этот момент зомб может быть занят атакой на другой обьект и ему идти не резон. Получается надо синхронизировать состояние компонента движения и состояние компонента атаки - и это пиздецома, т.к. этим должен заниматься кото-то третий или атака и движение будут "знать" друг о друге. Для двух еще ладно, но когда их больше совсем грустно.
та управление всем этим все равно должно происходить из одного места. а для зомби адекватным будет управление вообще всеми зомби из одного места.
кстати о ИИ: http://rivaltheory.com/rain/ клевая ссылка с бесплатным решением где как раз есть бихейвор три на эту тему и весьма клевый.
Нужно использовать несколько анимаций. Это довольно очевидно.
1 для прыжка на месте 1 для прыжка в беге, анимация прыжка в беге примерно с той же скоростью перемещения в пространстве что и сам бег.
Вообще - скачай Sample Bets Assets http://u3d.as/6ft и посмотри, как там сделан контроллер для third person, там так круто оформлено, что при прыжке вперед при беге учитывается даже какая нога была выставлена вперед - соответственно прыжок имеет более натуралистичный вид.
сенкс, а что сделать, чтобы было видно, какая анимация сейчас проигрывается? ну там должно подсвечиватся как-то, я видел
1) Обновляет движок например так:
for(int i = 0; i < gameObjects.size; i++) {
gameObjects.get(i).update(deltaTime);
}
Внутри метода update происходит обновление всех прикрепленных компонентов.
2) При добавлении компонента к игровому объекту можно в компонент записывать ссылку на объект, к которому он принадлежит. Таким образом любой скрипт будет иметь доступ к данным объекта.
В общих чертах это будет выглядеть как-то так:
http://pastebin.com/LY9Gv3j2
Логику еще можно доработать, но основная мысль думаю должна быть понятна.
>1) Обновляет движок например так:..
Т.е все компоненты для одного обьекта обновляются одновременно. Так? Это кажется неправильно.
Я думал суть компонентов - это возможная их зависимость от порядка их обновления и других обьектов.
Т.е. напрмер, сначала обновляем все компоненты ввода у всех обьектов, потом считаем передвижение для всех, потом пересечение и колизии(тут зависимость от других обьектов) и т.д. по кол-ву компонентов, а да - самый последний проход отрисовывает это все хозяйство. Была хорошая картинка - не могу счя найти.
>2) В общих чертах это будет выглядеть как-то так:..
Понятно т.е компонет который знает о других компонентах и занимается их синхронизацией. У меня так тоже сделано, но это не айс - невозможно просто накидать компонетов и понадеятся, что между собой они свяжутся правильно, все время нужет это синхронизатор состояний который знает обо всем. И получается один игровой обьект = одному классу синхронизатору - считай уникальный компонет...
>считай уникальный компонет...
на грани год-обьекта, ну нахера тогда компонеты если появился год обьект и проще в лобовую нахуячить все через его методы без опосредованых компонентов. Пикрилейт выше.
тропливость не доводит
нужно чтобы параллельно с Scene или Game было открыто окно Animator, тогда при выделенном в сцене объекте, на котором находится компонент animator, в окне Animator будет видно, какой animation-state
сенкс)))
Ебашьте менеджеры-синглтоны и не ебите моск.
rigidbody2D.AddForce(new Vector2(0,1)*2,ForceMode2D.Impulse);
, а объект исчезает с экрана(думаю, что выходит за пределы).>Т.е все компоненты для одного обьекта обновляются одновременно. Так?
Так. Можно выделить отдельные компоненты, которые будут обновляться в заданном порядке, например:
1) Перемещение
2) Подготовка матрицы трансформации
3) Подготовка данных для отрисовки
4) Определение коллизий
5) ...
Для всего остального порядок не так важен
>И получается один игровой обьект = одному классу синхронизатору - считай уникальный компонет...
Не совсем. Можно написать скрипт AggressiveMobController и повесить его на зомби, скелета, паука, etc. Они все будут подходить к игроку и атаковать с заданным уроном и проигрывая свои анимации под именем attackAnimation. Но если каждый моб будет иметь уникальную механику, то вероятно придется писать каждому по скрипту.
Так бы я хранил список точек-чекпоинтов в центре трассы, а дальше брал бы ближайшие к игроку и от них определял, в какую сторону нужно "повернуть" объект. Может для юнити есть более адекватные варианты?
Vector3.angle не работает, подскажите плз
var target:Transform;
function Update(){
transform.RotateAround (target.transform.position, Vector3.forward, 100 * Time.deltaTime);
if (Input.GetAxis("Horizontal")) {
target.transform.position.x = target.transform.position.x + 1;
}
}
Ну, если по-хорошему, то компоненты не делают ничего. И игровые объекты тоже не делают ничего (более того, они даже не существуют). Есть системы, которые апдейтятся по-очереди, соответственно, сначала обновляется ввод, потом весь ии, потом вся отрисовка. "Ходить" и "атаковать" обрабатываются одной системой, поэтому тут проблем нет. Если в юните не так, то это, конечно, отсос.
>суть компонентов
Возможность собирать в рантайме новые объекты. Возможность легко отключать системы (например, можно вынести обсчёт гравитации в отдельную систему, а потом её отключить и получить космос).
angle тебе угол между векторами дает, тут от него толку нету
transform.position += (transform.position - target.transform.position).normalized * (newRadius - oldRadius)
или
transform.position += (transform.position - target.transform.position)* newRadius / oldRadius
Это помогло спс
transform.position += (transform.position - target.transform.position)* newRadius / oldRadius
Последний вопросик
Хочу перемещать объект вокруг цели, и чёто несоображу что нужно дописать (координаты изменяются а он не двигается)
var target:Transform;
function Update () {
var speed : float = Input.GetAxisRaw("Horizontal") * Time.deltaTime;
transform.Rotate (0, 0, speed);\t
}
Всмысле координаты? В трансформе у него или где?
Если координаты в трансформе меняются а обхект не двигается то возможно у него стоит галочка static
Держи, сам помню ебался долго
http://www.41post.com/4101/programming/unity-rotation-controller
Таки ебусь, завезли.
Хз скачай да попробуй.
Я вот скачал, стал делать первый туториал - какие-то стрелки часов там блядь. Надо менять их ротацию и цвет со временем. Код написал, к объектам прицепил, всё запускается и не движется нихуя.
Так и забил на это говно.
В крестах можно отдебажить, если что не работает, а тут один гуй и костыли. Что блядь там где не так хуй проссышь.
> В крестах можно отдебажить, если что не работает, а тут один гуй и костыли. Что блядь там где не так хуй проссышь.
Посмотрите на долбоеба, который не нашел дебагер в монодевелопе. А если не нравится монодевелоп что вполне естественно, ибо дерьмо есть божественная студия с бесплатным нынче плагином для юнити.
И нахуй вся эта донатная костыльная параша, если я поставил штудию и в ней могу всё делать, используя бесплатные библиотеки с нормальным апи?
Да и уе с хрюзисом давно дешевле этого говна.
>кудах-кудах кукареку я не осилил документацию и бросил, я не собираюсь делать игры, я собираюсь дрочить на код и движок, ведь я умнее всех вокруг, мамка приносит мне обед прямо к пека
Ясно.
Ну мааам, зачем ты так.
Потому что доебали уже. Движок - это, блять, движок, а не инициатор поллюций. Он должен быть шустрым, жрать говно, которое ты ему подсовываешь вместо контента и собственно собирать всё это для употребления сторонними людьми. Дрочка на красоту кода, дрочка на технологию, дрочка на известность бренда, дрочка на ШВАБОДКУ - всё хуйня. Берешь инструкцию и читаешь. Работает - заебись. Не работает - хуйня. Всем поебать на то, ЧТО под капотом у твоего дерьма, если оно не работает. Но все только кукарекают, даже не прочитав блядскую инструкцию. А нахуя? Я НЕ ВИЖУ КНОПКИ СДЕЛАТЬ КРУЗИС, Я УЁБЫВАЮ НА ПИРАТСКИЙ УСРИЛ4. Я НЕ ХОЧУ ОТКРЫВАТЬ ДОКУМЕНТАЦИЮ ПО ДЖВАДЭ, Я ХОЧУ СКОМПИЛИРОВАТЬ ЧУЖОЙ КОД НА КРЕСТАХ ИЗ ПРОТУХШЕГО БЛОГА И ДРОЧИТЬ НА ЭФЕМЕРНЫЕ БАЙТЫ. Я НЕ ХОЧУ ВСПОМИНАТЬ ШКОЛЬНЫЙ КУРС ГЕОМЕТРИИ И ВЕКТОРНОЙ АЛГЕБРЫ, Я ХОЧУ ПРОГРАММИРОВАТЬ МЫШКОЙ aka ТАСКАТЬ СПИЗЖЕННЫЕ МОДЕЛЬКИ И СТАНДАРТНЫЕ ЭФФЕКТЫ А ПОТОМ ОБМАЗЫВАТЬ ИХ СТАНДАРНЫМ БЛЮРОМ И DOF. Проще юнити только гамак, но и тут блять находятся уебки, умудрившиеся не найти дебагер и бугуртить от якобы неполноценности движка. В зеркало, блять, посмотрите. Да ну нахуй всё.
У тебя бугурт от того, что твой любимый инструмент, юнити, не очень-то удобный. Дебажить в нем и правда мучение.
Я люблю только своего кота. А бугурт у меня от уебков, не читающих мануалы. Он разве написал про мучительный дебаг? Нихуя. Он написал про его ОТСУТСТВИЕ. Это значит, что нихуя не был прочитан мануал и даже не был исследован методом тыка монодевелоп, зато кукарекаем. Если бы он написал про хуевую и странную физику, еботу с шейдерами, отвратительный старый гуй, изобретение собственных велосипедов из соплей и костылей для предотвращения мутации игоря в кучу шевелящегося взаимосвязанного говна, в котором даже сам Аллах не разберется - его право, так оно и есть да и не только в юнити, чо уж там Но ёбаный дебагер мне просто жопу разорвал. Вот ведь пидор, у меня джва дня до выкатки работоговна на продакшон, а я тут бисер мечу.
Какими должны быть настройки лайтмаппинга, чтобы было охуенно? А то сейчас хуерга какая-то с непонятными тенями.
Вся суть юнитиблядков. ДАЙТИ НАМ КНОПКУ "СДЕЛАТЬ ХАРАШО" МЫ САМИ НИХУЯ НЕ ЗНАЕМ НИХУЯ НЕ УМЕЕМ
С чего ты начал меня оскарблять? Я не прошу волшебную кнопку, я прошу объяснить в кратце, ведь наверняка много анонов разбираются в этом, и им не составит труда изложить мне нужную инфу в нескольких предложениях.
Шикарно.
И вопрос сегодняшнего дня: а рисовать на спрайте и вообще всякие процедурно-генерируемые текстуры использовать тут можно? А то что-то гугль мне на эту тему уже 15 минут какую-то ахинею выдает.
>для предотвращения мутации игоря в кучу шевелящегося взаимосвязанного говна
Ага, я как раз рядом с этим этапом. Жоппой чую.
Да, можно создавать Texture2D объекты и рисовать на них процедурно. Я только упаковщики делал, но есть плагины, которые рисование реализуют
Спасибо, бро. Но, вроде уже нашлось таки: Texture2D.SetPixels, кажись оно. Будем почитать.
Только расскажи не то что будет в релизной пятерке (я и так знаю где это почитать), а то что уже есть готового в бета
Еще ж 4.6 толком не вышла, зачем так далеко загадывать?
Собственно, подскажите где можно почитать про разные способы генерации паттернов карты, да и вообще карты? сейчас способ их генерации так себе. все фрагменты по периметру делаются водяными, делается несколько случайных островков, а дальше по очереди берется то случайно земля, то случайно вода и делает соседний фрагмент как сам. и есть 30% шанс что на следующем "ходу" появится земля в случайном месте, для компенсации того что в начале фрагментов воды по периметру явно больше, чем земли. это работает и порой выходят клевые результаты, но ничего более клевого я так и не придумал.
>>131711
Да. Рисуется. Только в конце апплайнуть результат надо. например экзампл который я использую для дебага 2д массива с значениями 0f-1f.
public static Texture2D MakeImage(this float[,] array){
\tTexture2D Result = new Texture2D(array.GetLength(0), array.GetLength(1));
\tfor (int x = 0; x < array.GetLength(0); x++) {
\t\tfor (int y = 0; y < array.GetLength(1); y++) {
\t\t\tResult.SetPixel(x,y,new Color(array[x,y],array[x,y],array[x,y]));
\t\t}
\t}
\tResult.Apply();
\treturn Result;
}\t
>>131688
Что увидеть то в итоге хочешь? опции тени находятся в настройках света. еще немного можешь найти в прожект сеттингс > кволити.
Алсо еще есть лайтмапы которые можешь найти в соответствующей менюшке, в которой можно делать пререндереные тени.
Для разных случаев настройки разные.
Выдели под это дело целый день и попробуй разные варианты.
Для начала поставь качество пониже, поменьше отскоков и лучей. Попробуй все варианты. Наиболее понравившийся запечешь с максимальным качеством, но все равно будь готов к тому, чтобы переделывать.
Универсального рецепта нет.
Лучший ланшафт генерится перлином, и его вариациями. Можно накладывать друг на друга перлины, делать маски, делать детали, в общем кучу всего можно придумать.
Да пробовал я всякие нойсы, в итоге выходило слишком однообразно. все что вынес сейчас разве что в сплатмапах и травке применяется.
Это было бы удобно если бы я хотел делать мир генерящийся навроде майнкрафтика, но я хочу чтобы карта состояла из островов. поэтому решил что можно генерировать сразу весь остров целиком.
Использовать его это расписаться в своей криворукости и корявом дизайне. Используй LateUpdate()
Можно писать "x as y". Вернёт null если x нельзя привести к y.
Чтобы не думать, выдели его в иерархии и посмотри что с ним происходит (координаты там в бесконечность уходят или ещё что).
> Что увидеть то в итоге хочешь? опции тени находятся в настройках света. еще немного можешь найти в прожект сеттингс > кволити.
хотеть увидеть плавненькие тени, и чтоб они небыли чисто черными, как у меня сейчас. Я настраиваю силу теней в настройках Directional Light, но это нифига не помогает
>хотеть увидеть плавненькие тени, и чтоб они небыли чисто черными, как у меня сейчас.
Чтобы тени не были чисто черными, на место тени должен ложиться свет, это очень просто.
Что это за свет - свечение неба (Sky Light Intensity) или дополнительные "отсветы" лучей - световой рефлекс (Bounces), а может быть дополнительный дирекшнал лайт без теней или что-то еще - решать тебе.
сенкс)) а как получить более качественный "градиент", а то у меня какие-то "ступеньки" получаются
А где оно настраивается?
>"ступеньки" получаются
чекни в едиторе отображение разрешения лайтмаппинга и настрой это самое разрешение, чтобы клетки были достаточно мелкими, чтобы не было заметно лесенки и достаточно крупными, чтобы сократить время запекания.
Поставь количество лучей побольше, если у тебя "про" версия или просто Quality: High сделай.
Проблема может быть также в само модели, у меня помню был случай, когда на скетчап-модель лайтмапа ну никак не хотела печься ровно из-за кривой развертки.
Вообще, чувствуется, что мануал по лайтмаппингу (http://docs.unity3d.com/Manual/Lightmapping.html) ты не читал, методом научного тыка тоже не разбирался. Исправляйся.
сенкс))
Я нихуя не понимаю, чего ты хочешь от теней. Пикселизации по краям не видно, что тебе еще надо?
Пздц, у меня дежавю от твоего поста. Но хорошо, я покажу поближе.
Видишь? Как-будто какие-то хлопья.
пожалуйста
Но ведь это всего лишь лайтмап с довольно низким разрешением, чего же ты хочешь? Там интерполяция на интерполяции. Если ты ждешь рендера, как в vray, то увы. Это риалтайм, паринь.
В юньке не силен, не знаю много это или мало. Если глазомер мне не изменяет, то на твоем последнем скрине один тексель лайтмапа покрывает примерно 50 пикселей, поэтому и видны переходы. Увеличь в 50 раз, должно стать по идее незаметным в этом масштабе.
Так просвети же.
запеки при 20к, можешь попробовать увеличить final gather rays и/или включи интерполяцию (на твоем скрине она на нуле вроде)
Какие нахуй 20к? У меня пекарня сгорит. В туториалах вообще при 50 текселях запекают http://docs.unity3d.com/Manual/Lightmapping.html
Но ведь они не рассматривают нетекстуренную картинку под микроскопом, как ты.
Ясен хуй, что сгорит. Но тебе же понядобились фотореалистичные тени, шоб как на рендерах, которые, к слову, рендерят кадр минут по 10-15 на хорошем пека.
Проблема в самом юнити-дауне, который не понимает, как работает gpu, как пишутся шейдеры, какие есть популярные техники освещения/затенения, но он хочет ЧТОБ КРУТА БЫЛА КАРОЧЬ КАК В КРУЗИСЕ)) и думает, что сможет получить приличную картинку, накручивая ползунки в движке для дегенератов.
Научись себя вести адекватно, никто не давал тебе права оскарблять кого-либо, к тому же ты ничего обо мне не знаешь.
Ты поехавший, при 2k текселей запекать.
Сколько считалось, интересно?
Поставь 100, ну 200 максимум текстелей на юнит. И лучше увеличь количество лучей.
А вообще на твоем месте, я бы не страдал хуйней.
Запек все на более-менее нормальных настройках, открыл получившуюся карту в фотошопе и применил какой-нибудь "Surface Blur", покрутив его настройки так, чтобы и пятна ушли, и тень не размазалась больше чем нужно.
>>131813
плюс, вот тут тебе правильно сказали, назначь текстуры - это херня перестанет быть видной.
>которые, к слову, рендерят кадр минут по 10-15 на хорошем пека.
Ты вообще хоть понимаешь о чем тут речь? Лайтмапы - это и есть фотореалистичные тени, которые по сути то рендерется, причем на запекание сцены запросто может уйти много часов, а не 10 блядь минут.
Куда ты лезешь с мякинным рылом, да в пекарный ряд?
Прочитай вот вслух, может просветишься хоть чуть: https://en.wikipedia.org/wiki/Lightmap
Не дергайся, паринь. Я знаю, что такое лайтмап, причем гораздо лучше чем ты. Фотореалистичные тени, хихи.
Одна опечатка ничего не значит, с любым может случиться. И судить человека из-за этого может как раз таки, как ты выразился, даун. К тому же неполноценный, ведь полноценный человек никогда не стал бы проявлять бепричинную агресию, так что не позорься лучше, школьничек.
Ты чё, пёс, охуел?)) Ты на двач пришёл или в паблик в вк, почему ты кукарекаешь НИ АБИЖАЙТИ МИНЯ Я ХАРОШИЙ НИ РУГАЙТЕСЬ))
Если тебя обложили хуями - значит, заслужил, никто не будет сюсюкаться с дегенератами.
Не тебе решать, чего я заслужил, а чего нет. И если кто-то агрится без причины, значит ему мозгов не хватает, чтобы понимать, что так себя вести нееельзяяя.
Ну тогда порази меня своими глубокими познаниями. Поведай нечто такое, что ты знаешь гораздо лучше меня, просто в качестве маленькой демонстрации своих несравненных ослепительных возможностей. Если конечно тебя это не обременит, о Великий Гуру!
Обременит, сорь.
>Не тебе решать, чего я заслужил, а чего нет
Правильно, не ему - а мне.
И заслужил ты только говна за шиворот, и то несвежего.
Так-то.
Когда она уже официально выходит-то?
Мне по логике вещей сейчас бы пилить поиск пути для ботов, но думаю подождать до выхода 5, там вроде будет нормальный PathFinding из коробки.
поиск пути еще в 3.5 норм был, да и плагины сторонние неплохие тоже есть, например http://arongranberg.com/astar/ , чего ждать то?
А пятерку можно скачать уже http://beta.unity3d.com/download/4489870828/download.html
содомит, где взял ссылку на 5ю юньку? и что там с запуском, проблемс?
Сам уже скачал, но чет устанавливать пока не хочется.
http://forum.cgpersia.com/f13/unity-v5-x-x-betas-direct-links-valera-medicine-99173/
Нагуглил.
valera, настало твоё время))00
Господи, и что?
Я 4ю крякал третей, теперь пятую крякнул четвертой, те че жалко качать 0.21 мб?
Охуел что ли? Взял быстро скачал и поставил.
Да у меня есть уже для 4й. Я прост думал там специальный кряк для 5й.
ТЕПЕРЬ ПРИ СОЗДАНИИ ПРОЕКТА, ВСЕ АССЕТЫ РАСТАСКАНЫ ЗА ВАС, ВЫ ТОЛЬКО ВЫБИРАЕТЕ ТИП ПРОЕКТА - РАННЕР ИЛИ ТАУЕР ДЕФЕНС ИЛИ КАКОЙ ТО НОВЫЙ ЖАНР "MORE COMMING", НАВЕРНОЕ ЭТО ЧЁ ТО ВРОДЕ ТАУЕР ДЕФЕНСА, ТОЛЬКО ВОЛН "БОЛЬШЕ ПРИХОДИТ", И EMPTY PROJECT ДЛЯ ЛАХОВ.
НУ Я ЗАПУСКАЮ КАРОЧЕ СВОЙ ПРОЕКТ, И МНЕ ГЛАЗА СЛЕПИТ БЕЛЫЙ СВЕТ, ТАК-ЧТО ПРИХОДИТСЯ АЖ ПРИКРЫВАТЬ РУКОЙ ГЛАЗА. КАЖДАЯ МОДЕЛЬКА МНЕ В ЭКРАН ОТБЛЕСКИВАЕТ СОЛНЦЕМ, ВСЁ БЛЕСТИТ, ДАЖЕ НЕБО, ДАЖЕ АЛЛАХ. ИГРА ИЗ КЛОНА MAUNKRUPFT C ОКТАЭДРАМИ ВМЕСТО БЛОКОВ ПРЕВРАТИЛАСЬ В УБИЙЦУ KRUSIS'А. ПОКА Я СМОТРЕЛ НА ОХУЕННЕЙШИЙ ГРАФЕН, КО МНЕ СЗАДИ ПОДКРАЛСЯ НОВЫЙ ИСКУСТВЕННЫЙ ИНТЕЛЛЕКТ И НАЧАЛ ЗАДАВАТЬ МНЕ НЕУДОБНЫЕ ВОПРОСЫ. Я ТАКОЙ БЛЯ НАХУЙ, И ВЫРУБИЛ. ПОШЁЛ СМОТРЕТЬ ЧЁ ТАМ ЗА МИКСЕР СДЕЛАЛИ. А ТАМ КОРОЧЕ ВОБЩЕ ПИЗДОС, ОТКРЫВАЕШЬ ОКНО, А ТАМ КОРОЧЕ БЛЕНДЕРЫ МИКСЕРЫ СКОРОВАРКИ И SKRILLEX РУЧКАМИ ВСЕМИ ВЕРТИТ САМ, НАГЕНЕРИЛ МНЕ САУНДТРЕКА И ЗВУКОВ ДЛЯ ИГРЫ, ТЕПЕРЬ КОРОЧЕ ЗАХОДИШЬ В ДОМ, ИГРАЕТ ТЫЦ ТЫЦ ТЫЦ, А КОГДА НА УЛИЦЕ - ТЫЦ ТЫЦ, БЖЖЖЖ, ТЫЦ ТЫЦ. ВЩЕ ПАЦАНЫ, МОЯ ЖИЗНЬ НИКОГДА НЕ БУДЕТ ПРЕЖНЕЙ.
охуееееть
Это ты юич поставил, дурашка! Вернись в юнитисвинарник!
но мне для полноценного ВАУЭФФЕКТА не хватает только одного:
плагинчика 2d physics extension.
где скачать, анон?
Молю!!!
Твой всегда искренний и честный,
Кирилл
https://www.youtube.com/watch?v=XVv0tzsrtIo&feature=youtu.be
Ебан штоле? Я ж написал, что использую Apply root motion, т.е. анимация сама двигает персонажика
Я почему-то подумал про легаси-мод, когда твой пост читал спать надо больше, видимо, так что да, еблан. А чар цепляется только за эту стенку? После выхода из стенки на землю встает или по воздуху бегает? На видео нихуя не видно. Нахуй ты вообще рут мошон пользуешь, это же лишний черный ящик с дилдаками на твоем пути через кусты?
ну прост я хочу запилить игрулю со всякими паркурными штуками, и думаю, что с apply root motion будет более натуралньо и круто выглядеть.
За все стенки цепляется, при выходе из стенки падает на землю, вот те еще видюшка с няшной музычкой
https://www.youtube.com/watch?v=4_dHHhRrsEY
Дык коллизии-то он обрабатывает, сообтветственно, и застревание именно из-за него происходит. Причем неизвестно, в каком из коллайдеров проблема: в коллайдере чара или в коллайдере то большой еболы, в стенку которой чар заходит. Попробуй удалить еболу и запилить заново, а потом проверь, застревает ли чар.
так он это, колайдером застревает за стену ж. как ты вниз то двигаешь его? тоже рутмоушеном?
Короче, там есть такая штука, Rigidbody.isSleaping, вроде, то есть это свойство возвращает false, если риджидбадя неактивна. Так вот, на продолжительности прыжка риджидбадя неактивна, и после приземления становится активной. Ящитаю, что проблема именно в этом.
> как ты вниз то двигаешь его?
в смысле после застревания? просто иду в сторону и срабатывает гравитация
но при рут моушене же обжект хуй кладет на параметры риджидбоди, кроме коллизий. тебя в пол же не гравитация после прыжка тянет, а анимация.
ты особенный шоль какой-то?
Просто всё коммьюнити - такое же говно, как и ты, которое не может решать поставленные задачи, а только выпрашивает ответы на форумах.
Иди нахуй, пидор. Я делаю все правильно, это косяк юнитиразрабов, что такая хуйня с анимацией.
Какое же ты тупое и бесполезное говно. Не ты, кстати, тот дегенерат, который крутил ползунки с тенями и возмущался, что картинка не как в крузисе? Понимаешь, ты не можешь делать "всё правильно", если нихуя не понимаешь в физике и скелетной анимации, а ты нихуя в ней не понимаешь, т.к. ты дегенерат, и вместо того, чтобы сесть и разобраться, ты продолжаешь крутить ползунки и ругать разработчиков, что не сделали для тебя кнопку "сделать заебись".
Кхм, обосрался с того, что у тя пермабугурт?)))
>>132181
потому что сказал, что не нужно поднимать персонажа используя анимацию прыжка, а нужно из скрипта его поднимать в момент проигрывания анимации прыжка. Но в офф туториалах есть прыжок, и там ниче не сказано за все то, что написали мне.
Алсо скачал файлы туториала, попрыгал - там все норм, на стенах не застревает, поднимается за счет анимации прыжка. Короче, хуй знает, че это.
Посмотри видосики. В каждом школокурсе есть вступительный урок, где показывают интерфейс и основные фичи.
Мы же не в треде про японский язык. Погугли.
Обсуждали уже много раз, большая часть пунктов - субъективная чушь
http://docs.unity3d.com/Manual/TargetMatching.html
Я так понял, оно перемещает персонажа в нужное место, и мы можем указать, на каком этапе проигрывания анимации нам начинать передвигать персонажа.
Я создал пустой объект, к которому должен переместится персонаж. Далее написал такой вот код
[CODE]anim.MatchTarget(jumpTarget.position, Quaternion.identity, AvatarTarget.LeftFoot,
new MatchTargetWeightMask(Vector3.one, 1f), 0, 1);[/CODE]
то есть, персонаж начинает двигатся вначале анимации, и к её концу он должен быть в нужном месте, ага?
А то у меня персонажик как-то не плавно перемещается, смотрите видюшку. Так и должно быть?
https://www.youtube.com/watch?v=y7pRN60jK0s&feature=youtu.be
Соси хуй, пидор. Я сам разобрася, в чем была проблемаблагодаря юнитивскому ворнингу, без вашего говнофорума, где адекватно отвечают 1.5 анона и на каждого спрашивающего по 500 мамкиных тралей, вроде тебя, хуйло. хаха! я победил! да! это победа!
>я победил! да! это победа!
Лол, ты же опять через полчаса приползешь и будешь ныть Я ПИРИПИЧЯТАЛ КАК В ТУТАРИАЛЕ НО НИРАБОТАЕТ ГОВНО ДВИЖОК РАЗРАБОТЧИКИ МУДАКИ((
А вообще, скоро первое сентября, тебе будет не до юнити.
Нет, не приползу. И эт разве что тебе скоро в школу надо идти, а то ты кроме тралиравания ниче не можешь, лузер.
>Дискасс
неплохая статья, немного экспрессивная, заголовок претенциозный, но выводы в заключении удивительно объективные.
Да тащемта все современные движки - говно. Просто у некоторых есть фичи из коробки, которыми можно похвалиться, например, легкость освоения у юнити или масляные тормоза у усрила. Другое дело, что когда пытаешься запилить что-то выходящее за рамки туториала, начинаются муки - и от этого рождаются такие статьи. От сруэнжина у автора бы пукан разворотило покруче аттола Бикини.
Это не движки такие, это жизнь такая. Игра - это программа, а программу не собрать из готовых кусков, ее надо писать, долго и мучительно. В компьютер сайнс эта мечта об идеальном языке/иде/платформе, на которой любой сможет сделать что угодно без проблем, называется "серебрянная пуля". Подробнее здесь можно почитать: http://en.wikipedia.org/wiki/No_silver_bullet
Наивно думать, что несколько разработчиков игрового движка решат проблему, над которой лучшие умы бьются десятилетиями.
Максимум GDпараша.
Не слишком хитро. Есть класс для хранения присоединяемых террэйнов, в котором всякие полезности вроде хватания первого сплатмапа и возвращения его растянутым на нужный размер. И отдельно есть структ для хранения сплат-прототипов и соответствующей ему карты(для удобства. выдергивать нужную карту из одного большого float[,,] как-то неочень удобно если хочется избавится от какой-то из них).
ну а дальше происходит хватание центральной координаты, прибавление-вычитание из неё размеров переносимой карты чтобы узнать крайние координаты, деление всего этого на размеры карты в которую переносится. чтобы получить 0-1 значение а дальше отдельно для разрешения карты высот/карт травки/карт текстурки умножается на эту циферку и округляется до инта чтобы узнать первую и вторую координату для нужной карты. Ну а дальше процесс натягивания на этот массив значения из другого массива по тому-же принципу с умножением на значения из того самого первого массива беленького сплатмапа. перенос получается приблизительный, но пока разрешение карт не слишком различается, это не слишком заметно.
отдельно чуть более хитренькая формула в карте высот, там надо еще умножать значение на отношение высоты, плюс прибавлять значение стартовой высоты, плюс прибавлять помноженное на растянутую карту "весов". ну и если новая карта больше старой раза в два и больше то она еще "размывается", чтобы лесенка не была столь заметной но это уже совсем другой код. и отдельно в карте деревьев приходится сначала составлять список всех удаленных деревьев за все переносимые карты, потому что они хранятся в одномерном массиве инстансов и если их много то перебор весьма долгий.
для дебаг-тулзов же, не?
Ты не пугай так людей. Нихуя они не выкладывают исходники движка. они выкладывают исходный код некоторых скриптов на C# (как до этого выложили исходный код базовых шейдеров). Который все равно нахуй никому не нужен, ибо в ассетсторе есть лучше скрипты
То есть я тоже обрадовался когда увидел эту их новость, побежал скачивать, а там тупо кучка скриптов на шарпе, да еще и не рабочих (реально примеры не запускаются из-за ошибок в коде)
Я даже не знаю что в этих скриптах делается (в новости какую-то хуйню написали, но судя по примерам (а их всего два) там дебагом даже не пахнет)
а есть чо?
Нормальные посаны шутанчики делают, а ты хуетой с ландшавтом страдаешь. Ты не в теме.
В играх есть переход одной локации на другую, через дверь. Идешь по уровню снаружи дома к примеру, потом щелкаешь на входную дверь, локация грузится и попадаешь внутрь.
Как это сделать? Есть туториалы про это?
Ээээ а хуле там делать-то? По клику на двери Application.LoadLevel(levelname), или ты хочешь какую-то особую магию?
Я хочу умных мозгов себе подробных туториалов по такому.
Может где готовый скрипт есть?
А вообще спасибо, я про это >Application.LoadLevel(levelname) не подумал.
Всё, приехали, нет тутораила - не откуда переписать, создание игры на этом закончено.
private Vector2 pos;
private Quaternion q;
public GameObject go;
pos = Input.mousePosition;
pos.z = transform.position.z - Camera.main.transform.position.z;
pos = Camera.main.ScreenToWorldPoint(pos);
\t\t\t
q = Quaternion.FromToRotation(Vector3.up, pos - transform.position);
go = Instantiate(shot, transform.position, q);
go.rigidbody2D.AddForce(go.transform.up 500.0);
>Vector3(go.transform.up.x,go.transform.up.y,500)
error CS1501: No overload for method `AddForce' takes `3' arguments
И ещё ругается на эту строчку
go = Instantiate(shot, transform.position, q);
error CS0266: Cannot implicitly convert type `UnityEngine.Object' to `UnityEngine.GameObject'. An explicit conversion exists (are you missing a cast?)
Гугл говорит это потому что "It means that the variable isn't set to any particular value before you use it", только переменная "shot" в другой версии скрипта и так была без значения и ничего, работало.
Я имею ввиду, вот ГГ наступил на триггер :
как результат - запускается анимация второстепенного персонажа,
он выходит на сцену, происходит диалог или обмен вн балунами, анимация исчезновения нпс -
я запутался как это реализовать во едином скрипте/триггере.
У меня ощущение, что я слишком все усложняю и наябываю сам себя.
Запиливай абстракции. Скрипт, который отвечает за СЮЖЕТ, скрипт, который отвечает за выполнение конкретной сцены, скрипт, который отвечает за диалог, етц етц етц.
Очевидно, что нужно велосипедить. Можешь запилить такую хрень: триггер стартует корутину, корутина считает секунды и по нужной тайм-метке запускает действия из стека. Хотя я немножко бухнул и могу нести хуйню.
Да оно никак не работает. И если уж на то пошло, почему оно вообще пишет про 3 аргумента в ошибке, если ригидбоди2д?
Ты, блядь, даже доки открыть не в состоянии, что тебе объяснять?
http://docs.unity3d.com/ScriptReference/Rigidbody2D.AddForce.html
>void AddForce(Vector2 force, ForceMode2D mode = ForceMode2D.Force);
go.rigidbody2D.AddForce(new Vector2 (go.transform.up.z, 500.0f));
Спасибо, теперь не ругается, но проверить один хуй не могу из-за
>go = Instantiate(shot, transform.position, q);
>error CS0266: Cannot implicitly convert type `UnityEngine.Object' to `UnityEngine.GameObject'. An explicit conversion exists (are you missing a cast?)
>>132657
Проебался с английским, не бугурти пожалуйста.
>Проебался с английским
Критическая ошибка. Удаляй юнити и вместе с крестами пиздуй учить технический английский. Чтобы не было непонимания вот таких микроскопических ошибок, как эта.
>error CS0266: Cannot implicitly convert type `UnityEngine.Object' to `UnityEngine.GameObject'. An explicit conversion exists (are you missing a cast?)
Иначе будешь ловить их каждый ёбаный день.
go = Instantiate(shot, transform.position, q) as GameObject;
Переведи словосочетание implicitly convert открой книжку по шарпу и найди в оглавлении перевод.
Спасибо.
Вообще я там настрочил какой-то хуйни.
В общем, суть такова, есть сфера Sphere невидимая, которая крутится по направлению к курсору, на сферу приклеена точка, откуда вылетают снаряды.
Кликаешь стрельбу - спавнится снаряд.
go = Instantiate(shot, shotSpawn.position, Sphere.rotation) as GameObject;
Сфера исправно крутится, спавнится снаряд где надо, но летит только в одном направлении, почему ему не передаётся угол поворота соответствующий от сферы?
Суёшь объекты с коллайдерами в какой-нить слой, потом при касте юзаешь битовую маску, в которой выделяешь конкретный слой. Пиздуй гуглить короче.
Можно коллайдерам дать тэг, а потом настроить чтобы рейкаст игнорил объекты с определенным тэгом.
http://docs.unity3d.com/Manual/Layers.html
http://docs.unity3d.com/ScriptReference/Physics.Raycast.html
layerMask - то, что тебе нужно. Доков хватает с головой, но раз уж ты тупорылый школьник без знания английского, то пиздуй на ютуб.
Короче, разбираю 2D в юнити. Возникает ощущение что все эти мамкины школьники даже не трогали 2D, столько вопросов, а ответов нет - гугол молчит.
Вообщем задача. Сделать что-то типа двухмерных шашек (ну то есть на экране сетка, на сетке фишки, мы их двигаем). Все это 2D - спрайтами.
Далее перепост:
в паинте создал изображение с сектой 1024х768. Каждая ячейка равна 100х100. Нужные мне ячейки закрашены оранжевым (остальных не будет - это мусор) То есть верхняя левая точка начала сетки - 262х32.
Сделал размер ортогональной камеры по формуле 768/2/100 (ебаные идиоты это придумали, но по крайней мере знаю о нем уже)
Сделал в паинте изображение фишки размером где-то 100х100. Перетащил в юнити. Вопрос:
Как мне теперь узнать позиции всех ячеек сетки? Не гадать же? Что это за -2.11 и 3.04 ?
Хорошо, я знаю что на одну условную единицу у меня 100 пикселей (в инспекторе при импорте текстур так по умолчанию указано, и при размере камеры я делил на 100). Левая точка у меня 262. Хорошо, тогда 262/100=2.62. Проверяю. с минусом оно уезжает куда-то влево за пределы сетки. Без минуса куда-то вправо (также за пределы оранжевой сетки). То есть не туда куда надо.
Все. Идеи закончились. Уж не предлагаете ли вы мне, добрые разрабы юнити, теперь все 35 ячеек теперь на глаз высчитывать. А если я шахматы захочу сделать, так это застрелиться можно
Входные данные. Size камеры все тот же 3.84 (768/2/100). Я создал фоновое изображение размером 1024х768 (100 Pixel to Units). Нарисовал сетку размером 80 пикселей (все остальное - прозрачно). Сетка нарисована слева сверху. Нарисовал фишку размером 80х80 (оранжевого цвета). Вывел. руками сдвинул в первую верхнюю ячейку сетки.
Ее позиция -4.72; 3.46.
Вопрос: как мне узнавать эти позиции? Как их считать? Вот я например щелкнул мышкой чтобы показать фишке (ведь ее можно выбрать и через колайдер что и делают в оффуроках) куда ее нужно сдвинуть - как мне теперь узнать куда именно эту фишку в ячейках сдвинуть?
Ты уверен, что для твоей игры нужен юнити? Пока ты сталкиваешься с проблемами, с которыми бы не столкнулся, если бы использовал какую-нибудь простую библиотеку на C#/java/чем-то еще.
А мультиплатформа? Или предлагаешь мне потом все с нуля переделывать перенося из своих движков на юнити?
И еще, это еще даже не игра, это первый шаг - сделать хотя бы что-то типа шашек-крестиков-ноликов, потом можно "три в ряд" (это же базовый рецепт всех начинающих). И для того и для того нужно решение этой проблемы.
В этих вот простых библиотеках такой проблемы вообще не существует. Мне непонятно зачем разработчики юнити сделали такую идиотскую систему координат. Я сужу по опыту ковыряние в cocos2d - там если мне надо вывести спрайт в позиции 100х100, я его вывожу в этой позиции. Если мне надо чтобы оно само авторесазилось при любых разрешениях, я умножаю на аспект (хотя уверен что есть и что-нибудь готовое).
А в юнити хуй поймешь откуда брать эти позиции и как считать
Делать простые вещи сложным инструментом не просто, да. Мультиплатформа это хорошо, когда у тебя есть игра, которая интересна кому-то кроме тебя. Пока что без разницы на чем писать. Посмотри на slick2d, libgdx.
>>132768
еще раз, мне надо на юнити. Оно же пиздец как хвалилось своим новым 2D.
Мне не надо на других движках. Я уже делал 2D на своем движке.
http://falcoware.com/ArkanoidClassic.php
У меня есть опыт и с cocos2d.
Но сейчас я хочу собрать игровой законченный прототип именно в юнити. Не свой движок писать, не ковырять кучу чужого говна. А взять юнити и сделать игру.
Игра двухмерная и все что нужно это вывести фишки на клеточках. Это же блядь база. Но вот именно что у меня сейчас нет ничего на чем бы я это смог эффективно развернуть (свой 2D движок уже давно закопал, cocos2d слишком перегружен для меня и там не очень удачная сборка, да и вообще хочу меньше писать низкоуровневого кода а начать блядь делать саму игру)
Короче анон, если не можешь помочь с такой проблемой, то расскажи как выкинуть юнитевскую камеру и вставить туда свою видовую матрицу? Мне будет намного легче самому написать ортогональную проекционную матрицу, чем ебаться с этим идиотским высером от разработчиков юнити
Короче, я сейчас поковырял немножко 2д и вот что нарыл для тебя:
а) рендерится усё это дело обычной камерой, по дефолту она смотрит на 0;0;0
б) в настройках импорта спрайта указывается число пикселей в юните и точка привязки
Тащемта что тут непонятного для тебя - я не вдуплил. Вот, например, я выставил в настройках спрайта 100 пикселей в юните и точку привязки top left, сам спрайт в оригинале шириной 546 пикселей, соответственно, чтобы расположить 2 таких спрайта рядом без зазора, надо подвинуть его на 5,46 юнита, пикрелейтед.
Пагни!
При чем тут камера? Если у тебя scale у текстур 1 1 1, а при импорте указано 100 пикселей на юнит, то выходит 80/100 юнитов твоя клетка занимает.
Пикрелейтед ячейки по 50 пикселей => 0.2 юнита и все цифры сходятся.
0.5 юнитов фастфикс
Ты на 4.6 уже? если нет, то просто убейся нахуй
Два варианта. Для нубаса: Создай просто пустые панельки через UI->Panel (выстави прозрачность тока) и расставь их квадратиками поверх твоих квадратиков. Потом когда тебе нужно поставить карту в определенный квадратик, просто выставляй ему пэрентом эту пустую панельку.
Для норм чела: Если лень вручную всё это делать, то просто сделай префаб из одной панельки, а потом в коде инстанциализируй её в свою канву Нное кол-во раз, а канве (или большой панеле, которая представляет всю игровую зону) дай компонент grid layout и настрой его так, чтоб панельки клались как у тебя на картинке. А потом аксессишь их по GetChild(index), ну и соответственно выставляешь их пэрентом для своих карт.
>Возникает ощущение что все эти мамкины школьники даже не трогали 2D, столько вопросов, а ответов нет - гугол молчит.
Гугли на юнити форуме в разделе 4.6 опенбетки.
> но летит только в одном направлении
Смотри скрипт его перемещения. Инстанциализация просто создает объект. Дальше он летит туда, куда в его скрипте указано. Ты чей-то код брал? Очевидно после инстанциализации нужно указывать ему куда лерпать.
Хули ты у себя названия позамазывал, ты боишься что у тебя идею твоей охуительной игры спиздят по названиям? Ты чё ебнутый?
Сделай стены и пол коллайдером, чтоб персонажи через них не проходили. Контроллер не может пройти через коллайдер.
Конечно боюсь. У меня ураганная идея! Точно выстрелит! Почку продал, кредит взял. Осталось только немного подправить
А теперь создай изображение на весь экран, и попытайся вывести его на экран так чтобы изображение было на весь экран.
Фигня. Ты в своем ванильном примере считаешь что сетка занимает весь экран. А где будут всякие кнопочки, надписи, рамочки, завитушки?
В реальном приложении твой способ не работает. Пикрелейтед это подтверждает. (все также - 100 пикселей на юнити, размер ячейки 100, размер фишки -100).
Pivok - центр
Смещение сетки от края - 270/10 (это смещение в паинте, не в юнити. Облака и сетка - это один спрайт - спрайт фона, он на весь экран)
Омг, я так и ждал что кто-то такой бред напишет. Рисуем спрайты через гуи - как оригинально. Похуй на то что пытаемся забить шуруп молотком, и завинтить гвоздь отверткой. Пофиг на лишний оверхейд (а я то думал, почему юнитевские поделки даже от профи тормозят так что даже крайзис стоит в сторонке и жрет от смеха - наверное там тоже шурупы забивают вместо того чтобы делать по нормальному)
И твой способ не работает если я попытаюсь нарисовать что-то не выравненное на GridSize - например аватарку игрока которая будет иметь намного больший размер чем ячейки сетки и расположена не параллельно ячейкам сетки
Ну я думал раз я ему ротацию передаю, то и лететь будет он уже соответственно ей. Получается надо инициализировать объект и на месте ему придавать ускорение согласно ротации нужной?
> Получается надо инициализировать объект и на месте ему придавать ускорение согласно ротации нужной?
Да.
> Рисуем спрайты через гуи - как оригинально.
Это твоя претензия? Тебе нужен способ через жопу, чтоб выебнуться? Это твои проблемы.
>Похуй на то что пытаемся забить шуруп молотком, и завинтить гвоздь отверткой.
Это не так. Ты какой-то петух, пришедший из других библиотек и в юнити смыслящий как умственно отсталый инвалид, раз задаешь такие тупые вопросы, но при этом с наглым еблетом будешь тут рассказывать что и как надо делать в чужом монастыре. Типичная пиздливая малолетка.
>Пофиг на лишний оверхейд
На что? Ты блядь поехавший, ты хоть читал как работает новый гуи? Там, в отличии от прошлой версии, не происходит пересчет всех элементов каждый фрейм, в новом гуи объект просчитывается единожды, а затем при отсутствии изменений просто отрисовывается в этом же месте без какой либо нагрузки. Ты чё-то тестил ваще в плане перформанса на юнити хоть раз, кукарек беспруфный?
>И твой способ не работает если я попытаюсь нарисовать что-то не выравненное на GridSize - например аватарку игрока которая будет иметь намного больший размер чем ячейки сетки
Ты сука конченый, тупой, да еще и истеричка. Твоя т.н. "проблема" решается как нехуй делать в рамках самого же гуи, но после того как ты изошелся на говно я тебе ничего даже подсказывать не буду, просто можешь проследовать нахуй.
дык епт, получи актуальное разрешение окна игры и высчитай размеры, хуле тут сложного?
Screen.width, Screen.height никто у тебя не отбирал. Допустим, запускаешь ты свою залупу в фулл-хэдэ в фуллскрине, получаешь Screen.width = 1920, Screen.height = 1080, число пикселей в одном юните ты знаешь (допустим, 100), переводишь актуальное разрешение в юниты (верхний левый угол получится -9,6; 5,4 если я не перепутал оси и т.д.) и рендеришь что хочешь и где хочешь. Хуле непонятного?
Рисование спрайтов через гуи - это и есть через жопу. Особенно когда захочется поюзать двухмерную физику или еще что... И особенно этот способ черезжопный, потому что сложный (от скриптов, до собственно редактирования в редакторе). То что в юнити это походу едиственный способ сделать шахматы - не означает что он не через жопу
>>раз задаешь такие тупые вопросы
Я тему создал в трех местах, в двух из них сидят юнитифаны. Везде я получил один ответ - это нельзя сделать напрямую. Только через жопу
>>не происходит пересчет всех элементов каждый фрейм
Всего-то не происходит пересчет. У нас же на смартфонах и браузерах теперь терабайты оперативной памяти, а на видеокартах можно хранить всю порнуху мира и еще много чего влезет. Оверхед, это не всегда нагрузка процессора - это еще и куча лишнего забивающего оперативную и видеопамять (в юнити это более актуально). Ну и там еще наверняка всякие нюансы типа кривых батчей, или сложностей с атласами
>>Ты чё-то тестил ваще в плане перформанса на юнити хоть раз, кукарек беспруфный?
Да, я играл в M&M X - тупо зависало потому что комп не справлялся. При том что скайрим с намного более крутой графой летает. Я играю в Heartstone - виснет на каждом углу (при этом даже не сам процесс игр, а загрузки, меню, запуск игры... или даже банальное завершение игры) - а это вообще карточная игра. Обе игры делались коммерчески, и как минимум последняя - профи. Я пытался играть и во всякие песочницы, но многие из них сделаны на юнити и жутко тормозят (таже модная the forest - 1 fps, и был бы там хоть графон).
И это не проблемы самого юнити - я проверял его профайлерами (PIX, RenderDOC). это проблема именно говноразработчиков которые как ты, делают простенький спрайт через гуи и такой же другой долбоебизм. Да оно и понятно, а то вдруг назовут байтоебом, лучше еще кучку лишних абстракций навернуть, зато как в крайзисе (тупит)
>>ничего даже подсказывать не буду
пойду повешусь. Ведь, ты, Великий, не захотел мне смерду помочь
Ты сам попробуй свой способ. Он нифига не работает
Вот на скрине, ширина (Screen.width) равна 612.
В спрайте 100 пикселей на юнит, и сам спрайт в 100 пикселей.
Теперь беру твою формулу 612/100/2. Получаем 3,06. Вводим спрайту такую позицию. И хуй, спрайт где-то но никак не в начале экрана.
Ты ебаный инвалид, не могущий в гугол. Почему я смог загуглить ортографическую камеру в юнити, а ты нет? Всё работает, всё элементарно.
Блять, картинки не прикрепляются, вот линки на картинкохостинг
http://imgur.com/ikDCstl,BwDVgxS
http://imgur.com/ikDCstl,BwDVgxS#1
> Heartstone - виснет на каждом углу
А вот это странно, ибо у меня даже на некропека летает. Может, у тебя просто ати вместо видеокарты?
Ну молодец чувак. И не важно что я об ортогональной камере писал еще в первом посте >>132753
>>Сделал размер ортогональной камеры по формуле 768/2/100
И теперь объясни откуда ты взял Size равным 4? От балды? Тогда иди дальше гугли, ты не нагуглил ортогональную камеру.
Также покажи позицию спрайта. А то может ты вообще его мышкой двигал
И не веди себя как школьник. А то весь монитор уже слюной забрызгал от ненависти. Спокойней надо быть. Особенно когда ты не хочешь читать мои посты, а отвечаешь кому-то придуманному в голове
Ну это да, ati, да еще и мобильная. Но это не отменяет факта что кто-то сильно говнокодил некоторые моменты
Игрок катается на машине, вокруг него процедурно генерируется мир. Все. Ни гонок, никакого экшона, просто поездки покатушки на машине (одной и той же). Других машин тоже нет, разве что встречные.
Сам я хуй простой, и вообще не знаю откуда даже начинать, по этому спрашиваю совета у местных гуру - с чего начинать? Юнити? Что курить по поводу процедурной генерации мира? Вообще такое реально сделать как первый проект, или нет?
P.S. Я джва года жду такую игру
Я вот делаю. как первый проект. заебался, но удовольствие получаю. почитай это: http://www.iontom.com/tag/procedural-generation/
в качестве цели выбрал это: http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
половину советов пришлось выкинуть чтобы сделать 3д.
> откуда ты взял Size равным 4? От балды?
Произвольный вообще, с любым параметром size всё будет работать. Хочешь - поставь 6, хочешь - 9000, в зависимости от того, сколько примерно юнитов хочешь захватить по высоте да, ортографическая камера в юнити запилена так Умножаем на 2 - получаем высоту экрана в юнитах, умножаем высоту на аспект экрана - получаем ширину.
> Также покажи позицию спрайта. А то может ты вообще его мышкой двигал
Пошел ты вообще нахуй, ему помочь пытаются, пример работающего скрипта дают, а он еще выебывается. Напиши ты блять три строчки да попробуй, нет блять, кудах-кудах ты мышкой двигаешь дайте мне готовое решение.
> И не веди себя как школьник. А то весь монитор уже слюной забрызгал от ненависти. Спокойней надо быть. Особенно когда ты не хочешь читать мои посты, а отвечаешь кому-то придуманному в голове
Нас, баттхертящих от твоего светлого мозгоебского величия, как минимум двое. Хотя может и больше, хуй знает.
А ротация вообще влияет на Addforce если уж на то пошло? Координаты там задаются относительно пространства мирового, не самого объекта, то есть похуй какой стороной объект повернут, сила ему будет придаваться относительно мира.
Если да, то как лучше передать поворот нужный?
Вы только посмотрите на эту пидораху. Клоны ему не нравятся видите ли.
Если у тебя 100 пикселей в клетке и 100 пикселей на юнит, то ты один раз поставь одну шашку точно в центр нижней левой клетки - её трансформ будет началом координат, остальные клетки достижимы теперь прибавлением натуральных чисел.
Ну что за хуйня, почему куча вещей делается из гуи?
Долго думал как привязать спрайт из ассетов, так его перетащить его надо блядь в ГУИ.
Вопросы:
Для игры типа объединения двух схожих элементов в новый. Как все хранить? У меня всё дублируется в двумерном массиве. Как сделать нормально сетку сверху? Каждый раз тупо её рисовать? Как сделать нормальное управление.
> Долго думал как привязать спрайт из ассетов, так его перетащить его надо блядь в ГУИ.
Вообще-то можно и скриптом грузить из ресурсов, если тебе так удобней.
Есть игрок, который должен двигаться налево или направо при нажатии на одну из двух кнопок нарисованных на экране.
Что логичнее:
1. Реализация кнопок
А) Сделать обе кнопки коллайдерами и проверять рейкастами куда человек нажал
Б)Сделать все новыми GUI кнопками?
2. Скрипт(1) с#
Как я понимаю скрипты выполняются когда они привязаны к каким-то игровым объектам?
А) К чему их можно привязывать?
Б) Как правильно давать ссылку на другие объекты?
3. Скрипт(2)
Есть две кнопки и игрок.
Что логичнее:
1) Сделать 2 скрипта на каждую кнопку, чтобы по нажатию она вела игрока налево или направо?
2) Сделать один скрипт для игрока чтобы он бежал налево или направо, когда нажимается кнопка?
3) Сделать пустой объект который будет отвечать за все управление?
В скрипте игрока сделать публичный метод движения вправо или влево.
В новой Unity 4.6 beta есть новый UI, вот через него делаешь кнопки и вешаешь на них скрипты. Из скрипта вызываешь публичные методы того скрипта.
> Б)Сделать все новыми GUI кнопками?
Я бы сделал так, еботы меньше.
> А) К чему их можно привязывать?
К чему угодно, хоть к самому Аллаху, если он есть у тебя на сцене. Можешь аттачить к пустым объектам, можешь - непосредственно к нужным, все зависит от тебя и твоих желаний.
> Б) Как правильно давать ссылку на другие объекты?
Считается хорошей практикой как же это коряво по-русски звучит делать в скрипте публичную переменную нужного типа и обращаться к ней. В инспектре эту переменную будет видно и можно будет драг-н-дропом перетащить туда любой нужный тебе объект - со сцены, из ассетов и т.д. Алсо, если тебе, скажем, нужен доступ из скрипта исключительно к трансформе персонажа, а не ко всему чару, можешь создавать переменную нужного тебе типа (в этом конкретном случает Transform), а не общего GameObject - при перетаскивании юнити сама выдерет из геймобжекта ссылку на трансформу. Удобненько-с.
> Есть две кнопки и игрок.
> Что логичнее:
> 1) Сделать 2 скрипта на каждую кнопку, чтобы по нажатию она вела игрока налево или направо?
> 2) Сделать один скрипт для игрока чтобы он бежал налево или направо, когда нажимается кнопка?
> 3) Сделать пустой объект который будет отвечать за все управление?
А что, если ебучий игрок нажмет обе кнопки сразу? Надо централизовать обработку обеих кнопок, а вот куда повесить обработчик - на игрока или же куда-то в другое место - уже дело вкуса. Я бы весь гуй делал отдельно от остальных геймобжектов.
Лол, нас сейчас ссаными тряпками погонят же в тематику. Короче, гугли real_xxiii, он рисует эту няшу, и вот тебе мой тухлый микропак rghost .net/57847056
Ребят, халп.
Приветствуется закидывание меня ссылками.
Рейкаст тут нужен для того, чтобы определять, когда ты преземляешься. Ибо всякие isGrounded работают хуево. Просто пускаешь луч вертикально вниз и когда он меньше определенного значения выполняешь то, что должно произойти при приземлении (возвращение контроля над персонажем там, анимация)
Для самого прыжка у тебя выбора два: Rigidbody.addforce, либо как индус-аутист вручную двигать вверх и вниз через какой-нибудь Transform.Translate
>isGrounded
Спасибо тебе анон! isGrounded как раз и знал, его во всех примерах пихают.
Когда несколько лет назад баловался голой явой (использовал только библиотеки по умолчанию), делал движение персонажа через ручное изменение x, y параметров. Выглядело красиво, но код был кривой и нихрена не гибкий.
>Спасибо тебе анон! isGrounded как раз и знал, его во всех примерах пихают
Примеры и вики до сих пор живут в мире хорошо если 3й версии. Интересно, будут ли они хоть что-то обновлять с выходом 4.6 и нового ГУИ.
Скриптбл обжект как вариант.
https://unity3d.com/ru/learn/tutorials/modules/beginner/live-training-archive/scriptable-objects
Зачем нужны геттеры - сеттеры? Ведь я могу обратиться к полю через, допустим, Hui.texture = "", вместо того чтобы городить пикрелейтед и обращаться к нему, например.
В чем профит?
ультраньюфаг
Геттеры и сеттеры можно запихнуть в интерфейс.
За геттерами и сеттерами можно спрятать простейшую логику. Тебе возможно понадобиться такая логика в будущем.
Делать поля публичными - дурной тон.
В твоём случае достаточно просто
public Texture2d Texture { get; }
А вообще принципиальной разницы нет, конечно.
Вообще да, можешь. Профит в том, чтобы в геттерах/сеттерах прописать некую логику-обвязку по нужде, чтобы контролировать, что ты запихиваешь в поле и куда его дергаешь. На эту хуйню можно забить.
Как передать снаряду направление полета? Сфера крутится вокруг игрока, нацеленная на курсор и создаёт снаряд в её направлении. Как заставить созданный снаряд лететь в направлении курсора?
Для XNA, но все понятно и для даунов:
http://gamedev.stackexchange.com/questions/13326/how-do-i-generate-projectiles-toward-the-mouse-pointer
Геттеры-сеттеры это синтаксический сахар для функций доступа-изменения вида GetX()-SetX(value).
Зачем нужны такие функции? Объект состоит из данных-поведения-интерфейса. Атцы CS считают, что объект должен полностью скрывать свои данные за интерфейсом, ибо так намного проще их менять без изменения интерфейса, который рсползется везде-везде и пользователи будут рсчитывать на его неизменность. Это очень ценится в энтерпрайзе, где цена ошибки/изменения довольно велика.
Вообще в гейдеве на шарпе для себя, анонимные эксперты рикамендуют использовать public'и - это немного быстрее (нет вызова пустой функции).
Application.LoadLevelAdditive например, если я правильно понял чего тебе надо
Может кто-то проветить меня как запрограммировать летающую штуковину?
фейкоскайп andrey-mono
Братишка, мне впадлу корячиться с объяснениями ебут на работе и вообще я открывал юнити последний раз джва месяца назад, но вот тебе хороший туториал по 2д в юнити: http://pixelnest.io/tutorials/2d-game-unity/table-of-contents/
Он немножко устарел по нынешним меркам, но в нем всё - и управление, и компоненты, и эффект параллакса, и анимация аж отделным туториалом, и музычка, и стрельба, и самое главное - это не блядский видеоурок на ютубе, шайтан их подери. В общем, разберешься, коли не дурак.
Спасибо, буду ковірять
Дело обстоит так: где-то в игре требуется объект (например задник для какой-нибудь локации), АссетМенеджер возвращает пустой объект, сохранят ссылку на этот пустой объект и стартует загрузку соответствующего ассета с сервера. Когда загрузка завершается по колбеку нужно заменить пустой объект, на успешно загруженый. Вопрос - как это сделать? Есть ссылка на пустой объект, есть сылка на свежей подгруженный - и что дальше?
Первое, что пришло в голову - просто чайлдить подгруженный на пустышку, но для этого придется много чего поменять в проекте, хотелось бы этого избежать и осуществить именно замену.
Страшное ощущение. То на что я раньше потратил три месяца, я на 80% сделал за два дня.
Сделал инвентарь с типизацией по типу слота и размеру, драг-н-дроп, контекстное меню, вложенные друг в друга инвентари. Все инкапсулировано и вызывается парой строк в ключевых местах. Плюс ебалу в виде текущего ГУИ можно скрутить при переходе на пятую версию без ущерба.
а еще я вынес инвентарь персонажа из статичного класса, так что теперь может и будет мультиплеер.
>>132587
на самом деле у меня уже есть немного шутанчика. у меня есть пестик которым можно целится водя его по экрану, у него можно передергивать руками затвор и у него есть атачменты. обойму сделал как атачмент тоже. и патроны разные.
теперь вот появилось немного процедурной карты. а теперь еще и возможность ставить на карте вручную созданные объекты, чтобы я мог такой написать "хочу чтобы была вышка гдето" и гдето будет вышка. заебииись.
>>133189
Ты таво, этаво. можешь пойти сюда:
https://www.assetstore.unity3d.com/en/#!/category/2/page/1/sortby/popularity
и набрать кода в котором обычно коментов больше чем самого кода.
Здраствуй. Про шутанчики я в шутку, ибо FPS-мечты одна из самых распостреныных идей среди школоты, кторая играет в них.
> целится водя его по экрану
Не делай так - неудобно, лучше крестик всегда в центре. Недавно играл в механоидов 1, там этот прицел в горчяке боя шароебится где угодно и на него еще поворот повешен, если хочешь повернуться сбивай прицел и терпери плюхи пока он доедет до края экрана.
>То на что я раньше потратил три месяца, я на 80% сделал за два дня.
Этоже рефакинг + опыт. Когда ясно, что делать и надо просто начисто переписать с сохранением функционала - это быстрее.
Добра тебе.
Подскажите как быть, пожалуйста.
Я понял, что юнити для простых 2д не нужен, так как очень долго грузится даже на хорошем смартфоне. В libGDX можно всё контролировать, перешел на него.
>Ты таво, этаво. можешь пойти сюда:
>https://www.assetstore.unity3d.com/en/#!/category/2/page/1/sortby/popularity
>и набрать кода в котором обычно коментов больше чем самого кода.
Я знаю про юнити стор, и это выкачка бабла из лохов (в общем, как и весь юнити). Наверняка где-то есть книга, где разбирается: основным классом является MonoBehaviour. От него наследуется то-то и то-то. В игре вызываются две основные функции, такая-то и такая-то. И т. д.
Ощущение, что всё где-то есть, но за большие деньги и посещение тысяч курсов от СЕРТИФИЦИРОВАННЫХ ГУРУ. Приходится до всего доходить по интуиции. Script reference, конечно, есть, но на первом этапе он бесполезен.
Хуй знает, я таких книжек не видел, но что откуда вызывается и какие события прокидывает есть в дефолтном мануале http://docs.unity3d.com/Manual/ExecutionOrder.html
>Не делай так - неудобно
на самом деле я рассчитываю на некоторую неудобность, которая бы уменьшалась с приобретением аттачментов. фиксированная точка прицеливания все слишком упрощает для игрока. это хорошо работало, например, в ресивере, где процесс игры был более медленный и аккуратный.
хотя на самом деле у меня все предметы в сцене висят на джойнте и я хочу чтобы игрок периодически ронял, или активировал предметы если таранит ими на что-то. вторая причина по которым у оружия более высокий уровень подвижности.
>>133201
лично я свое шествие начал с просмотра бородоча: http://www.youtube.com/watch?v=YYqzz1dy3Ak&list=PLE5C2870574BF4B06 и чтения документации, ничего не зная о коде.
а на юнити сторе можешь найти бесплатные комплит прожекты, в которых все обкоменчено и так почитать. собственно то что на ассет стор выкладывают обычно обильно закоменченный код его главный плюс.
Прилепил персонажу миниган. В едиторе все охуенно работает и отображается.
Компилю - запускаю, нихуя из того, что я только что прилепил - НЕТУ БЛЯДЬ!!!!
Я в рот ебал кароче, подскажите, че за хуита? Я все спрайты и музычку в папку Resources положил.
>>132974
Спасибо за советы. Помогло начать что-то делать.
Появился еще один вопрос:
есть разные объекты в игре, которые обладают одинаковыми свойствами, например - противники.
Как лучше сделать так, чтобы не дублировать код?
Пока единственная идея это сделать отдельный скрипт в котором будут общие характеристики например хп противников.
Как лучше оформить различные события, которые повторяются?К примеру, чтобы при смерти любого врага он исчезал, а у игрока увеличивались очки?
>Как лучше оформить различные события, которые повторяются?К примеру, чтобы при смерти любого врага он исчезал, а у игрока увеличивались очки?
Отдельный шкрипт, где на ondestroy вешаешь player.addScore(score); или что-то в этом роде. И так всё остальное.
Очевидно же.
ТЫ ЧЁ ВАЩЕ КАКОЙ ООП ЧЁ НИСЕШ) МНЕ ТАКОЙ АСЕТ НАДО КАРОЧ ЧТОБ ПЕРЕТАЩИЛ НА ЕКРАН И ЗАЕБИСЬ СТАЛО НИПАНИМАЕШ ЧТО ЛИ))
ПЛАТИ 99$))
>Пока единственная идея это сделать отдельный скрипт в котором будут общие характеристики например хп противников.
Ты это, про наследование слыхал, не?
http://msdn.microsoft.com/ru-ru/library/ms173149.aspx
можно написать например
public class Entity{
public int HP = 100;
}
а потом написать
public class Player : Entity{
}
и тогда если ты напишешь
Player player = new Player();
то обнаружишь что можно написать
player.HP = 123;
РОЛЛ
Спасибо, стало понятнее.
Тогда два вопроса:
1. Где нужно хранить описание главного класса, учитывая особенности юнити? Вот у меня есть основной класс противник, у которого есть переменная макс хп. Мне описать этот класс в одном из случайных скриптов отдельных противников и давать потом на него ссылку?
(Вероятно, не очень хорошо сформулировал вопрос)
2. Я правильно понял, что в классе кроме переменных могут быть определены различные типовые функции: что происходит при смерти, столкновении, и.т.д?
И объявив класс в начале скрипта я могу сразу обращаться ко всем этим событиям, если до этого правильно их оформил?
Тогда вопрос с тем, где хранить первоначальное описание класса становится особо актуальным.
Запомни, все, что работает с объектами на сцене - создание/удалени изменения положения, звук, физика анимация и прочее - наследует MonoBehaviour. Все что наследует MonoBehaviour добавляется как компонент на конкретный объект сцены (или префаб, который просто хранится вне сцены, в ассетах). При добавлении объекта на сцену создается экземпляр скрипта.
Т.е. есть у тебя скрипт для противника, добавляешь его как компонент на объект противника (в этом же объекте модель, управление анимациями, звуки, коллайдер и прочая хуета).
Нужен тебе общий скрипт, скажем, для управление AI противников - делаешь пустой объект с понятным именем EnemyController, и добавляешь на него как компонент скрипт с аи. Все противники при создании будут иметь ссылку на этот объект, в коде со ссылки на объект будут получать ссылку на экземпляр скрипта.
>Где нужно хранить описание главного класса, учитывая особенности юнити? Вот у меня есть основной класс противник, у которого есть переменная макс хп.
то где ты держишь классы, которые не наследуются от MonoBehaviour не важно. я, например, обычно стараюсь делать классы наследуемые от монобихейвора как можно меньше, оставляя в них просто экземпляр класса и какие-то публичные его методы. потому что иначе вся эта ебала обычно превращается в нечитабельную мешанину спустя какое-то время.
>Я правильно понял, что в классе кроме переменных могут быть определены различные типовые функции: что происходит при смерти, столкновении, и.т.д?
Да. Но учитывай что если ты не наследуешься от монобихейвора то ты не можешь производить некоторые манипуляции в сцене. например если ты захочешь написать Instantiate(хуйня) то тебе не дадут.
как в случае предидущего примера ты можешь написать например так:
public class Player : Entity{
\tpublic void Die(){
\t\tbase.HP = 0;
\t}
}
public class SceneEntity : MonoBehaviour{
\tPlayer thisPlayer = new Player();
\tpublic void Kill(){
\t\tthisPlayer.Die();
\t\tDestroy(this.gameObject);
\t}
}
>Тогда вопрос с тем, где хранить первоначальное описание класса становится особо актуальным.
дапохуй на самом деле. где хочешь.
Оставляйте фейко-скайпы, добавляйтесь kefear007.
Перитаскиваеш как асет карочь и всё))
И ссылки на первый, или на компоненты первого будут теперь ссылаться на второй?
Ссылки переназначаешь
Спасибо, вроде бы стало понятнее.
Как я планирую делать:
public class Enemy : MonoBehaviour {
\tpublic float maxhp, currenthp, exp, score;
\tpublic void OnDeath(){
\t\t\t\tif (currenthp == 0) {
\t\t\t\t\t\tDestroy (this.gameObject);
\t\t\t\t}
Храню описание класса просто в ассетах(Сразу вопрос: все что в ассетах тоже выполняется?)
После чего я делаю скрипт для конкретного объекта:
public class Ship : Enemy {
\t// Use this for initialization
\tvoid Start () {
\t
\t}
\t
\t// Update is called once per frame
\tvoid Update () {
\t\tOnDeath();
\t
\t}
Этот скрипт уже прикрепляю к префабу.
Вроде бы работает.
Переменные в инспекторе появляются, во время запуска объект исчезает.
Правильно ли это? Можно ли как-то красивее организовать?
Все ли должно быть public?
Спасибо, вроде бы стало понятнее.
Как я планирую делать:
public class Enemy : MonoBehaviour {
\tpublic float maxhp, currenthp, exp, score;
\tpublic void OnDeath(){
\t\t\t\tif (currenthp == 0) {
\t\t\t\t\t\tDestroy (this.gameObject);
\t\t\t\t}
Храню описание класса просто в ассетах(Сразу вопрос: все что в ассетах тоже выполняется?)
После чего я делаю скрипт для конкретного объекта:
public class Ship : Enemy {
\t// Use this for initialization
\tvoid Start () {
\t
\t}
\t
\t// Update is called once per frame
\tvoid Update () {
\t\tOnDeath();
\t
\t}
Этот скрипт уже прикрепляю к префабу.
Вроде бы работает.
Переменные в инспекторе появляются, во время запуска объект исчезает.
Правильно ли это? Можно ли как-то красивее организовать?
Все ли должно быть public?
>OnDeath
>вызывается каждый тик и проверяет смерть
Ты в имена методов совсем не можешь, да?
On - событие, но никак не проверка, дебил.
Правильно будет:
public void OnDeath(){
Destroy (this.gameObject);}
void Update () {
if (currenthp == 0) {
OnDeath();
}
}
Да можешь хоть анусом своей мамки назвать, все равно не допишешь дальше движущихся кубов.
spriteshit например
Тот мамкоеб вообще какой-то левый.
Я нигде не работаю, первокурсностудент.
А название метода реально говно - там не коллбек. Вот CheckForDeath - хорошее.
Да я сам неуспешный мид.
Дебил
Один молодец уже отписался, продолжаем!
зачем ты вообще проверяешь в Update здоровье противника?
можно например написать
[code]\t\t\tpublic float HP{[/code]
[code]\t\t\t\tset{[/code]
[code]\t\t\t\t\tcurrenthp = Mathf.Min(value, maxhp);[/code]
[code]\t\t\t\t\tif(currenthp <= 0)Сдохни();[/code]
[code]\t\t\t\t}[/code]
[code]\t\t\t\tget{return currenthp;}[/code]
[code]\t\t\t}[/code]
оооооооо...... давай раскидаем всю управляющую логику по всему коду, чтоб хуй найдешь что где, калбеков повесим делигатов да побольше
так веселее
тебе предпочтительней писать все в старт, апдейт и так далее, чтобы не потерялось?
Например:
if (var == true) {}
else {}
мелкое говно - нет. ну, или пока обжектов с такими проверками разумное количество. а если ты напишешь в апдейт что-нибудь вроде говно.геткомпонент<мегаговно>().зделайвсезаебись(); то как-то не очень будет.
В том-то и дело что у меня все кешируется.
А насчет проверки условий сомневаюсь.
Вроде-бы их не много.
напиши Debug.Log(Input.GetAxis("Horizontal")); и увидишь.
а как мы тебе поможем то? ну раскидывай ящики например первый случайно, а второй в рандом.рейндж расстоянии от предыдущего чтобы они могли падать цепочкой. или напишы себе расстановку ящиков по паттернам на основании картинок. чтобы ты такой нарисовал хуй и пишешь "хочу чтобы ящики падали как хуй".
это тот вопрос в котором вроде как ты и должен быть генератором идей.
>на основании картинок.
BMP и проходиться по пикче по пикселам?
И да - реквест был в сторону именно каких-нибудь интересных алгоритмов/распределений. Всякого такого матана который я мог бы покурить вдохновиться.
>BMP и проходиться по пикче по пикселам?
я бы сделал именно так, да. если хочется всяких распределений, то пожалуй следует начать с возможности удобно самому их задавать не через задницу. я бы наверно даже сделал отдельно метод который бы вместо пикселя читал область и в зависимости, например, от размеров ящика убирал из этой области соответствующего радиуса зону для возможных мест спавна ящика, до тех пор пока возможные места не кончатся.
Алсо картинка в тему о распределениях. Использую для посадки разного уровня деревьев и кустиков, но чтобы они не пересекались.
Попытайся словами объяснить, что ты понимаешь под красотой.
"не должно быть нагромождений из 5 ящиков"
"не должны падать только в одном углу"
"должно иногда падать прямо на игрока"
Потом собери все свои идеи и попытайся оформить, разбавив случайным элементом.
Пишу систему спавна противников.
Как она примерно будет выглядеть:
На входе:
1.максимальное количество
2.максимальная суммарная сложность
и набор префабов противников с индивидуальной сложностью у каждого.
Соответственно нужно наспавнить противников в случайных местах не превысив сложность и количество.
Как это сделать?
Текущие мысли:
сделать два цикла один в другом, которые будут действовать пока количество или сложность не упрутся в потолок и будут спавнить противников в случайном месте.
Соответственно вопросы:
Как случайным образом выбирать противников из префабов?
Как это все оформить?
Где и что почитать?
Пишу систему спавна противников.
Как она примерно будет выглядеть:
На входе:
1.максимальное количество
2.максимальная суммарная сложность
и набор префабов противников с индивидуальной сложностью у каждого.
Соответственно нужно наспавнить противников в случайных местах не превысив сложность и количество.
Как это сделать?
Текущие мысли:
сделать два цикла один в другом, которые будут действовать пока количество или сложность не упрутся в потолок и будут спавнить противников в случайном месте.
Соответственно вопросы:
Как случайным образом выбирать противников из префабов?
Как это все оформить?
Где и что почитать?
Э, основы программирования?
public GameObject[] enemyPrefabs;
public float totalDifficulty=0;
...
if (totalDifficulty<difficultyLimit) {
GameObject temp=Instantiate(enemyPrefabs[Random.Range(0, enemyPrefabs.length)]) as GameObject;
totalDifficulty+=temp.GetComponent<enemyInfo>().diff;}
Не читаешь документацию. Ты скармливаешь юнити какой-то омск.
if (Input.GetTouch(touchIndex).phase==TouchPhase.Began) {...}
Нужно в одном месте создать 4 пули.
Полететь они должны наверх, вниз, направо и налево.
В начале я сделал 4 префаба пуль у которых в их апдейте было 4 разных трансформ.транслейта.
Это работало, но смотреть больно. Есть какой-нибудь красивый способ?
var bullet = Instantiate(...);
bullet.AddForce(...);
var bullet2 = Instantiate(...);
bullet2.AddForce(...);
var bullet3 = Instantiate(...);
bullet3.AddForce(...);
var bullet4 = Instantiate(...);
bullet4.AddForce(...);
Если двигаешь транслейтом, не используя ригидбоди, то сделай переменную velocity:Vector3, в апдейте перемещай на velocity, а при создании пульки изменяй тоже velocity
rotation.eulerAngles = new Vector3 ( 0, 0, -90);
Instantiate (bullet, gun.position, rotation);
rotation.eulerAngles = new Vector3 ( 0, 0, 0);
Instantiate (bullet, gun.position, rotation);
rotation.eulerAngles = new Vector3 ( 0, 0, 90);
Instantiate (bullet, gun.position, rotation);
rotation.eulerAngles = new Vector3 ( 0, 0, 180);
Instantiate (bullet, gun.position, rotation);
и на пулю
void Update () {
transform.Translate (0, -bullet_speed, 0);
}
кто может объяснить почему это сработало, как я хотел?
Мне казалось что y есть единая величина во всей системе и в итоге пули должны были быть просто перевернутыми но лететь в одну сторону?
Почему они летят в 4 разные стороны?
Потому, что я ебал твою мамку.
>y есть единая величина во всей системе и в
ТПопробуй просто заменять векторы, а не объявлять каждый раз новый
Правильный ли я делаю вывод, что для каждого объекта я могу задать таким образом собственную векторную систему? Добавив информацию о новом векторе?
Как потом манипулировать этим объектом?
>Почему они летят в 4 разные стороны?
Потому что читай документацию.
http://docs.unity3d.com/ScriptReference/Transform.Translate.html
>void Translate(Vector3 translation, Space relativeTo = Space.Self);
>Space relativeTo = Space.Self
>Space.Self
В двух словах - transform.translate по дефолту работает для локальной системы отсчёта. Когда ты меняешь угол объекта, ты меняешь угол всей его системы отсчёта. В итоге чего направление "вверх" оказывается разным для каждого объекта.
Если хочешь по-другому, юзай Space.World, тогда вне зависимости от угла объект будет тянуть вверх. Но тебе это не нужно в данном случае.
Алсо, выебал мамок всех вот этих долбоёбов >>133740 >>133744, пиздуйте в /b, ублюдки.
Ситуация: при нажатии на клавишу вокруг персонажа должен появляться щит.
Щит имеет свое здоровье, которое регенерирует со временем.
Управление щитом вынесено в скрипт с общим управлением.
Логика такова:
1. Скрипт управления персонажа при нажатии на клавишу устанавливает в скрипте щита переменную функции АктивацияЩита в значение активен.
2. Скрипт щита получив информацию о том, что щит активен запускает в работу компонент со спрайтом щита и компонент коллайдера2д, о который все будет разбиваться.
3. Когда клавиша отпущена переменная устанавливается в значение щит не активен на что скрипт щита отключает спрайт и коллайдер.
Щит является child объектом игрока.
Вопрос:
Логично ли все это?
Можно ли как-то упростить схему?
Как активировать компоненты у объекта?
>Логично ли все это?
Если работает и не создаёт лишних проблем/нагромождений, то всё правильно.
>Можно ли как-то упростить схему?
Можешь обработку клавиши щита впердолить прямо в скрипт щита.
скрипт игрока:
static KeyCode shieldKey = KeyCode.S;
щита:
Input.GetKeyDown(player.shieldKey){
turnShield(true);
}
void turnShield(bool state) { ... }
>Как активировать компоненты у объекта?
Гугли Unity Component и ищи в полях нечто похожее на active. Мог бы и сам догадаться.
Да, нагуглил еще до ответа. Видимо первый этап пройден и я уже могу что-то гуглить.
С точки зрения оформления для сторонних людей, что логичнее делать отдельный скрипт на управление с кучей гет компонент и ссылок на другие объекты и скрипты или каждое управление к конкретному объекту?
Где почитать про общую логику написания кода?
Спасибо.
На полном серьёзе советую ёбнуть C++ (ООП) и попрактиковаться в проектировании каких-нибудь велосипедов помасштабнее.
Но это выпрямление рук, а не создание игры; решай сам, что тебе больше по душе.
Алсо молодец, что научился гуглить. Кстати, если не получается, то гугли на английском. Материалов побольше будет.
По поводу
>общую логику написания кода
посоветовать ничего не могу. Мог бы посоветовать что-нибудь про паттерны и проектирование, но это к юнити никаким боком, хоть и учит думать про архитектуру.
Удвою этого.
Велосипедами можно отлично выпрямить голову и надрочить скилл. Но вот продукт на них не сделаешь.
Не обязательно С++, можно взять C#/Java, они тоже ООП и там меньше ебли уровня распределения памяти или возни с указателями.
Пожалел себя, перечитав, что написал.
>Что есть велосипед?
>Рандомный проект, который нужно сделать самостоятельно?
Да что угодно с достаточным масштабом и достаточно байтодрочерское. Можешь заебенить какое-нибудь говнецо на СДЛ, как я, только тщательно думай об архитектуре.
>Языки есть одно из немногих, что я могу.
Тогда из тебя выйдет хороший программист.
public class invertoryEntity{
public string itemName;
public sprite icon;
public string type; //enum is fine too;
////CONSUMABLE
public int HPreg;
public int MPreg;
//whatever else. int = 0 = not using this type of effect
////WEAPON
public int DMG;
public int StrReq; //0 = no stat req
public int AgiReq;
public int durability;
public int currentDurability;
public int statTrak//lel, 300 rub-tier joke
}
public invertoryEntity[] invertory;
Читай ООП.
Обычно при программировании интерфейса используют.. интерфейсы, лол.
Ну понимаешь, да, при программировании UI (графического интерфейса) используют абстрактные "классы" (нихуя не так, не знаю как ещё разграничить понятия), которые не имеют реализаций методов и лишь указывают обязательные поля для классов, которые включают в себя этот интерфейс и перенимают его функционал. Разницу между абстрактным классом я тебе пояснять не буду.
Структурка, например:
Есть IInventory, его ты можешь давать различным классам, которые являются инвентарем.
Можно делать ISlot и пихать его в инвентарь, и прочее.
Вся логика нажатий обрабатывается в каком-нибудь Container, а вот отрисовка - Gui. События управления ловит какой-нибудь главный класс и распределяет их по активным окнам, активные окна - гуи с кнопками. Гуи отправляет данные контейнеру, контейнер отправляет данные слотам, а там уже по нажатым клавишам (типа перетаскивание предмета через шифт) определяется нужное действие, врубается логика запретов (не одевать трусы на голову) и прочее прочее.
Заодно поясню за логику:
Не всегда нужно иметь инвентарь с визуальным доступом. Т.е. бывает ситуации, когда допустим есть у продавца свой инвентарь, а игрок его видеть не должен. Тогда мы просто даем ему IInventory и всё. Логика передачи и хранения предметов строится там.
Контейнер и гуи - для возможности взаимодействия игрока с данными, т.е. через мышь и клаву.
Разные уровни абстракции, разные функции.
Смекаешь?
Ах да, забыл.
Гуи обычно есть только на клиенте (касается сетевых\МММодрочилен), ибо несет в себе лишь сугубо визуальную функцию и только лишь определяет элементы на экране и рисует их.
Впервые делаю игру на Unity — игра карточная, с возможностью скачивания и установки дополнительных колод. Каждая карточка должна содержать простую инфу разного типа: тексты, числа, булины, 2д/3д графику и анимацию.
Подскажите, как лучше организовать все это дело? Чтобы можно было удобный и грамотный доступ к карточкам делать, правильно разработать процедуру скачивания и импорта новой колоды — как делаются такие вещи по уму?
Как искать такую инфу в гугле, не представляю. Если накидаете ссылок на русско- или англоязычные источники, буду признателен.
Походу карты у тебя будут как длц, я правильно понимаю? Срака в том, что нативно поддержка длц есть только в про-версии юнити, насколько я понимаю. Вот тебе ссылочка на мануал
http://docs.unity3d.com/Manual/abfaq.html
и вот на хабру
http://habrahabr.ru/post/188824/
Да, дополнительные колоды — это ДЛЦ. Не ожидал, что метод доставки и импорта контента в игру окажется платной фишкой. Хотя, судя по статье на хабре, если мне не понадобится включать в длц нативные файлы юнити, можно обойтись и бесплатными костылями.
Спасибо за ссылки.
А вообще, как лучше организовать хранение колоды? Я представлял себе простой XML-файл, в котором буду хранить характеристики всех юнитов и их количество в колоде, вместе со ссылками на изображения, модели и текстуры. Нормально, или есть способ поудобнее?
>А зачем через ассет бандлы?
Проблема в том, что мне понадобится загружать в ДЛЦ еще и трехмерные объекты: локации, персонажей, возможно даже анимацию. Я все еще курю документацию, но пока у меня складывается ощущение, что я в жопе.
Вопрос всем:
Может, кто-нибудь сможет порекомендовать альтернативный движок? Требования следющие: мультиплатформенность, относительная простота освоения, желателен C#, C++ или JS, нормальная имплементация DLC и сетевых мультиплееров, бесплатность либо относительная дешевизна (1500 бачей я отвалить пока не готов)
Ну же, анон. Или подскажи теги для гугла.
Анрил4, не? И почему бы просто не украсть юнити, раз уж ты так серьезно настроен? Когда доделаешь свою йобу - тогда и купишь.
Купил месяц анрилача, вкуриваю, спасибо за то, что напомнил про него. Пока все нравится.
Будешь смеяться, про «украсть юнити» я не подумал. К тому же анрыл стоит всего 800 рублей, и в остальные месяцы я могу не платить, пока что-то конкретное не пригодится. Так что остановился на нем.
>пока что-то конкретное не пригодится
Проясни за это поконкретней. Что случится через месяц? Первое что приходит на ум - нельзя скачать обновления. Но может что-то ещё?
На Unity Pro можно подписку оформить. Правда закрыть раньше чем через год ее не дадут. $75/мес.
Удваиваю вопрос, сам пилю ремейк старой игрули. Зарабатывать, на ней, не собираюсь.
>>134057
Хоть игровая механика и не является интеллектуальной собственностью, вас все равно при желании могут взять за жопу. Недавний пример 3д ремейк rock'n'roll racing, хоть ее авторы и сменили сеттинг и название, Близард пригрозила им судом, пацаны вынуждены были отправить игру и несколько лет разработки в мусорное ведро. Кстати, ребята местные, можете спросить у них подробности.
3D Ripper DX не видит ее.
Если ты авторам не понравишься, даже так. Но вероятность этого впрочем мала, просто не свети своими личными данными.
>>134062
Хуй их знает, вроде не за что было, хотя изначально это был просто ремейк, а потом они решили поменять модельки, сеттинг и название и двинули в стим. Тогда-то на них и обратили внимание Близарды. Погугли, может я где-то и напиздел вам, просто лень сейчас искать. На emu-land много это обсасывали, у них там была своя темка.
>>130757
Посаны, подскажите имя или контатик богини, шишка колом стоит.
Сделал одну картинку в UI с пустым ХП.
Одну с полным. Навесил одну на другую. Теперь если уменьшать ширину полного хп, то хп убывает.
Все реализовано в новом УИ.
Соответственно, чтобы уменьшить мне нужно отредактировать в скрипте ширину рект трансформа.
Как это сделать?
Никак не могу понять как дать ссылку и как редактировать?
rigidbody2D.AddForce(new Vector2(transform.right.x flipper.flipper, transform.right.y)speed);
если её убрать, то сняряд нормально летит, если её брать, то снаряд просто спавнится на месте, хотя значение передаётся 1 или -1, не ноль.
Что за хуйня? Может я как-то не правильно получаю её из объекта игрока?
public GameObject player;
flipper = player.GetComponent<PlayerMovement>();
Там умножение, transform.right.x flipper.flipper
Смысл в том, что персонаж флипается когда направление движения меняет, вместе с ним флипается и его пушка, поэтому когда он в в левую сторону флипнут, снаряд вылетает в противоположном направлении. Хз, может как-то по-другому это надо решать.
поделится ссылками на годноту никто не желает?
2. Хуль у них модерация такая упоротая?
Все мои асеты/пропсы вполне качественные,
хули оно пендинг уже третий месяц?
Лениво. Вот пригорит у кого-нибудь - и будет перекат.
гугли Unity3d + OpenCV
универсальный и приятный одновременно и для ПК и для Андроида.
Чтобы и минимализм и приятный функционал.
Разберём по частям мною написанное:
1. Новая игра - единственная кнопка, не вызывающая вопросов.
Хотя нет. Можно при первом старте сразу начать игру без меню, типа для отмосферносте11 но стоит ли?
2. Продолжить (она появится в меню после закрытия/паузы самого первого сеанса игры)
Здесь может быть под-меню, для левел-менеджера (уже пройденные/открытые и залоченные уровни/экраны) - стоит ли его делать?
От сейв-лоад в любой момент игры я думаю отказаться - нужен ли он в простой адвенчуре?
Сейвить будет чекпоинт - момент появления ГГ в ново-открытом экране (локации).
3. Опции - нахуй не нужны, правильно?
Или оставить слайдер управления звуком?
Нужен ли он, если на Андроиде всегда есть качелька громкости
а на ПК - слайдер на панели/крутилка на колонке?
Еще локации темноваты, может стоить добавить управление яркостью/гаммой? - хз, как это реализовать на Юнити.
///
Далее, левел-менеджер и слайдер управления звуком можно спрятать под выдвижную панельку, вызываемую кнопкой паузы - годная ли идея? Мне кажется - излишество.
///
4. Выход - нужен ли он?
Нужен ли он в ПК версии, если игра работает в оконном режиме,
где в любой момент можно нажать крестик?
Нужен ли он на Андроиде, где в любой момент можно свернуть и убить процесс?
5. Кредитс - нахуй не нужно, достаточно незаметной ссылки на сайт в главном меню.
КОроче, помоги определится, анон.
Возможно, даже поделись удачными примерами.
Смотрел на андроиде реализацию меню адвенчуры в Shapik, Машинариум, сейчас гляну Брокен Сворд.
универсальный и приятный одновременно и для ПК и для Андроида.
Чтобы и минимализм и приятный функционал.
Разберём по частям мною написанное:
1. Новая игра - единственная кнопка, не вызывающая вопросов.
Хотя нет. Можно при первом старте сразу начать игру без меню, типа для отмосферносте11 но стоит ли?
2. Продолжить (она появится в меню после закрытия/паузы самого первого сеанса игры)
Здесь может быть под-меню, для левел-менеджера (уже пройденные/открытые и залоченные уровни/экраны) - стоит ли его делать?
От сейв-лоад в любой момент игры я думаю отказаться - нужен ли он в простой адвенчуре?
Сейвить будет чекпоинт - момент появления ГГ в ново-открытом экране (локации).
3. Опции - нахуй не нужны, правильно?
Или оставить слайдер управления звуком?
Нужен ли он, если на Андроиде всегда есть качелька громкости
а на ПК - слайдер на панели/крутилка на колонке?
Еще локации темноваты, может стоить добавить управление яркостью/гаммой? - хз, как это реализовать на Юнити.
///
Далее, левел-менеджер и слайдер управления звуком можно спрятать под выдвижную панельку, вызываемую кнопкой паузы - годная ли идея? Мне кажется - излишество.
///
4. Выход - нужен ли он?
Нужен ли он в ПК версии, если игра работает в оконном режиме,
где в любой момент можно нажать крестик?
Нужен ли он на Андроиде, где в любой момент можно свернуть и убить процесс?
5. Кредитс - нахуй не нужно, достаточно незаметной ссылки на сайт в главном меню.
КОроче, помоги определится, анон.
Возможно, даже поделись удачными примерами.
Смотрел на андроиде реализацию меню адвенчуры в Shapik, Машинариум, сейчас гляну Брокен Сворд.
И ещё управление - сейчас у меня управление виртуальным стиком/AD/стрелки, но терзают сомнения - не лучше ли сделать управление кликом в то место, куда нужно подойти?
using System.Collections;
public class GoToMouse : MonoBehaviour {
\tpublic Vector2 speed = new Vector2(3, 0);
\tprivate Vector2 target;
\tprivate float movement;
void Start ()
{
target = rigidbody2D.velocity;
}
void Update ()
{
\tbool inputX = Input.GetMouseButtonDown(0);
\tmovement = speed.x inputX;\t
if (Input.GetMouseButtonDown(0))
\t{
\ttarget = Camera.main.ScreenToWorldPoint(Input.mousePosition);
\ttarget = rigidbody2D.velocity;
\t}
\trigidbody2D.velocity = new Vector2(movement, rigidbody2D.velocity.y);
\t}
}
Ругает \tmovement = speed.x inputX;\t:
Operator cannot be applied to operands of type float and bool
using System.Collections;
public class GoToMouse : MonoBehaviour {
\tpublic Vector2 speed = new Vector2(3, 0);
\tprivate Vector2 target;
\tprivate float movement;
void Start ()
{
target = rigidbody2D.velocity;
}
void Update ()
{
\tbool inputX = Input.GetMouseButtonDown(0);
\tmovement = speed.x inputX;\t
if (Input.GetMouseButtonDown(0))
\t{
\ttarget = Camera.main.ScreenToWorldPoint(Input.mousePosition);
\ttarget = rigidbody2D.velocity;
\t}
\trigidbody2D.velocity = new Vector2(movement, rigidbody2D.velocity.y);
\t}
}
Ругает \tmovement = speed.x inputX;\t:
Operator cannot be applied to operands of type float and bool
>Operator cannot be applied to operands of type float and bool
и чего тебе не понятно? переведу для тебя
>не могу умножить число на булевую переменную, еблан ты тупой
Хочу в системе инвентаря сделать возможность спавнить предметы одной строчкой. Сделал класс который висит в сцене для спавна предметов и сделал статичный класс с переменной с этим классом, в который он добавляет сам себя на эвэйке, чтобы можно было вызывать его из классов не наследуемых от монобихейвора.
У меня есть базовый класс Item и куча наследуемых от него классов. для некоторых типов я хочу сделать спавн с какими-нибудь еще правилами(например чтобы добавлялся какойнибудь компонент, или еще какая хуйня по моему вкусу). но застрял на том что в шарпе нет возможности делать switch по типу. скажите, как можно написать похитрей?
>в шарпе нет возможности делать switch по типу
то есть такая конструкция не взлетит?
[CODE]
switch(typeof(twoyaMamka))
{
case typeof(Slyha):
debag.log("бабах");
break;
case typeof(Nyasha):
debag.log("");
break;
}
[/CODE]
A switch expression of type `System.Type' cannot be converted to an integral type, bool, char, string, enum or nullable type
Да, можно, просто не слишком удобно. можно и через if(x is y) else if сделать, можно сделать через Dictionary<Type, Action> и делегаты, просто не слишком удобно. потому и спросил похитрей.
>например чтобы добавлялся какойнибудь компонент, или еще какая хуйня по моему вкусу
какие-то уникальные действия для предметов. например чтобы для тапочек добавлялся набор компонентов и чайлдов чтобы он подсвечивался и его название вылезало над ним, а для огромного мешка только его название без подсвечивания, так как его и так видно. или если предмет легко укатывается то я садил его на джойнт и до тех пор пока его не пнешь - он не покатится. или вовсе задавать все это через params[].
Не, инкапсулировать не хочу, класс Item не наследуется от монобихейвора, потому я не могу разместить там какой-нибудь public virtual void Instantiate(Transform location).
using System.Collections;
public class CameraControl: MonoBehaviour
{
public Transform followTransform;
public Vector3 offset = new Vector3(0f, 2.5f, -5f);
public float moveSpeed = 1;
public float turnSpeed = 1;
Vector3 goalPos;
//Quaternion goalRot;
// Use this for initialization
void Start()
{
if(!followTransform)
followTransform = GameObject.FindGameObjectWithTag("Player").transform;
if(!followTransform)
this.enabled = false;
}
void FixedUpdate()
{
goalPos = followTransform.position + followTransform.TransformDirection(offset);
transform.position = Vector3.Lerp(transform.position, goalPos, Time.deltaTime moveSpeed);
transform.rotation = Quaternion.Lerp(transform.rotation, followTransform.rotation, Time.deltaTime moveSpeed);
}
}
Пачяны, как изменить скрипт, чтобы камера не реагировала на движения ГГ по вертикали?
using System.Collections;
public class CameraControl: MonoBehaviour
{
public Transform followTransform;
public Vector3 offset = new Vector3(0f, 2.5f, -5f);
public float moveSpeed = 1;
public float turnSpeed = 1;
Vector3 goalPos;
//Quaternion goalRot;
// Use this for initialization
void Start()
{
if(!followTransform)
followTransform = GameObject.FindGameObjectWithTag("Player").transform;
if(!followTransform)
this.enabled = false;
}
void FixedUpdate()
{
goalPos = followTransform.position + followTransform.TransformDirection(offset);
transform.position = Vector3.Lerp(transform.position, goalPos, Time.deltaTime moveSpeed);
transform.rotation = Quaternion.Lerp(transform.rotation, followTransform.rotation, Time.deltaTime moveSpeed);
}
}
Пачяны, как изменить скрипт, чтобы камера не реагировала на движения ГГ по вертикали?
Как отобразить, к примеру, ХП (переменная) через команду GUI.Label ?
Не толстота, братишки, а суровая реальность. Вот, эта команда: http://docs.unity3d.com/ScriptReference/GUI.Label.html
Английский учил, бочку крутил, так и не понял, как вывести переменную, она же нужна для отображения
Это копия, сохраненная 28 ноября 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.