Это копия, сохраненная 3 января 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
УРОКИ: http://unity3d.com/ru/learn >>186697 (OP)
прошлый тред >>184857 (OP)
Вопрос: можно ли как-то делать проект спокойно по принципу 1 спрайт = а картинка png. А потом как-то взять и запечь все используемые изображения в атласы по 2048х2048. Конечно желательно не перепиливать ссылки и спрайты во всем проекте.
Можно. Потом объединишь их в атласы прямо через юнити при помощи нескольких кликов. Ссылки не изменятся.
http://docs.unity3d.com/ru/current/Manual/SpritePacker.html
Все нашёл, оказывается на офф сайте все есть.
Пиздос конечно комьюнити и обучающие видео. Гнусатый голос: СЕЙЧАС МЫ ПОСМОТРИ КАК СОЗДЛОВАТЬ ИГРЫ КХМ ЭТО НУ КХМ ВОТ ЗНАЧИТ ОТКРЫВАЕМ ПРОЕКТ ТУТ ЭТО КХМ В АССЕТ СТОР ВЫБИРАЕМ 2Д ПЛАТФОР И ЭТО КХМ ФФФ ЗНАЧИТ СТАВИМ СЮДА, ДА, ТЕПЕРЬ ТУТ ПОЛЗУНКИ, В ОБЩЕМ РАЗБЕРЕТЕСЬ, ВОТ СЮДА ТИПА ПЕРСА СТАВИМ, ЖМЕМ ПЛЕЙ, АГА ВОТ ИГРА ГОВТОВА, В СЛЕДУЮЩЕЙ СЕРИИ ПОКАЖУ КАК ДЕЛАТЬ СПЕЦЭФЕКТЫ И ОГОНЬ Всё это дерьмо растянуто на 20 минут, при этом 300тыщ просмотров и всего 8 дизлайков, в коментах восторженный визг, и так почти все видосы: какой нибудь школьник у руля учит таскать ассеты.
public class Info : Singleton<Info>
{
public INFA infa {get;set;}
}
//в первой сцене
public class InfaFromOneScene
{
infa gameinfo;
public void Save()
{
Infa.Instance.infa= gameinfo;
}
}
//во второй сцене
public class reader
{
public void SceneLoad()
{
INFA infa = Infa.Instance.infa;
....
}
}
Singleton.cs лежит где-то в стандартных модулях, утилити вроде
Но ты же сам даун. В тысячный раз пишу в юнити-треде - читайте оф. мануал. Смотри оф. туториалы. Если не хватает знаний в программировании - читайте мануал по c#.
Не смотрите уроки от школьников для школьников. Вы ничему по ним не научитесь. Только научитесь делать НЕПРАВИЛЬНО, потом придется переучиваться
так ты применяй сразу на практике.
Нахуй оно нужно тогда в 2015 году?
Либы от васянов не предлагать.
Одноклассники рассказали что там репликации нет? КОЧАЙ УЕ4 ТАМ ГРАФОН И КОНСИСТЕНТНОСТЬ МАЛАЦА ЗДЕЛОЛИ
Хуль ты так воспламенился, мань?
Хм, наверное что-то такое и сделаю.
У меня была идея создавать контроллер второго режима в первом с DontDestroyOnLoad(), и его там инициализировать. А потом после конца дургой сцены уже читать из него данные и удалять. Но это какой-то тупой способ.
ну воопше так и делают, объект, который не уичтожается при смене сцены. просто его обычно присобачивают к геймменеджеру, который и есть синглтон
то есть берем твой пример с тотал варом.
есть 2 основные сцены - стратегическая и тактическая.
гейм менеджер в частности хранит список всех армий. рулит ими стратегический менеджер. перед началом боя из этого списка выделяются список участвующих армий, на основе которых тактический менеджер будет строить отряды на карте. по завершении боя он подкоректирует список участников по результатам (потери, набранный опыт и т.д.) и загрузит стратегический уровень, где уже стратегический менеджер разрулит стратегические результаты(переместит армии, уничтожит уничтоженные, выпилит/левелапнет полководцев, захватит провинции) на основе этого частичного списка. в результате у тебя получится три менеджера
1. GameManager - хранит общую инфу и переносит её между сценами
2. StarategicManager - рулит стратегической картой
3. TacticalManager - рулит тактической картой
Делаю SoulCalibur с блек-джеком и шлюхами.
На костях анимированных персонажей триггеры, и при анимировании удара я детектю касание и запускаю обратную анимацию.
Но если удар слишком быстрый, триггер иногда успевает пройти насквозь, и на обратном пути еще разок пройти насквозь.
Как останавливать удар (OnCollisionEnter \ OnTriggerEnter ставить признак остановки удара) "в аниматоре"?
Ввод, это практически наименее развитая часть Unity. Я не знаю с чем это связано, но у меня такое чувство, что на это просто забили хуй. Следом идёт сетевое взаимодействие и локализация (для последнего хотя бы в Ассет Сторе что-то есть).
transform свойство у любого компонента
а где эта папка? внутри инспектора в ассетах нету. в папке проекта тоже. или я просто сам создаю?
ага, спасибо
Некоторые данные о мобильных платформах из отчета Unity Technologies:
74% всех установок мобильных игр пришлось на устройства под управлением Android, на iOS - 17%;
среди пользователей iOS большая часть пользователей использует последние версии операционной системы: 77% установок пришлись на 8.х и 97% на 7.х;
количество установок на iPhone превышает число на iPad;
на Android менее 9% установок пришлось на устройства под управлением версии ОС 5.х;
три самые популярные версии Android (4.4, 4.2 и 4.1) насчитывают 78% всех установок на Android.
Свыше миллиарда ноунейм говна, о котором никто не вспомнил спустя месяц после его производства.
Юнити это новый флеш для фастфуда.
Просто я айфоноблять и андроидом не пользовался раньше. Нужно как можно дешевле, но чтобы приложения с Unity запускались и не тормозили.
Гугол Нехус 7 купи. Женерик андроид планшет с среднестатистической начинкой, стоить должен не много т.к. вышел 2 года назад, проблем с поиском юсб дров и другого девелоперского говнеца не возникнет ибо гугл.
Залупу тебе на воротник с таким синглтоном. Вспомнишь мои слова, когда у тебя на сцене будут повляться несколько "синглтонов".
Давай начнём с того, что Unity, это выбор успешного, уверенного в себе человека. И на этом закончим.
Мне насрать, что ты выберешь. Кроме того ты, очевидно, пытаешься толсто вбросить.
Миниигры - юнити
Среднеигры - уеч
Игры - свой движок
Гигаигры - своя студия, движок, свои художники, композиторы, свои учёные, исследовательская лаборатория, свои представительства по всему миру
Unity - хуита на коленке, чтобы срубить бабла на лохах.
UE4 - серьезный уважаемый проект, если хочешь застолбить свое имя в истории видеоигр.
А плюсцы-то осилишь?
Как уеч может в ИГРЫ, так и юнити может в СРЕДНЕИГРЫ.
>если хочешь застолбить свое имя в...
...своих маняфантазиях, где ты всё же смог довести игру до релиза. Но в реальном мире с UE4 такое не пройдёт. Он больше подходит для больших игровых студий, где код пишут старые бородатые дядьки.
Если есть мощности для быстрой компиляции, то UE4 - выбор здорового человека.
Если нету, то остаётся только Unity и C#.
Блюпринт не нужен.
На самом деле выбора у тебя немного. Если собираешься пилить игру пусть до уровня большого проекта, но таки инди, где многое не на уровне крутых игр, то бери юнити, так выйдет быстрее. Если хочешь пилить йобуи не запилить ее конечно же, иначе бы тебя тут не было с такими вопросами, то бери уеч.
Ставил. Проблема в том, что за кадр проходится определенное расстояние (рукой, палкой, чем угодно). Фактически, если палка длинная, то на конце палки это движение покадровое, т.е. в 50% случаев она проходит "насквозь". То есть, кадр "перед преградой" и сразу кадр "после преграды". Если "перед преградой", а потом "в преграде" - все ок, OnTriggerEnter успевает отработать и передать аниматору "остановить анимацию", но это всего 50% срабатываний.
если у тебя появляется несколько синглтонов, то ты что-то делаешь не так. например не понимаешь зачем нужны синглтоны
Тип сетевого сообщения:
class DamageMessage : MessageBase
\t{
\t\tpublic int damage;
\t}
Команда, которая отправляет на сервер имя жертвы и нанесенный ей дамаг:
[Command]
\tpublic void CmdTransmitDamage(string transformName, int dmg)
\t{
\t\tDamageMessage dmgMsg = new DamageMessage();
\t\tdmgMsg.damage = dmg;
\t\tGameObject player = GameObject.Find(transformName);
\t\tNetworkServer.SendToClientOfPlayer(player, dmgMsgID, dmgMsg);
\t}
Обработчик, который вызывается у клиента при получении сетевого сообщения:
void DetectDamage(NetworkMessage netMsg)
\t{
\t\tDamageMessage msg = netMsg.ReadMessage<DamageMessage>();
\t\tGetComponent<PlayerHealth>().TakeDamage(msg.damage);
\t}
Регистрация этого обработчика:
public override void OnStartClient()
\t{
\t\tNetworkManager.singleton.client.RegisterHandler(dmgMsgID, DetectDamage);
\t}
dmgMsgID - любое число типа short
В целых двух примерах, которые я нашел в интернете обработчик объявлен как static. Не знаю зачем это нужно, но у меня все работает и так.
Тип сетевого сообщения:
class DamageMessage : MessageBase
\t{
\t\tpublic int damage;
\t}
Команда, которая отправляет на сервер имя жертвы и нанесенный ей дамаг:
[Command]
\tpublic void CmdTransmitDamage(string transformName, int dmg)
\t{
\t\tDamageMessage dmgMsg = new DamageMessage();
\t\tdmgMsg.damage = dmg;
\t\tGameObject player = GameObject.Find(transformName);
\t\tNetworkServer.SendToClientOfPlayer(player, dmgMsgID, dmgMsg);
\t}
Обработчик, который вызывается у клиента при получении сетевого сообщения:
void DetectDamage(NetworkMessage netMsg)
\t{
\t\tDamageMessage msg = netMsg.ReadMessage<DamageMessage>();
\t\tGetComponent<PlayerHealth>().TakeDamage(msg.damage);
\t}
Регистрация этого обработчика:
public override void OnStartClient()
\t{
\t\tNetworkManager.singleton.client.RegisterHandler(dmgMsgID, DetectDamage);
\t}
dmgMsgID - любое число типа short
В целых двух примерах, которые я нашел в интернете обработчик объявлен как static. Не знаю зачем это нужно, но у меня все работает и так.
>Смотри пик.
Благодарствую. Не помогает. Предполагаю, что по той причине, что движение осуществляется не "физикой", а непосредственно анимацией, пусть и с параметром Animate Physic. Алсо, этот параметр лично у меня увеличивает время обработки физики почти в 1.5 раза.
Рейкастом - с радостью, но не понимаю логики: рейкаст от оружия до противника, ок. А как узнать куда попал? Сравнивание длинны рейкастов до основных точек - костыль + может быть препятствие не попавшее под рейкаст (да, можно SphereCast, но разница в "ударе" и "уколе" будет крайне велика и ее не проконтролировать).
У меня вдруг появилось подозрение, что ты не используешь коллайдеры.
http://docs.unity3d.com/ru/current/Manual/class-Rigidbody.html
>увеличивает время обработки физики почти в 1.5 раза.
За всё нужно платить, верно?
спасибо, заебок
надеюсь эта хуйня сработает с анимацией
а как посоветуешь, мне лучше прямо сейчас с этим начинать ебаться, или ближе к концу разработки? мне что-то думается лучше сейчас, а то вдргу будут СЮРПРИЗЫ
А кстати ты не в курсе размера? Я делаю игру на ПК, причем если она выйдет через год-два то примерно расчитано на железо которое сегодня считается скорей хорошим. Может имеет смысл сразу врубить 4096х4096?
Кстати это вообще всегда псраведливо, что чем больше атлас тем быстрее все работает? Или может выйти что один большой атлас 4кх4к будет даже медленней чем 3-4 неболъших атласа, где к примеру у каждого притивника свой атлас, у игрока свой итд.
Нуб, 2д-дегенерат рапортует: поставь в игре фикисрованный фпс, и замени стандартный 60 или 16.666 мс на что нибудть в духе 400 ФПС. И помни фиксированный таймстемп.
http://docs.unity3d.com/ru/current/Manual/class-TimeManager.html
А если для тебя это не вариант, так как игорь будет тормозить то короч вот тебе направление, вектор кароч:
ну делаешь такой анимацию туже самую на 100500 кадров, вместо 8 ключвых. А потом просто ее даунскейлишь кароч. Авось это повлияет.
А вот короч еще: делаешь на узкую палку невидимую толстоую оболочку и коллизии по ней считаешь.
Как-то так.
p.s. а ты и правда делаешь клон соул калубура? а в 2д смогешь? тебя можно нанять денег тебе дать? twiS#vstedpixelANUSyandeccFxPUNCTUM)4=ru
>замени стандартный 60 или 16.666 мс на что нибудть в духе 400 ФПС. И помни фиксированный таймстемп.
>ну делаешь такой анимацию туже самую на 100500 кадров
Как же я хочу разбить тебе ебальник.
Там не программирование, как таковое, а окружение юнити надо освоить. Кодить учись по другой инфе. В принципе разработку на юнити можно сравнить с разработкой на фреймворке.
Ну и доков достаточно вполне.
с шарпом знаком профессионально и таки очень хорошо. отдельно бесит устаревшая нафик версия языка и порезанная стандартная библиотека. впрочем с этим можно смирится.
Если с шарпом знаком хули тебе еще надо, смотри видео и делай игры, доков ему мало, совсем кириллы охуели.
\t\t\tmoveDirection = Vector3.forward ;
\t\t\tmoveDirection = speed;
\t\t\tif (Input.GetMouseButtonDown (0)) {
\t\t\t\tmoveDirection.x -= 60;
\t\t\t\tmovX = movX - 1; }
controller.Move(moveDirection Time.deltaTime);
Как это исправить? Переписал скрипт через transform.Translate. Теперь не знаю как совершить прижок.
Я вот нихуя не понял, может видос лучше запилишь?
Зачем ты умножаешь moveDirection на deltaTime? Дельтатайм варьируется от апдейта к апдейту и твой скелет перемещается на разное расстояние, хотя тебе нужно просто его передвинуть на известное значение.
>Теперь не знаю как совершить прижок.
А с контроллером ты его как совершал? Ты вообще не вникаешь в то что пишешь, просто откуда то спиздил код, для раннера не предназначенный.
>2д-дегенерат рапортует
Он же сразу предупредил, лол. Но я всё же думаю, что ему хватит добавить коллайдеры.
>>188768
Просто они её не так давно обновили, в старом варианте были примеры кода, посмотри в легаси гуи, там вроде ещё в старом виде схоронилось.
>половина методов и свойств просто перечислено
Есть такое. Про события смотрел, вообще заебок "такое-то дерьмо наследуется от такого-то говна". И говно - ссылка. Жму, а там нот фаунд. Но в гугле есть всё.
>>188785
А почему не через физон? У тебя же из-за того и провалы под пол, что ты не физоном двигаешься, а просто перемещаешь. Добавь чарактер мотор и ебашь физоном по хардкору. Олсо, там прыжок искаропки.
>>188798
Это умножение делается для плавного движения.
>Это умножение делается для плавного движения.
>GetMouseButtonDown
>А почему не через физон?
>раннер
Кириллы, кириллы everywhere.
это. если у тебя три дорожки, может движение будешь отталкивать от дорожек? нажал там на кнопку, персонаж хопана перешел на дорожку в сторону которой нажал. ты же знаешь где твои дорожки, да?
>ты не используешь коллайдеры.
Ей-ей использую. У меня даже 2 проекта рядышком запущены - с палкой-коллайдером, и с палкой-триггером.
>За всё нужно платить, верно?
Согласен - только результат чот неоч. Я даже в full physics человечков попробовал, когда оружие управляется физикой, а не анимациями - результат неоч, из-за специфичной реализации джойнтов в Юньке, а APE - Articulated Physics Engine еще не вышел.
>>188764
Делал чуть проще - просто корутину отвечающую за шаг анимации более лучше чаще запускал (так чтобы при 2х персонажах проц не повесился), "шаг" становился меньше, но при движении уже 2.5 "метровой" палки на ее конце шаг был неравномерен и 30% ошибочных срабатываний это слишком много.
Более жЫрный коллайдер\триггер - вариант рабочий, но тогда там уже не бревна нужны, а колонны. К тому же, при попадании за "тик" кадра, колонны по персонажу прикрытому щитом - в триггере оружия щит и голова. Как понять был ли удар?
И правда. 2д не занимаюсь - не интересно. Зарабатывать на хобби - потерять хобби, имхо. Я офисный планктоша, и в рабочее время ковыряюсь "для себя". + в 2д нет таких проблем - все решается математикой дистанции\высоты.
Пробовал в математический "удар", но тут хз как считать блоки - я учебник по вышке лет 8 назад открывал, и решить задачу "пересечение плоскости и прямой" не могу.
возможно, через гуи?
> Singleton.cs лежит где-то в стандартных модулях, утилити вроде
хуя оО не знал, спасиб,
а то каждый раз пишу свой костыльный
Мне нужно сделать вот такой. Может кто-то видел гуиды, или еще что-то в помощь как это сделать.
Кирюх, я знаю, что ты поможешь)
Нужен своего рода ползунок, в котором тащишь маленький кружок, и происходит движение итд.
>>>>188798
Спасибо, помогло. Код брал с доков юнити. Сейчас разберусь с Time.deltaTime
OnCollisionEnter2D
OnCollisionExit2D
OnCollisionStay2D
Но ведь есть разные варианты куда и как их вешать. Грубо говоря есть игрок а есть много монеток которые он собирает. Я правильно понимаю что при таком раскладе значительно лучше повесить обработчик именно на игрока, а так же только ему дать rigid_body? А вот вешать скрипт на монетку которая сама себя уничтожает, может как-то и правильней с точки зрения распределения обязанностей (хотя спорно), но зато будет на порядки быстрей. Или я ошибаюсь и никакой существенной разницы нету и я зря парюсь? Просто у меня быстрый комп сейчас и на нем что-то всегда 16 фпс в профайлере. А вот для всяких мобилок это вероятно актуальная проблема. Вообщем если кто знает как грамотно обрабатывать столкновения в юнити поясните.
А то сейчас у меня на условных "монетках" вот такой код:
void OnTriggerStay2D(Collider2D other) {
if (ReferenceLvichka.character.Input.VerticalAxisDigital == 1 && canBeOpenTimer <= 0) {
// EnterDoor(); // called from animator after door opens
animator.SetTrigger("open");
canBeOpenTimer = DOOR_COOLDOWN;
}
}
>я учебник по вышке лет 8 назад открывал, и решить задачу "пересечение плоскости и прямой" не могу.
Собачки-девочки не знают про мой рейкаст?
>Я правильно понимаю что при таком раскладе значительно лучше повесить обработчик именно на игрока, а так же только ему дать rigid_body?
Правильно. Монетке достаточно висеть и крутится, а функция "взять монетку" будет у игрока, так даже по логике правильнее.
>Или я ошибаюсь и никакой существенной разницы нету и я зря парюсь?
Паришься не зря, особенно если под мобилки пилишь.
двачую адеквата.
>>188823
всякое желание терял уже 10+ раз, когда начинал в бошке спотыкаться о камни, которых еще не сделал.
потом забил на все, и начал пилить мало помалу и заебок
единственный совет могу дать, чтобы ты не помер - это раскидывать файлы по папкам с адекватными именами, и не ложить 100+ скриптов в одну папку.
Если ты видишь легкий путь оптимизации, то почему сразу не сделать лучшим образом? Тем более в данном случае сложностей никаких не предвидится. А так да, до мелочей жопу рвать заранее не надо, неблагодарное занятие.
>Пробовал в математический "удар"
>математический
>рейкаст
>математический
>рейкаст
О чем ты? Не надо так.
если поиск более оптимального решения занимает не более пары часовсугубо мое мнение, то не стоит пока что за него браться, сделай так, чтобы работало.
вернуться ты всегда успеешь
Rigidbody.AddForce чем не устраивает?
AAAAAAAAAAAAAAAAAAAAAAAAAAAA блядь ААААААААААААААа нахуй
Я спросил жи, как правильно юзать это 2д. Нет, блядь филисофксие рассужения в купе с максимализмом. Ахуеть просто. Ты спрашиваешь куда грамотней скрипт вешать и делаешь некотрые предположенйия, просто хотя найти поддержку или опровержение у более опытных юнитиебов. А тебе отвечают про сущность бытия и внимание ПОДХОД К РАЗРАБОТКИ ИГР И ФИЛАОСОФИЮ ПРОГРАММИРОВАНИЯ. Ебать. Ахуеть просто, невер чеймджс. Скрипт то куда вешать, лалка? Я как раз и не хочу особо ебаться, прсото хочу накатонную дорожку и спокойно делатъ другое. Неужто я спросил о чем-то редком и малоизученном?
В игрока пихай, неуравновешенный.
Ты чего такой деловитый? Американец что ли?
Хоспаде всемогущий Кирилл, дай мне сил, спаси и сохрани! Тебе сложно зайти на официальный сайт?
http://unity3d.com/ru/legal/eula
Определение версии, которой Вы можете пользоваться, – ограничения по личному доходу Unity
Unity Personal (включая варианты для развертывания на платформах iOS и Android) не могут использовать:
1. коммерческие структуры, которые A) получили валовой годовой доход в размере более 100 000 долларов США, или B) привлекли средства (включая, в том числе, краудфандинг) на сумму более 100 000 долларов США, в каждом случае – за последний закончившийся финансовый год;
2. некоммерческие структуры, общий годовой бюджет которых превысил 100 000 долларов США (по всей некоммерческой структуре, а не по одному отделу) за последний закончившийся финансовый год; или
3. физические лица (не действующие от имени юридического лица) или индивидуальные предприниматели, валовой годовой доход от использования программного обеспечения Unity которых превысил 100 000 долларов США за последний закончившийся финансовый год. Такой доход не включает в себя доход, полученный этим физическим лицом не в результате использования программного обеспечения Unity.
Есть navmeshagent, который уебок. А уебок он потому, что имеет кап на скорость поворота, даже если ангуляр спид и акселерейшн выкрутить до небес перс все равно крутится достаточно ватно. Кто-нибудь сталкивался и как боролся с этим? Хочу добиться максимально быстрого отклика аля как в дибабле/хотсах там всяких.
Думаю, нельзя. Насколько я помню, у NavMeshAgent можно отключить изменение трансформа объекта. Тебе нужно будет вручную получать скорость из NavMeshAgent, а далее применять её на твоё колесо. Как-то так.
Пока просто к дулу прилеплен точечный свет у которого меняется enable.
У оружия с большой скорострельность этот метод багает: если свет должен мерцать каждые n-времени, то он частенько вообще не появляется в течении ~5*n-времени.
А порой не появляется даже при одиночном выстреле.
Дебаггер так подсвечивает. Строчка не будет выполняться.
http://docs.unity3d.com/Manual/SL-ShaderPrograms.html
Writing Surface Shaders
Написание шейдеров, взаимодействующих с освещением, это сложная задача. Есть различные типы источников света, различные варианты теней, различные пути рендеринга - прямой (forward) и отложенный (deferred), и шейдер должен как-то управлять всей этой сложностью.
Surface Shaders in Unity is a code generation approach that makes it much easier to write lit shaders than using low level vertex/pixel shader programs. Note that there are no custom languages, magic or ninjas involved in Surface Shaders; it just generates all the repetitive code that would have to be written by hand. You still write shader code in Cg / HLSL.
For some examples, take a look at Surface Shader Examples and Surface Shader Custom Lighting Examples.
How it works
Вы определяете “поверхностную функцию” (surface function), которая принимает любые UV или необходимые вам данные и заполняет исходящую структуру SurfaceOutput. SurfaceOutput по сути описывает свойства поверхности (её цвет альбедо, нормаль, излучение, зеркальность и т.д.). Вы пишете этот код на Cg / HLSL.
Недоанглосаксон, пожалуйста...
Так перевод просто кусками хуево сделали, потому что ленивые пидоры, че не сделали нормально. На статью хоть посмотри перед тем как за свою англичанку кукарекать.
если конкретно - делаю модель солнца. хочу, шоб горело прям так заебца. как сделать:?
Сейчас из обходных путей нагуглилось - вот этот скрипт: http://framebunker.com/blog/poor-mans-nested-prefabs/ с ходу он у меня для гуи не подцепился (бегло пробежавшись по коду, сложилось ощущение, что проектировался он для 3д-объектов), но я его ещё покопаю. Также, есть пара плагинов (https://www.assetstore.unity3d.com/en/#!/content/2962 и https://www.assetstore.unity3d.com/en/#!/content/17557 ) и какие-то совсем дикие костыли, вроде менеджеров объектов.
Я это к чему, может у кого завалялся один из вышеприведённых плагинов? Жаба дико душит брать их за такой-то бабос. Либо, может, вложенные префабы таки запилили в юнити 5 и это я криворукий долбоёб?
С меня няшка.
может, у тебя это проперти и на геттере что подвязано было?
2д 8 бит с йоба рпг прокачкой взлетит?
Смотри. В моей игре будет много окон меню. Окна имеют похожую структуру, у них сверху есть поле с названием (у названий одинаковый шрифт, размер текста), у них общий задний фон, у них есть какие-то декоративные элементы, которые сохраняются от окна к окну. Тем не менее, вся эта балалайка - часть окна и логически является его дочерним элементом.
Но, несмотря на всё это, окна, само собой, имеют различия. Одно окно - это, скажем, выбор персонажа. Другое окно - настройка его способностей. И так далее. Окон много.
Каждое окно я хочу хранить в префабе. Чтобы всегда можно было загрузить его из файла, чтобы было легко его отредактировать и откатить и так далее. Но, вспомним, что у окон есть некая общая часть - задник. Я хочу, чтобы, в случае, если возникнет необходимость поменять у задника, например, шрифт текста, я сделал бы это один раз, и он автоматически заменился бы во всех моих префабах окон. DRY во все поля. То есть, логично было бы сделать задник префабом - для этого они и нужны. Получаем префаб внутри префаба.
Здесь у юнити проблема - если я первый помещаю префаб внутрь второго и сохраняю результат, она начинает считать всё это частью второго префаба и теряет связь с первым. То есть, если я буду редактировать префаб заголовков окон, сами окна меняться автоматически не будут.
Так понятно?
То есть ты сам не знаешь? Понятно.
Дохуя где. В любым математических расчетах. В векторных вычислениях к примеру.
У тебя вопрос ебанутый, уровня: "Где в играх можно использовать умножение?"
Зачем здесь использовали тангенс? Я понять не могу https://youtu.be/Uqi2jEgvVsI?t=10m56s
float x = Mathf.Tan(camera.fieldOfView / 3.41f) z;
У него там была формула: x = tan(FoV / 2) z. Число 2 он заменил, ок. Но camera.fieldOfView задаётся в градусах, а не в радианах. А Tan принимает угол в радианах.
Вот нихуя не изменилось, ебливое ты чмо.
Бамп вопросу. Может, распилить персонажа на две половинки?
По теме-то есть что сказать?
transition'ы настрой, даун.
Рашкореальность, как она есть.
С другой стороны еврореальность, когда тебе не указывают на очевидные ошибки, дабы не вмешиваться в твоё личное пространство, мне тоже не нравится.
Спроси его на гд.ру. У него там своя темка.
Присмотрись, там мехи стоят - сомнительный шаг, учитывая как сильно физика грузит игры.
Разумнее было анимацию нарисовать, но если говорить о нект гене и отбросить старые машины, то вполне допустимо.
А вообще хорош, один из немногих, кто использует возможности движка по настоящему.
https://twitter.com/vapgames/status/637772152184406016
Причём тут возможности движка. Он просто шейдеры дрочит. Выглядит это все так-же безвкусно.
У меня как-раз вкус есть. Это вы тупые технари не способные в эстетику не можете отличить говно от конфетки. Это как с этой Ori: блевотная мазня обмазанная чуть более чем полностью шейдорами. И это еще называют красивым.
Причём тут это. Просто во всем нужна мера. Шейдеры это художественное средство. Но для кого-то они становятся самоцелью.
И есть в нем параметр - интенсивность вспышек от выстрелов.
Во время каждого выстрела игрока или бота производятся вычисления: базовое число оружия * на интенсивность вспышек из скрипта с настройками.
Будет не крузис, но хочется плавной игры и на некропека.
Все норм и не надо заниматься байтоебством или во время перестрелок ноутбуки начнут плавиться?
типа
private float value = 0.0f;
public float CurrentValue {
get {
if(value < float.Epsilon) value = BaseValue * Options.Value;
return value; }}
но для одного умножения - вааще нет смыслы
Мыльное гавно без души
С вероятностью 99% твою игру никто даже не заметит. Она моментально утонет в гугл плее.
Вся суть этой мрази вылилась наружу. Надеюсь, теперь ни у кого нет сомнений как нужно поступать с подобными дельцами от игростроя в /gd/?
>это уже четвертая моя игра
>будет такой же успешной, как две предыдущие
Кличко ИТТ, все в ринг.
Что не так? Первая была не очень, две последующих - норм, четвертая такая же, как две предыдущие.
Мимокрокодил
есть List<int>, он большой, он упорядочен по возрастанию. есть int. как найти наиболее близкое к int значение в List<int>?
var prefab = Resources.Load<GameObject>("prefabname");
prefab.transform.SetParent(target.transform);
Спасибо, няша.
Не помогло - false телепортирует удочеряемый объект к Аллаху в Кремль, true просто перепидорашивает rotation.
Причина поведения ясна - Scale обьекта не 1,1,1. Я уже думал это говно пофиксили...
Как обходить, никто не знает?
ставить дефолтный скейл, удочерять трансформ, а потом ставить нужный размер, не?
А вкатываюсь, я собственно, с чем. Имею неплохие знания шарпа, немного говнокодил бэкэнд на асп. товарищ попросил помочь ему с кодингом в юньке, поковырял ее с недельку, толком нихуя не понял, кому не сложно - поясните за ахитектуру проекта. Используются какие-то шаблоны? Или какие-то общепринятые правила? Заскриптить то не проблема - а вот грамотно между собой заставить все взаимодействовать - уже да, проблема имеется. Проект представляет собой вариацию rpg-rts-td, кто играл в свое время в xHeroSiege в WC3 - тот поймет о чем речь. Буду рад любой полезной инфе и ссылкам, с меня как обычно - нихуя. Спасибо.
В юнити все реализовано компонентами. Каждый cs файл может стать компонентом, подключенным к геймобжекту. Паблик поля становятся видны в редакторе. Ну и связи своих скриптов-компонентов реализуешь через паблики. В остальном, читай/смотри помощь на сайте, все очень грамотно и по существу.
>Имею неплохие знания шарпа
>поковырял ее с недельку, толком нихуя не понял,
Универ/самоучка? Просто интересно.
спасибо, помог. правда я чуть по другому сделал в итоге
Это не так: реализация возможна, изменением скейла, таким же способом, каким меняется localPosition и Position при удочерении. Пройди нахуй, аггро.
>>189528
Не совсем. Стрела попадает в кусок "стены" (1.2.1) или "камень". Если scale 1.1.1 то все ок, если нет (а оно будет в 90% случаев "нет") то rotation визуально пидарасит. Вопрос не в скейле "стрелы" а в пидорашенье меша при удочерении объекта к объекту с не единичным скейлом.
>>189583
Костыль, но попробую, спасибо!
а если у меня префаб находится в какой-то папке?
например:
Assets/Prefabs/Levels/LevelPrefab
как мне подгрузить его?
Resources.Load<GameObject>("Assets/Prefabs/Levels/LevelPrefab");
так что ли?
Объект для загрузки должен находится в папке Resources. папка должне быть где-то в ассетсах(может и не одна - проверяются все). путь указывается относительно неё. т.е. если у тебя префаб лежит в Assets/Resources/Levels/LevelPrefab.prefab
то Resources.Load<GameObject>(@"Levels/LevelPrefab");
ps. принципиальная разница - обычно все что в ассетсах всегда грузится при старте приложения и остается загруженным до завершения. ресурсы грузятся/освобождаются по необходимости
Можно.
Можно и замечу, что в отличии от еврейского анрила ты не становишься их рабом выплачивая до конца жизни 5% с заработанного.
Хотя в 2016 должны зарелизить сетевую либу, уже со всем необходимым. Пока она в виде какого-то огрызка.
>5.4 Mar 16, 2016
>2D: 9-Slice Sprites
>Tiles the sprite's texture using the 9-slice technique when the size of the sprite increased beyond the size of the texture.
WUT?
спасибо, Кирюх.
>Повторяет текстуру спрайта, используя метод 9-slice, когда размер спрайта превышает размер текстуры.
А теперь по-порядку и подробней. Я пилю клиент-серверную походовую хуету и использую юнити в качестве вьюхи, если так можно выразиться. Все обсчитывается на сервере, все коллизии, расчет боев и прочая ебола. Хуйня хоть и походовая, но с подковыркой: ходы квантованы по времени и один ход не может длится больше определенного промежутка времени (скажем, 1/10 секунды), после этого он считается завершенным, обрабатываются все действия в стеках, рассчитываются их результаты и т.д. Так вот, на более-менее больших объемах взаимодействующих объектов я столкнулся с тем, что разумеется проверять коллизии объектов каждого с каждым нихуя не оптимально и надо это дело переделывать дабы обработка хода не занимала неприличное количество времени. Из оптимизаций очевидно придумалось разбить пространство на сектора и для каждого объекта проверять коллизии не со всем подряд, а только с тем, что есть в его и соседних с ним секторах. Так вот, каким образом поудобней будет хранить всю эту еболу с секторами с находящимися в них объектами? Может, есть какое-нибудь йоба-дерево?
Игорь джваде, хотя не думаю, что лишнее измерение будет нести ломающий концепцию смысл.
для 2д достаточно обычного грида. достаточно разбить на клетки, которые заведомо больше размеров объекта с учетом максимально возможного перемещения за квант времени и проверять колижены с обьектами в 9 соседних с проверяемым объектом клетки
Таки вопрос в том, как оптимально хранить грид. Просто кучей вложенных массивов? Я пишу сервер на пиздоне, если что.
На данный момент на каждом НПЦ висит скрипт с индивидуальной для него функцией, которая выбирает нужную фразу(на основе переменных) и возвращает её в окно диалога. Но как то это громоздко выглядит. Может есть удобнее способ?
Я не могу придумать, как настроить лупинг и задержку. Если ставить задержку на проигрывание эффекта частиц длительностью от первого кадра первого клипа, до нужно части второго, то последующие проигрывания съедут по времени, ибо первый клип больше проигрываться не будет.
Есть еще вариант, во вкладке эмишн задать кривую, на которой указать первый длительный промежуток, и последующие короткие, между проигрыванием частиц. Но тогда получится только ограниченное количество проигрываний партиклов.
Помогите решить проблему.
Я бы сделал что-то типа глобальной таблицы где одно поле - уникальный идентификатор строки, второе - сама строка, а для НПЦ - что-то типа конечного автомата, графа переходов (код общий, данные для каждого НПЦ свои), в котором происходит выбор фраз в зависимости от персонажей и процесса диалога.
https://www.assetstore.unity3d.com/en/#!/content/11672
а воопше подумай что тебе нужно от диалоговой системы
обычно диалог представляет собой дерево вида
[Действия]
-[условие][фраза][следующий узел]
- ....
это хорошо вижно на первом скрине по ссылке
серые - действия(фразы неписи)
синие - твои реплики
вот думай как это реализовать в общем виде или покупай готовый вариант
эм...
в аниматоре вешаешь на второй стейт скрипт, который по OnStateEnter запускает(с задержкой) партиклы
У меня реализовано без анимаотров, через легаси говно. А сами модели, текстуры, звуки достаются из ассетбундлов. Я уже придумал костыль, в принципе, но все равно спасибо, об этом я не подумал.
любое неудобное говно что скрывается в коде всегда выглядит чистенько и приятно если к нему написан гуи где все делается парой кликов, а все прочее умято в пару функций.
я бы даже не ебался с способом хранения, если место не поджимает.
Имеется в виду, вот скрипты висят на костях, а на меше висит главный скрипт со здоровьем, как здоровье уменьшать?
transform.Find("..../").GetCOmponent не работает
допустим, я хочу сделать класс - планета. объекты этого класса будут создаваться в главном скрипте. меня интересует вот что: до этого я делал планеты просто внутри главного скрипта:
GameObject planet = new GameObject();
planet = GameObject.CreatePrimitive(PrimitiveType.Sphere)
на выходе я получал сферу в игре.
а терь вопросы: как мне в конструкторе класса planet прописать так, чтобы также создавалась сфера не создавая внутри класса planet объект типа GameObject? и как в том же конструкторе добавлять компоненты к текущему объекту через AddComponent<>()? и можно ли вообще делать всё то, что я описал, или для создания сферы в игре всё равно нужно делать создавать объект типа GameObject()<>?
такс.
ва-первых - любой объект на сцене - геймобжект, соответственно создать планету не являющуюся геймобжектом нельзя по определению.
ва-втарых - юнити использует компонентную систему, объект лишь контейнер для компонентов, каждый из которых реализует свой функционал. собственно твой способ один из вариантов создания объекта на ходу. для прикрепления нового компонета используй просто AddComponent<T>() т.е. для примера у тебя есть public class Planet : MonoBehaviour
planet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
planet.AddComponent<Planet>();
один из минусов подхода - всегда используется конструктор по умолчанию. инициализацию следует проводить в Start()/Awake() через параметры компонента, которые назначаются в редакторе/в коде при создании
воопше правильным способом будет создание префаба планеты - заготовки с уже проставлеными параметрами компонентов, которую можно потом создать за один вызов. параметры опять же можно настроить отдельно. или воопше построить фабрику планет типа
public class PlanetFactory : MonoBehaviour
{
public GameObject PlanetPrefab;
public static PlanetFactory Instance {get; private set;}
void Start()
{
Instance = this;
}
public GameObject Create(Texture tex, string Name)
{
var obj = Instantiate(PlanetPrefab);
obj.GetComponent<Material>().SetTexture(0, Texture);
obj.GetComponent<Planet>().Name = Name;
return obj;
}
}
в редакторе вешаешь этот скрипт на пустой го, назначаешь ему префаб планеты и потом в любом месте
var planet = PlanetFactory.Instance.Create(PlanetTex, "Earth");
такс.
ва-первых - любой объект на сцене - геймобжект, соответственно создать планету не являющуюся геймобжектом нельзя по определению.
ва-втарых - юнити использует компонентную систему, объект лишь контейнер для компонентов, каждый из которых реализует свой функционал. собственно твой способ один из вариантов создания объекта на ходу. для прикрепления нового компонета используй просто AddComponent<T>() т.е. для примера у тебя есть public class Planet : MonoBehaviour
planet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
planet.AddComponent<Planet>();
один из минусов подхода - всегда используется конструктор по умолчанию. инициализацию следует проводить в Start()/Awake() через параметры компонента, которые назначаются в редакторе/в коде при создании
воопше правильным способом будет создание префаба планеты - заготовки с уже проставлеными параметрами компонентов, которую можно потом создать за один вызов. параметры опять же можно настроить отдельно. или воопше построить фабрику планет типа
public class PlanetFactory : MonoBehaviour
{
public GameObject PlanetPrefab;
public static PlanetFactory Instance {get; private set;}
void Start()
{
Instance = this;
}
public GameObject Create(Texture tex, string Name)
{
var obj = Instantiate(PlanetPrefab);
obj.GetComponent<Material>().SetTexture(0, Texture);
obj.GetComponent<Planet>().Name = Name;
return obj;
}
}
в редакторе вешаешь этот скрипт на пустой го, назначаешь ему префаб планеты и потом в любом месте
var planet = PlanetFactory.Instance.Create(PlanetTex, "Earth");
>Ньюфаг итт.
>Unity.
>Нужно хотя бы считать координаты нажатия мышки и переместить туда объект при помощи Vector3.
спасибо. воспользуюсь первым вариантом, мне он больше подходит в моей ситуации
потому что проще получить информацию от того, кто ей уже обладает, ежели рыться в куче информационного шума в виде ненужных мне сведений, сопряженных с сериализацией.
и чо для чего служит сериализация?
Форма представления состояния объектов.
Сериализованные объекты можно десериализовать и восстановить нужное тебе состояние.
Атрибт указывает, что объекты этот типа можно сериализовать (на самом деле атрибут еще к полям отдельным применять можно). В случае, если встроенные механизмы дотнета не могут справиться с сериализацией чего либо в твоем распоряжении имеются специальные методы, вроде OnSerialize/OnDeserialize, в которых ты можешь сам указать логику сериализации. А вот как это все делается - гугли.
в юнити довольно удобно писать свои окошки и собирать свои инструменты. удобней чем много где.
>>189929
в юнити цепочка наследования обьектов в сцене не начинается от геймобжекта, она обычно начинается от монобихейвора от которого наследуются компоненты и через который компоненты лезут в геймобжект.
вообще, можешь и делать сферу, а потом просто пэрентить её к тому геймобжекту на котором висит компонент создавший её. юнити хорошо понимает что надо делать с всей иерархией объектов.
лучшая опция разумеется сделать хероту которая собирает эти планеты по кускам.
А теперь гугл (даже по ссылкам никаким не надо переходить):
>Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.
И это по твоему хуже того несвязного бреда, который выдавил из себя тот анон?
>в юнити довольно удобно писать свои окошки...
как сделать listbox? сейчас усиленно гуглю, но нифига не получается
ну по идее, слева у тебя должен быть массив кнопок, и один общий для них метод клика.
в этом методе дергаешьанус айдишник, имя, или еще каие данные по элементу, чтобы идентифицировать, а уже из этих данных формируешь правое окошко
что-то получается. с подсветкой через фон замарачиватся не буду, там тексутры грузить нада и прочая лабуда
малорик) так держать
а вообще по gui были отличные гайды(сам посмотрел только 2 урока у них, и нашел что было нужно) у 3DBuzz(точно не помню, погугли)
листбокс, разумеется, сделать легко.
просто перебрать в лупе все редактируемые элементы.
private float ShowMyThing(MyThingType thing, float heightOffset){
if(GUI.Button)
//или изощрённей
Event e = Event.current;
if(e.isMouse && e.button == 0 && myCurrentRect.contains(e.mousePosition))
//в любом случае
MyThingType currentThing = thing;
//если хочешь человеческий перенос текста в кнопке надо знать высоту
return newHeight;
}
а про GUI.color ты и сам догадался.
но я дам совет.
сколько бы я не начинал писать похожую хуйню, я в итоге её убирал. проще на каждый элемент иметь отдельный файл, в список слева держать в папках юнити. юнити дает такую удобную хуйню как ScriptableObject, с которым можно обращаться как с префабом.
например вот пишу я паттерн поведения для ИИ. тоже как граф с всякими соединяемыми-разьединяемыми элементами в нем. писать каждый раз Хуйня.ЗагрузиМоюХуйню(string) как-то плохо. проще в инспекторе перетянуть нужный паттерн ИИ в нужное мне поле на нужного мне нпс. заодно и можно самому каждый элемент по папкам рассовывать с понятными названиями, чем писать список с фильтрами. хранить такую хуйню в одном файле не практично.
в крайнем случае если зудит, потом можно просто написать немного кода который бы все элементы такого типа из проекта собрал в кучу.
Когда нужно сравнить смещение позиции, мы проверяем два вектора (старое значение и текущие значение позиции):
Vector3.Distance(oldPosition, newPosition) >= 0.1f // значит было нужное нам смещение
А как сделать подобное сравнение для вращения? Есть два кватерниона, нужно посмотреть, было ли смещение. Пока вижу только один вариант - аналогично чекать дистанцию, но только для эйлеровых углов. Точность не 100%, но приемлемая, хотя фиг знает.
возможно ты хотел это? http://docs.unity3d.com/ScriptReference/Quaternion.Angle.html
но вообще куда лучше будет если ты просто расскажешь что же заставляет тебя писать такое.
на самом деле документировано то оно заебись, просто сразу куда надо не ведут.
вообще советую ещё почитать документацию к EditorUtility, FileUtil, AssetDatabase. там много клевой удобной хуйни написано. например вот это дает в мне шапку проекта закладку с кнопкой, которая спрашивает у меня куда сохранить новый скриптаблобжект и его имя. удобно охуеть.
алсо, забыл. советую не пропустить EditorUtility.SetDirty(Object); оно говорит что вот эту хуйню надо сохранить на диск. удобно совать куданибудь с if (GUI.changed)EditorUtility.SetDirty(this);
по сути простой класс, но его можно сохранять, редактировать и использовать как ассетс. при этом он не является геймобжектом или компонентом и соответвенно не имеет их "лишнего" обвеса. вон на том скрине например описание загружаемого модуля.
Зря я забил на юнити гуи, пришлось писать свой софт под аналогичную задачу лел, компилит эксмль а в юнити там уже часть декодера/парсера.
а не наркоман ли ты? у меня прямо перед глазами промчалось проёбаное время если бы я свернул не туда.
Для когото проебаное время а для кого самообразование.
Тема тупик. Нахуя такое говно на мобилках? А контроллить чем? Кивками?
Хуету придумал. Для рендера 2х картинок в высоком разрешении без хорошей видеокарты не обойтись.
Свистоперделками синезубыми управлять. Мотание головой нужно только для целостности восприятия (если конечно система будет обсчитывать положение головы)
Нихуя. Сейчас куча разработчиков делает под это дело игры на юнити как раз. Позавчера приобрел сей девайс- штука отличная. Но видать тут никто этим не занимался. Жаль.
Я имел в виду что игорь будет считать, а не телефон. А вот насчет честного гироскопа не в курсе, вроде ж почти везде акселерометр пихают?
Но я играю, что со мной не так? Это уже не совсем мобильный гейминг, а бюджетная виртуальная реальность. Как-то так.
Лол, у меня та же труба! На Али брал? Почем и какую версию?
И, да, действительно в нём гироскоп имеется, Sensors показывает.
Лол, забавно. Брал в дс неделю назад, в 12к обошелся.Всмысле какую версию? Она ж одна вроде?
На 4pda пишут про 4 разных прошивки, и две разных аппаратных версии. Если б ты брал на Али, вопрос действительно имел бы смысл. Мне он стоил 143 еврея, с чехлом и двумя пленками.
есть бодяжный инвентарь на гуи, в редакторе все работает как надо, а в билде какие-то проблемы с координатами курсора(на скринах: слева все норм, по мере удаления в правую сторону экрана возникает нихуевая погрешность между отображаемым курсором и реальным событием/не знаю как правильнее выразить, смотрите скрины/)
мы же понятия не имеем чё ты там написал!
при тех-же самых ситуациях при которых в норме просто вызывается ещё один тред. чтобы гуи не залипало после нажатия долгой кнопки, например. или когда таймер удобный нужен.
тред вызывается в юнити только если очень хочется.
если объект будет дестроен или выключен то все корутины на нем прекратятся, будет равносильно тому что ты сам выключишь все корутины в нем. на такой хуйне в юнити ещё трудно выстрелить себе в ногу.
так, стоп. я не допонял кажется.
ты в одном файле-скрипте запилил 2+ класса, и у тебя не работало или как?
>>190281
вроде встречал упоминание в доках, что многопоточность платная, а в персонал версии только короутины. сейчас не могу найти, небось привиделось
в принципе можно организовать через System.Threading (тасков и воопше нормальной паралельшины из c#4/5 не завезли) но работать с юнити апи может только главный тред...
2 дня мучений и таки нарисовалось
Trying to send command for object without authority.
Вроде как в версии 5.2 добавили возможность добавлять авторизацию к объектам, не являющимися игроком через assignClientAuthority. Попробовал я дать объекту на сцене авторизацию и получил ошибку
Local invoke: Failed to find message handler for message ID 15
Короче, залупа какая-то с этим Unet. Кто-нибудь это пробовал? Может я чего не так делаю?
Есть один UI и этот UI - uGUI, и он лагает аки сука. Проект светить не могу, ибо работаю днищедауном в одной сурьезной конторе.
Короче, можете накидать советов, что вы делаете, когда оптимизируйте гуй?
В юнити расстояние задается в сферических конях в вакууме [spiler]юнитах[/spoiler]. Если решишь твердо и четко, что 1 юнит = 1 метр, то так и будет.
Как в WebGL юзать PUT реквесты? UnityWebRequest, который экспериментальный, не пашет. HttpWebRequest, который из .net, не пашет ибо нет тредов. WWW не может в PUT/DELETE, только в POST/GET. Есть еще способы кроме JS-плагина?
использовать гравитацию и трение?
Перемещай не платформу, а задник.
Меня больше радует, что я не могу указать другую камеру в коде, только, сука, мэин. Ебал в сраку этот говнокодинг, но УЕ4 еще нет на однроеде... Нутыпонел.
>я не могу указать другую камеру в коде
>УЕ4 на однроеде
Когда умрут последние кармаки, игры будет делать этот биомусор. Будущего нет.
Камера это компонент, а как в юнити получить доступ к компоненту объекта? Придешь со школы - загугли, только домашку сначала сделай, долбоеб.
Хотел было помочь, но это уже слишком толсто.
Накатил и покаялся.
MathF.Abs(Vector2.Angle(first, second) - Vector2.Angle(first, point) - Vector2.Angle(point, second)) < fload.Epsilon;
если сумма углов от крайних векторов до вектора-точки равна углу между крайними векторами то точка находится между ними
Расставь теги на спрайтах, начнет летать
Самый простой вариант вызывать в объекте игрока метод:
Game.OnPlayerDied(who, killer)
А в объекте оружия метод:
Game.AddScore(1)
Можно ещё разместить event'ы внутри этих классов, но мне придётся постоянно подписываться/отписываться. Не очень удобно. Или сделать глобальный класс ивентов, но тогда этот способ ничем не лучше статического класса Game.
Делаешь объект - спаунер игроков. Он будет делать новых игроков и сразу же подписываться на их события.
В Юнити есть компонент AudioSource. Добавляешь его на объект и теперь он может проигрывать звуки. Но внутри AudioSource идёт обращение к синглтонам звуковой системы. Таким образом они скрыли обращение к синглтону в компоненте.
В моём случае можно создать компонент DeathObserver. В компоненте персонажа (или в компоненте Health, чтобы не плодить всё в одном классе) делаем следующее:
private DeathObserver deathObserver;
deathObserver = GetComponent<DeathObserver>();
deathObserver.OnDied(who, killer); // если получили урон и персонаж умер
Внутри DeathObserver обращаемся уже к monobehaviour синглтону, который играет роль Facade-паттерна.
кустом эдитор разве что нарисовать. но имхо оно того не стоит
Благодарствую. Добра тебе, няша!
7zip не открывает.
Что-то нахимичили в 5.2 с координатами, если раньше пиздецово большие флоаты просто вызывали погрешность, то теперь генерируются сотни ошибок в консоль. Нехорошо сделали. Может уже пора обновиться, хуй знает.
Что-то в духе
gameObject.GetComponent<TrailRender>().color[0] = someColor;
не удается провернуть? Ведь инспектор откуда-то знает, что у этого компонента есть коллекция color
При помощи рефлексии.
Гейдев, булка, просто сайты в интернете.
Чому не гуглишь?
http://forum.unity3d.com/threads/trail-renderer-colors-c.54162/
Тут аж два варианта. Но я хуй знает, рабочие ли, лол.
>>190575
Ненавижу ошибки по типу "ошибка. Нажмите ок чтобы продолжить". Было 25 объектов, сгенеренных одним скриптом, всё работало заебись. Потом пошли ошибки "инварид ААББ". Перегенерил 25 объектов, абсолютно идентичных первым. Ошибка ушла. Пиздос какой-то.
спасибо, анон. на утро прочитав свой вопрос я осознал каким глупым он был. и стыло стыдно прокрастинировать.
Это, если я не ошибаюсь, фишка VS Professional
http://www.youtube.com/channel/UC1JZpr9uaLW5GV1bsx8tVyw
фу
Ламповый чувак.
>божественная студия
Нерелейтед.
>Игры - свой движок
Студии используют "свои" движки по 10 лет просто по привычке, наработанным схемам и отсутствии проблем лицензий, отчислений, покупки, а не из-за непригодности движков того же юнити/уеч
для генерируемой карты:
рисовать с зумом
рисовать упрощенными примитивами
для статичной карты
рисовать заранее
ну карта предположим строится из блоков. вот делаешь для блока отдельный маленький монохромный спрайт и эти спрайты собираешь в миникарту
воопше вешаешь вторую камеру, цепляешь её к плееру. ставишь глубину 1 и рендер в текстуру. располагаешь соответвующе. что бы следила за игроком - вешаешь на игрока. текстуру через гуй вешаешь куда нужно. можно поставить фильтры например только терайн и иконки, навешать на обьекты иконки и отключить их на основной камере. будет вааще красота.
ну да, что-то подобное предлагается в туториалах по запросу unity minimap. вот только отрендеренный кусок уровня с высоты птичего полета мягко говоря плохо читается, а для карты ж это важно, думаю может какую сепию или эффект какой на камеру нацепить мошен блюр чтоб было посхематичней
>>190895
А, тоесть каждому блоку вручную рисовать спрайт для миникарты? геморно как-то
хотелось бы грубо говоря какой-то шейдер который бы делал из перенасыщенной деталями области уровня его схематичное представление по которому легко ориентироваться
ну и эстэтики хотелось бы, чего уж скрывать
Как пофиксить?
Потму что матлерп это всего лишь линейная интерполяция. Ничего больше.
Но юнитидети конечно используют кривой костыль-трюкачество, что они одну из точек дергают по направлению движения. Потому что им лень писать нормальный код и хочестся внутри апдейта одной строчкой ШОБ ВСЕ РАБОТАЛО ВОН У ВАСЯНА МАТЛЕРП ДВИГАЕТ ВСЕ.
Лол, каждый новый шаг двигать точки и интерполивоать заново, это что угодно но только не равноускоренное движение лол. Подумай как это работает по шагам - поймешь.
Я по началу вообще не понимал как юнитидети матлерпом что-то двигают в апдейте нигде не сохраняя промежуточные результаты. Потом понял и проиграл с юнитишкольников.
Короче если хочешь нормальное блядь движение, то блядь все по канону.
Есть точка А и точка Б. Не трогай их сука, ридонли их сделай или еще как. У тебя есть интерполяция от 0 до 1. Вот ее сохрани и ее изменяй каждый шаг, не забваю умножить на дельта тайм. Это будет нормальное равноускоренное движение. Но юнитишкольникам лень, они каждый шаг двигают точку А к точке Б лол, ясен хуй предмет вообще никогда не достигнет точки Б. Не устаю проигрывать с обезьян с шикарной гоночной машиной.
Благодарствую за разжеванное, но я не трогаю точеньки, я плавно и приятно меняю параметр аниматора, или параметры персонажа (хп и т.д.), и дельта тайм там не очень смотрится.
Правильно ли я понял, что в подобном случае мне придется писать свой костыль, через var=var+0.1 и Clamp, или есть адекватные решения?
>почему Mathf.Lerp работает "не линейно"?
Потому что ты долбоёб, который не знает, как работает Mathf.Lerp.
хм. всегда делал так
float move = speed delta;
Vector3 diff = dest - pos;
if(move move < diff.sqrMagnitude())
{ pos = dest; end_movement() return;}
pos += diff.normalized * move;
Ок, гуру, посвятите же меня, как мне равномерно (РАВНОМЕРНО, БЛЯТЬ!) сменить значение переменной от "А" до "Б" с определенным шагом от 0 до 1, где 0 это "А", а 1 это "Б", а 0.5 это среднее между "А" и "Б"?
Не понял, при чем тут вообще расстояние?
float Par = Mathf.Lerp(Par, MaxVolume, Speed);
где MaxVolume 0 или 1, а Speed значение от 0.01 до 0.5
Что тут не так? Чому я неможить у плауность?
вон тебе линканули статью. все расписано. лерп используется для нахождения точки между двумя точками. т.е. у тебя известна начальная и конечная точка, и параметр меняется от 0 до 1 тогда движение будет плавным. у тебя же начальная точка каждый раз меняется, в результате никакой линейной интерполяции и равномерного движения.
Ctrl+Shift+M - нечто похожее, только ещё круче.
CTRL+ALT+M -> CTRL+H - открывает документацию. Например, ставишь курсор на класс Camera, нажимаешь данную комбинацию и открывается документация с описанием камеры.
>Оригинально, спасибо!
Я просто переписал твою же запись в другом виде, надеясь при этом, что до тебя дойдет в чем ошибка.
>Чому не гуглишь?
http://forum.unity3d.com/threads/trail-renderer-colors-c.54162/
Тут аж два варианта. Но я хуй знает, рабочие ли, лол.
может и рабочий, вот только не могу создать объект типа SerializedObject, в unityDocs о нём ничо нет. что это такое?
namespace UnityEditor
{
//
// Сводка:
// ///
// SerializedObject and [[SerializedProperty]] are classes for editing properties
// on objects in a completely generic way that automatically handles undo and styling
// UI for prefabs.
// ///
public sealed class SerializedObject
Первая же ссылка в гугле на unityDocs. Ты правда такой тупой или притворяешься?
вай вай спасибо. работает
Да.
внезапно вызовы отрисовки. т.е. конкретная команда видеокарте нарисовать что-то. при чем из-за особенностей устройства видеокарт сейчас гораздо быстрее отрисовать один сложный обьект с тяжелым шейдером одним драуколом чем разбить его на мелкие с простыми. ибо 100500 паралельных конвееров, которые могут выполнять одинаковые команды. поэтому современные движки активно юзают батчинг - объединение одинковых вызовов в один
Если на персонаже есть коллайдер с ригидбоди то он может получать и сообщения с триггеров, и от столкновений с другими коллайдерами, чего тебе еще надо?
Мне надо чтобы коллайдер мог проходить через определенный другой коллайдер. Если выключить это в слоях, то не будет события, а мне надо знать когда такие коллайдеры проходят сквозь друг друга
Это постпроцессинг, т.е. шейдеры уже на готовую картинку. Без изъебств делаются только в платной версии.
При добавлении объекта прифаба к его имени приписывается номер, как избавиться от этого?
К клонам прифаба приписывается номер, как избавиться от этого? ( чтобы без номера создавались)
К клонам прифаба приписывается номер, как избавиться от этого? ( чтобы без номера создавались)
https://www.assetstore.unity3d.com/en/#!/content/14147
>>191106
Но ведь free/pro ушло в прошлое. Теперь есть только 1 версия юнити, без ограничений, просто лицензии разные теперь: personal/pro. А ограничений как раньше что renderTaget нельзя делать вроде ж сняты. Не?
>>191103
это понятно но я не хочу остатся такимже тупым как вы до конца своих дней. Я конечно могу искать скрипты в вебе и юзать стандатные решения, но так в один момент мне прийдется воткнуть в юнити фичу скрипта для которой я не нашел и жиденько обосратся. Потому я обьязан научится писать скрипты.
тогда возьми скрипты из нескольких фпс контролеров, включи мозг, сравни, найди общие детали, подумай почему так.
но я слишком туп.
тут главная проблема и кроется:
маленький мозг + огромные амбиции + божественный член = хуйовая комбинация.
блядь, я хуею с шкальника-нытика
коооококко-бидный-я-ни-магу-осилить-котроллар-ай-ай-ай
ебать дебил
может ты еще отркоешь книгу по квантмеху и начнешь ныть что с ходу не можешь его осилить
сраный кретин, физика, математика, программирование, химия да блядь даже ТУРНИЧКИ, все это работает по одинаковому принципу: ОТ ПРОСТОГО К СЛОЖНОМУ дегенерат ебаный
куда ты лезешь сука, ну куда, блядь контроллер FPS это достаточно нетривиальная задача и НИКАК не может быть твоей первой программой
сука, да ты небось хелло-ворд написать поленился а сразу пошел кодить нейросети на хачкеле, я хуею
а ведь ты прав, ты реально дегенерат, сука, это все равно что записаться в качалку и просто с ходу подойти к самой тяжелой штанге, с ходу сказать местному качку чтоб блядь немелденно подвинул жопой, тот ахуеет но вместо агресси покорно уступит, и тут ты бядь беерешь эту штангу и твои кишки выходят у тебя из ануса, весь зал в ахуе, а ты пыжишься с 12-перстной из жопы и кричишь ААА Я СЛАБАК ХУЛЕ НЕ ПОЛУЧИЛОСЬ ТО БЛЯ ВСЯ МАЯ ПРАБЛЕМА АМБИЦИИ АААААА ПРЯМАЯ ВЫЛАЗИТ ОЙ АППЕНДИКС ВЫДРИСТАНУЛ
сука, блядь, новичек идет в парашный угол и тихо качает блядь палку без весов, и все равно у него болят мышцы на след день+
тут тозех самое, блядь, ты не тупее средней пиродрашки, вон даже кампутером пользоваться осили, в наш /гд/ вв тред юнитигоспод геймдева пришел и что же ты делаешь? да ровно то что сделал дрищ из моего примера, сразу пытаешься написать достаточно сложный код
ты знаешь про постфиксные инфекстный инкремент? наследование не вызывает у тебя непонимания? перегружать операторы умеешь? да ладно че уж там, ты хоть не знаю, хэшмэпом или хотяб списком пользоваться вообще умеешь, цикл написть хоть в состоянии? 2д-массив или еще что базовое?
> блядь, я хуею с шкальника-нытика
мне 23 что самое страшное...
> ебать дебил
сам с себя в шоке
> может ты еще отркоешь книгу по квантмеху и начнешь ныть что с ходу не можешь его осилить
да там то и сложного нихуя нет, вырываешь лисьочек, подтираешься.
> сраный кретин, физика, математика, программирование, химия да блядь даже ТУРНИЧКИ, все это работает по одинаковому принципу: ОТ ПРОСТОГО К СЛОЖНОМУ дегенерат ебаный
> куда ты лезешь сука, ну куда, блядь контроллер FPS это достаточно нетривиальная задача и НИКАК не может быть твоей первой программой
но я уже год пытаюсь выучит йобаный c#
> сука, да ты небось хелло-ворд написать поленился
вот дто я написал! а ещё раветвленный диалог с пекой. в конце которого пк шлет юзера нахуй.
>а ведь ты прав, ты реально дегенерат
я всегда прав,
>сука, это все равно что записаться в качалку и просто с ходу подойти к самой тяжелой штанге, с ходу сказать местному качку чтоб блядь немелденно подвинул жопой,
вот после дтой фразы у меня и начались проблемы с интелектом.
> сука, блядь, новичек идет в парашный угол и тихо качает блядь палку без весов, и все равно у него болят мышцы на след день+
нет меня только лицо после этого болело.
> тут тозех самое, блядь, ты не тупее средней пиродрашки,
быть не тупее умственно отсталого хуйовое достежение
>вон даже кампутером пользоваться осили, в наш /гд/ вв тред юнитигоспод геймдева пришел и что же ты делаешь? да ровно то что сделал дрищ из моего примера, сразу пытаешься написать достаточно сложный код
> ты знаешь про постфиксные инфекстный инкремент?
неа
>наследование не вызывает у тебя непонимания?
да ну всё вроди понятно, не сложнее чем в хтмл но я ничего сложного не делел,
>перегружать операторы умеешь?
нет
>да ладно че уж там, ты хоть не знаю, хэшмэпом или хотяб списком пользоваться вообще умеешь
я не знаю что такое хещмеп,
>цикл написть хоть в состоянии?
ага, даже ту хуйню с рекурсией сделал,
>2д-массив или еще что базовое?
не уверен...
> блядь, я хуею с шкальника-нытика
мне 23 что самое страшное...
> ебать дебил
сам с себя в шоке
> может ты еще отркоешь книгу по квантмеху и начнешь ныть что с ходу не можешь его осилить
да там то и сложного нихуя нет, вырываешь лисьочек, подтираешься.
> сраный кретин, физика, математика, программирование, химия да блядь даже ТУРНИЧКИ, все это работает по одинаковому принципу: ОТ ПРОСТОГО К СЛОЖНОМУ дегенерат ебаный
> куда ты лезешь сука, ну куда, блядь контроллер FPS это достаточно нетривиальная задача и НИКАК не может быть твоей первой программой
но я уже год пытаюсь выучит йобаный c#
> сука, да ты небось хелло-ворд написать поленился
вот дто я написал! а ещё раветвленный диалог с пекой. в конце которого пк шлет юзера нахуй.
>а ведь ты прав, ты реально дегенерат
я всегда прав,
>сука, это все равно что записаться в качалку и просто с ходу подойти к самой тяжелой штанге, с ходу сказать местному качку чтоб блядь немелденно подвинул жопой,
вот после дтой фразы у меня и начались проблемы с интелектом.
> сука, блядь, новичек идет в парашный угол и тихо качает блядь палку без весов, и все равно у него болят мышцы на след день+
нет меня только лицо после этого болело.
> тут тозех самое, блядь, ты не тупее средней пиродрашки,
быть не тупее умственно отсталого хуйовое достежение
>вон даже кампутером пользоваться осили, в наш /гд/ вв тред юнитигоспод геймдева пришел и что же ты делаешь? да ровно то что сделал дрищ из моего примера, сразу пытаешься написать достаточно сложный код
> ты знаешь про постфиксные инфекстный инкремент?
неа
>наследование не вызывает у тебя непонимания?
да ну всё вроди понятно, не сложнее чем в хтмл но я ничего сложного не делел,
>перегружать операторы умеешь?
нет
>да ладно че уж там, ты хоть не знаю, хэшмэпом или хотяб списком пользоваться вообще умеешь
я не знаю что такое хещмеп,
>цикл написть хоть в состоянии?
ага, даже ту хуйню с рекурсией сделал,
>2д-массив или еще что базовое?
не уверен...
>я не знаю что такое хещмеп,
>не уверен...
короче никто не говорит что для того чтоб писатъ говноскрипты для юнит надо быть таким уж гуру программироавния, но хотя бы сраный хэшмеп (он же Dictionary) и сраный 2д массив уж осилить мог бы. Ну так неудивительно что ты не в состоянии написать ФПС.
Давай начнем с простого, ты в состоянии написать змейку, а лалка? что-то мне подсказывает что нет.
>но я уже год пытаюсь выучит йобаный c#
Хуёво пытаешься, видимо. Года более чем достаточно для того, чтобы освоить C#.
Хороший совет.
Я програмировать совершенно не умею. На неделе сел в Юнити, начал читать документацию.
Делаю что то вроде Space Invaders.
Корабль космический летает, управляется, стреляет, врагов за 3 выстрела поражает. Все норм идет, интересно, вроде развиваюсь. Хочу хоть чему то научиться, чтоб не только художником быть, а сам уметь говноигры делать с начала до конца.
поговорить мало с кем будет, ну или готовься воспринимать код, написанный на С#
А функционально есть большая разница? Почему вариант с Си так популярен?
на сколько я слышал, у юньки джиэс не совсем джиэс, а что-то сильно переделанное под юньку, толку учить то что нигде за границами юньки не работает.
Если будешь делать что-то сложнее сношающихся кубов то даже не думай о js.
Толстишь ведь.
Потому что js - редкостная параша
У меня порядка 30 моделей. Игрок может выбрать любую из этих моделей. Но где их лучше хранить? Пока я хочу сделать так:
- создаём префаб
- создаём специальный скрипт, который будет содержать список всех моделей, после добавляем метод, который будет выдавать нужную модель по имени
- кидаем скрипт на префаб, задаём модели
- сохраняем ссылку на префаб в скрипте игрока
ложишь все модели в ресурсы в отдельную папочку. когда нужно выбрать - дергаешь их через Resources.LoadAll. лишние прибиваешь.
Хм, да, так будет гораздо лучше, чем если я буду вручную добавлять каждую модельку. Спасибо.
- что лучше выбрать стандартный аниматор в юнити, спайн или конвертировать из флеша (в основном делаю во флеше, но с конвертацией получается проблемно).
- что будет более удобно для смены скинов (оставить логику костей, а менять спрайты на более лучшие)?
https://www.assetstore.unity3d.com/en/#!/content/15277
https://www.assetstore.unity3d.com/en/#!/content/6182
https://www.assetstore.unity3d.com/en/#!/content/28980
https://www.assetstore.unity3d.com/en/#!/content/16853
Только они там пиздец тухлые. Мимопроходил.
//это чевидно переменные
public Vector3 target;
private Ray ray;
private RaycastHit hit;
void Update()
{
//тут переменной рей прописали какие-то матерные слова
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//чё блять за псих.радужный кастер?
if (Physics.Raycast(ray, out hit, 100.0f))//чё блять зза букафы?
{
target = hit.point;
}
Vector3 dir = target - transform.position;
dir = new Vector3(dir.x, dir.y, 0);
if (dir != Vector3.zero) transform.forward = dir;
}
чё блядь вообще за хуйня тут происходит?
Очевидное верчение объекта по направлению соприкосновения мышиного курсора с ним.
Текстурку пола сделай как нибудь в стиле твоего спрайта потом. Что за игра то будет?
не тут суть вся в этом, пикселявые чувачки ожили и пытаются выжить в их фентези мире, вот только весь их фентези мир это квартира художника:
1)ворсистый ковер- джунгли, диван - горы, морозилка-ледяная пещера
рпг будет
1. используя камеру переводим координаты в луч, направленный в туда куда указывает мышь
2. проследили луч, до тех пор пока он куда-то не уткнется. если уткнулся - запоминаем куда
3. поворачиваем модельку в сторону мыши тут какая-та странная хуета, ибо для определения направления поворота используется точка пересечения луча с объектом. нахуя если у нас уже есть луч? что будет если мы уведем мышу в небо где сталкиваться не с чем?
2 варианта
1)это ротатор для игры с видом сверху, так что в небо всеравно не посмотришь.
2)энжой ту невидимые стенки
Задача:плавный переход от рэгдолла в произвольной позе до персонажа с анимацией.
https://www.youtube.com/watch?v=pk0nVmWTwuM
В аннотации к видео ссылка на блог с описанием и проектом.
Насколько я понял, в проекте он плавно лерпит текущую позицию всех костей до позиции анимации, а потом включает аниматор.
>>191555
Помогает, если делать Lerp позиций всех костей, но это довольно затратно, хотелось бы найти альтернативу.
Где-то промелькивала информация о встроенном блендинге от рагдолла до анимации в будущих версиях...
Пилю сетевой экшен и сейчас ломаю голову над тем, как отображать оружие. Когда игрок управляет персонажем, то у него вид от первого лица, другие же игроки видят его от третьего лица. И я вот думаю, как это всё организовать.
Вот что надумал на данный момент:
- Класс Weapon будет отвечать за логику оружия, будет хранить параметры (кол-во патронов в обойме, скорость стрельбы и тому подобное), будет заниматься перезарядкой и стрельбой. Это не графическое представление оружия.
- Класс WeaponInHand будет хранить ссылку на эффект стрельбы (партиклы) и на звук стрельбы. Внутри будет всего один метод Fire, который будет проигрывать звук и проигрывать эффект. Это графическое представление оружия. Оно будет цепляться на GameObject-контейнер. Внутри контейнера будет префаб модели оружия и префаб эффекта стрельбы, который размещён возле дула.
На один тип оружия будет приходится три префаба. Первый будет описывать параметры оружия, второй префаб будет представлять оружие в виде от первого лица, третий префаб будет представлять оружие в виде от третьего лица.
- Класс PlayerController будет управлять персонажем. Он будет цепляться на самый верхний GameObject персонажа. И будет хранить ссылки на два нижних класса. Ещё он будет хранить ссылки на Weapon объекты. В зависимости от того, кому принадлежит данный игрок, он будет активировать либо вид от первого лица, либо вид от третьего. Причём, это может происходить в режиме просмотра, когда игрок мёртв и хочет посмотреть от лица другого игрока за игрой.
- Класс FirstPersonPlayer будет цепляться на нижний объект, который представляет игрока от первого лица. Внутри будет список всего оружия с видом от первого лица. Если был выстрел, то PlayerController вызывает метод Fire у FirstPersonPlayer, а тот вызывает метод Fire уже у WeaponInHand, который сейчас в руке у персонажа.
- Класс ThirdPersonPlayer будет цепляться на нижний объект, который представляет игрока от третьего лица. Аналогично.
я на самом деле нашел отличие что его проще портировать. те он создает сразу префаб с аниматором. в спайне анальные перекидывания с переменой имен. ффд, в той версии которую я скачал, там нет. только что стоит она 1к, а не 90$ как спайн
а можно создать одну скелетную анимацию в Spriter и использовать её с разными спрайтами в Unity?
Поцоны, вот есть у меня интерфейс, который при активации запускает связанный с ним объект такого же типа, если он есть. Т.е. например у меня есть реализация интерфейса в классе fuse, который с задержкой активирует класс explosive с реализацией этого же интерфейса.
Так вот, при создании объекта руками все работает как надо, а если создать его копию, то связанный объект не активируется. Какого хуя?
Все починил. Подписка на метод осуществлялась в Start() и в копии иерархия просто не успевала связываться.
При значении переменной true, он двигает некий rigidbody с коллайдером.
Как сделать так, чтобы при касании коллайдером, двигаемым аниматором, другого коллайдера анимация прекращалась?
Основная проблема: за время, которое требуется для того, чтобы переменная аниматора при OnCollisionEnter(), стала false, проходит еще один-два анимируемых кадра, коллайдер успевает пройти сквозь другого, и они дико, тащемта, отталкиваются друг от друга, например.
Это не смешно, блядь. Один террейн 500х500 без карты высот печётся 4 минуты. С картой высот 32 минуты. Террейн 1000х1000 без карты высот печётся 6 минут, с картой высот будет полный пиздос. А если хочется 2-3 террейна по 2к? Хуйня какая-то, очевидный же баг какой-то.
Больше данных, больше контента, больше людей, больше всего. Будешь заказывать что либо на стороне - говоришь чтобы сделали под Юнити и не окажется что например модельки выглядят по разному у тебя и у авторов. Юнити решает ПРОБЛЕМЫ.
Поищи на ютубе канал Matt Chat, Там куча интервью. Таким образом ты узнаешь например что фоллач 3 в своё время не запилили только потому что не осилили сделать ДВИЖОК.
Четыре ядра проц и 8 гиг ddr3. Что-то мне кажется, что это больше, чем у среднестатистического обитателя раздела. Обновить не мешало бы, но прост производительности будет даже не вдвое, а процентов, от силы, 20. Пусть четверть. Вместо 30 минут на пустой террейн - 20+. Это всё ещё слишком дохуя.
Вот это манямир.
Суть: есть квадратики, нужно чтобы они самостоятельно собирались в цепочки. Чтобы к ним с одного конца подплывали кружочки и двигались по этой цепочке. А потом чтобы получались другие цепочки и двигались одним из концов в определённую сторону, но при этом точно так же состояли из квадратиков.
Впорос: какие туторы по сишарпу мне читать, чтобы было охуенно?
В управление главным героем мне вообще не надо уметь, важно научиться делать ИИ и поведения. Всё в моём проэкте высере должно случаться само.
Интересно, объясни, пожалуйста.
С точки зрения логики все понятно - рейкаст в направлении движения, чем выше скорость движения, тем длиннее рейкаст и все такое.
Что же делать с коллайдерами большого размера, натыкающиеся на коллайдеры малого - рейкаст не "нащупает" преграду.
Пример:бревно поворачивается вокруг своей оси, должно наткнуться на 3-4 рандомных камня по пути. Причем, если ближе к ентру оси все ок, то на концах бревна триггер успевает не только пройти далеко насквозь 2-3 камней, но и пройти сквозь некоторые, без детекта. Как остановить такое бревно, двигающееся анимацией?
>
Вот такая ситуация?
Если речь о 3д, то чем то конкретным я помочь не смогу, сам ковыряю 2д часть, и то с переменным успехом.
Не совсем...
Представь себе часы. Стрелка быстро крутится аниматором, на пути разбросаны камни. К сожалению, в 3д.
Норм, когда коснувшись триггера\коллайдера, стрелка сразу остановится.
Не норм, когда она проходит дальше немного.
Ваще жесть, когда из-за длинны перемещения на конце стрелки, оно тупо проходит сквозь триггер малого размера.
Не двигай физ. объекты аниматором, очевидно же. Как тебе вообще такая идея в голову пришла.
мне бы такой комп, хуярю на дрпотопной хуйне, чуствую себя доктором думом в альтимейт фантастик фор, хуярящим из говна и палок безумно сложных роботов,
Согласен, очевидно. Но это был пример.
У меня чуть более громоздкая задача, не решаемая физикой, пока джойнты в Юньке такие всратые.
бемп
А в чем, собственно, проблема? Допустим у меня флаг на флагшток поднимается
m_WalkForce += (m_TargetPosition - currPosition).normalized * walkForce;
Я так понимаю что когда расстояние между текущим положением и целью маленькое, normalized возвращает маленькое значение, хотя написано что он всегда возвращает одно и то же значение
А что ты пытаешься сделать, болезненный? normalized всегда возвращает единичный вектор (за объяснениями что такое единичный вектор в гугл). Если твой WalkForce становится меньше, то очевидно, что позиция цели где-то слева/вверху от текущей.
Наоборот, добавили единый Cloth. Убрали Interactive Cloth
Я хочу получить вектор направления движения имея конечную цель и текущее положение. Если я пишу (m_TargetPosition - currPosition).normalized то этот вектор совсем не единичный, а уменьшается в зависимости от расстояния до цели
или ты не понимаешь что такое единичный вектор или уменьшение происходит не из за normalized, а, например, из за какого-то walkForce из предыдущего поста.
Все я понимаю. Я уже исправил сам, кстати. Все дело в том, что у меня 2д, а я использовал Vector3, видимо из-за этого и была ошибка.
то есть короче из-за разницы в z-координате при приближении вектор вращался, из-за этого распидорашивало координаты
И подскажите пожалуйста как определять площадь "острова" цыфр похитрей?
Запили карту островов. Такой же массив интов, создается на основе прохода этого массива. Там одинаковую цифру будут иметь пиксели одного острова.
По этой карте уже и площадь проще читать будет и искать "одиночек".
Я когда-то давно пилил аналог "BubbleBraker", подобным образом считал группы шариков.
Выглядеть должно примерно так: pastebin.ru/f7KlTVSp
Проснусь - отвечу на доп. вопросы
1 - просто проверь всех соседей, тут тупой перебор идеален.
2 - "заливкой". заводишь исчо одну временную карту впрочем её можно использовать далее для других целей находишь первый элемент не являющийся "морем" и от него рекурентно проверяешь соседей
http://pastebin.com/5EgRh9QB
на выходе получаем словарь со списком островом, координатами первой клетки и площадью. "временный" массив содержит острова по номерам
Небось проблема в отсутствии обратных транзитов от джампа, если так то вообще за секунд 5.
>>192035
Да, я думал и так. У меня примерно так определяется наложение одного уровня на другой, только там учитываются все 4 стороны. Для 2д заливка была быстрей.
>>192041
Да, простой перебор оказался идеален для того чтобы найти "выпирающие" места.
>>192042
Идея с клеточным автоматом оказалась полезна для островов находящихся внутри других островов. Поразмыслив подумал что области я удалять на самом деле не могу (вдруг там с потолка сосулька свисает), лучшее решение похоже просто сделать их больше и делать это в течении нескольких генераций.
>>192043
Так ли это важно?
Или уже всё по другому делается? Всё-таки 2013 год.
Скомпилировать на хакинтоше можно, а залить в Аппстор уже нет. Сам хакинтоше это тот ещё геморрой. Проще купить самый дешевый мак мини.
Алсо, подскажите как с ебучими артефактами на тенях справиться. Запечь не могу, меш разрубить тоже.
Господи, какая же срань. Эти перегородки, эта камера постоянно крутящаяся туда-сюда. Кто в такое играть будет?
Насчёт аппстора инфа 100? Вот здесь пишут, что всё работает:
https://www.reddit.com/r/hackintosh/comments/308hr4/iosos_x_app_development_on_hackintosh/
Алсо, думаю, если возникнут проблемы, можно собрать на винде, а залить через macincloud - удалённый Mac за доллар в час.
Может действительно поворот камеры убрать? Плюс комнаты посвободнее, а то добавишь пару тумб, ящиков и уже нет поля для маневров персонажу
Блядь, ну и как такое дебажить?
Нонимус, помоги пожауйлста.
Есть главная камера с внедренным эффектом Vignetting and Abberation (пик1).
Пытаюсь обратиться к переменной этого класса (проверил, она есть) в своем классе менеджере (пик2).
Выдает такую ошибку
-Assets/scripts/SecondScript.cs(20,36): error CS0246: The type or namespace name `VignetteAndChromaticAberration' could not be found. Are you missing a using directive or an assembly reference?
Вот, если не ошибась название нужно брать с название класса при обращении
BUMP
Чёрт знает на самом деле. Слышал что или нельзя, или крайне гемморойно. Я не люблю гемморой и потому хакинтош не тестировал, просто купил реальное устройство.
Я вас не понимаю, имя класса указываю полностью, или вы имеете ввиду, что нужно путь до скрипта указывать или что? ПОтому как в видео примерах ничего подобного не было. Можете заскриншотить?
ну кстати в хороших видосиках что я видел так прямо и говорят "мы тут юнити показываем а не шарп, его вы должны сами знать"
>>192259
Спасибо, разобрался, в итоге получилось нечто (пик1)
>>192280
Я не силен в английском, да и в видео туториалов на оф сайте гребут лопатой объем инфы.
Вот теперь сижу и думаю, блин если тут так много кода, также, зачем я перехожу на юнити с Haxe (haxeflixel) опционал. Ребят помогите уже определиться пожалуйста!
Нужно сделать кликабельный грид.
Есть префаб тайла, есть объект со скриптом гей-менеджером, который в том числе генерит грид инстанцируя тайлы.
Реализую в скрипте тайла интерфейс IPointerClickHandler, Добавляю префабу коллайдер. Пихаю в сцену EventSystem, запускаю - клики не обрабатываются.
ЧЯДНТ?
GameObject instanciruemiiObject = Instancirovat';
instanciruemiiObject.transform.parent = nuzhniiObject.transform;
Нежно целую ваш благочестивый анус в знак моей бескрайней благодарности.
Ебнутый. Просто в начале напиши using UnityStandartAssets.ImageEffects;
а физикс рейкастер на сцену добавил? евентсистем использует все доступные рейкастеры, но не добавляет их.
канвас идет с график рейкастером, которые проверяет только элементы гуя. для 3д колайдеров нужен физиксрейкастер, для
а без кода в программировании никак, странно да?
конкретно этот вопрос был по базовым знаниям C#. тут простые советы типа >>192300 будут только мешать, ибо не дадут тебе знания синтаксиса шарпа, потому тебе и говорили - смотри мсдн, это майкрософтовский ресурс по разработке по. он давно русифицирован, раздел по с# - хорошо русифицирован, кучи примеров и все такое. от тебя не требуется глубокое знание - CLI, стандартная библиотека и прочее, но хотя бы синтаксис ты должен знать хорошо
в тот, от трансформа которого будет считаться рейкаст. т.е. обычно это главная камера. собственно физикрейкаст сам повесит камеру.
Кто во что собирает кстати? Попробовал впервые забилдить на хтмл5 и это занимает около 3-5 минут, что за дела? Тот же хакс готовый проект выдает за пару секунд. Или я чего то не знаю? Дольше вссего занимает стадия с JS
Спасибо, разобрался - запилил.
Теперь новый трабл. Не соображу как сделать Drag&Drop камеры во время игры.
Я на OnPointerDown включаю режим перемещения камеры и сейвлю позиции камеры и мыши. OnPointerUp выключаю режим редактирования.
В общем проще так: http://pastebin.ru/WdtnN4Vw
Но проблема в том, что IPointerXXX срабатывает только если рейкаст пробивает нужный коллайдер, а т.к. скрипт вешается на камеру - нихуя не срабатывает. Можно ли как-то отловить глобальное событие нажатия поинтера? Или я опять изобретаю велосипед?
Есть raycast, есть spherecast, а можно ли как-нибудь проверить, есть ли коллайдер в плоском треугольнике\прямоугольнике? Эдакий polygoncast или planecast?
Как соотнести реальные координаты в игре с координатами в области камеры? Никак не пойму.
Где есть реальные координаты, а где координаты в области камеры?
Какая разница, мне в любом случае нужны глобальные события.
Только господа не учитывают, что SphereCast выдает результат сразу, а их костыль вероятнее всего на следующий фрейм.
Vector3 posCoord = Input.mousePosition;
\t\t\tposCoord.z = 10.0f;
\t\t\tDebug.Log(posCoord);
\t\t\tDebug.Log(Input.mousePosition);
\t\t\tposCoord = Camera.main.ScreenToViewportPoint(posCoord);
\t\t\tsomeList.Add ((GameObject)Instantiate (defaultBox, posCoord, Quaternion.identity));
Объект спавнится ближе к цетру экрана, т.к. координаты ковертируются в диапазоне от 0 до 1
\t\tVector3 posit = cam.ScreenToWorldPoint (Input.mousePosition);
\t\tVector3 newPosit = new Vector3 (posit.x, 0.0f, 0.0f);
\t\tgameObject.transform.position.x = newPosit.x;
\t}
Ругается Assets/Scripts/HatController.cs(18,38): error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.position'. Consider storing the value in a temporary variable
Блять не пойму почему не ест
потому что Vector3 структура, а position - параметр а не поле. в результате ты не можешь изменить значение полей структуры, так как геттер возврашает её временную копию. нужно что-то вроде
var temp = gameObject.transform.position;
temp.x = newPos.x;
gameObject.transform.position = temp;
Благодарю, однако не разобрался таки до конца, как я понял нельзя присваивать значение напрямую к параметрам объекта. В итоге реализовал так -
\tVector3 temp = cam.ScreenToWorldPoint (Input.mousePosition);
\t\tVector3 temp2 = gameObject.transform.position;
\t\ttemp2.x = temp.x;
\t\tgameObject.transform.position = temp2;
Невероятно костыльно, странно, что этот момент они не облегчили.
можно если бы Vector3 был бы классом или позиция была бы полем. но оно параметр а значит при попытки получить позицию вызывается скрытый метод Vector3 _get_position(); в результате ты получаешь копию позиции, которая нигде не сохраняется. теоретически можно разрешить изменение это переменной, но эти изменения тупо потеряются ибо обратного присваивания нет. с классом прокатило бы, потому что они передаются по ссылке. опять же теоретически в CLI есть возможность вернуть структуру по ссылке, которая используется например в генериках, потому работает a.x = 3; но в открытом виде в C# она не реализована
Внезапно на пустом месте кнопка перестала быть кликабельной. То есть не выделяется и не прожимается. какие могут быть причины7
Спасибо анончик, только хотел отписаться, что решил проблему. Да куда то проебался EventSystem, который необходим для работы канваса.
добра
Чувствую что некоторые вещи работают не так, как на студийном компиляторе, хотелось бы знать какие именно и как они теперь работают.
юнити использует моно древней версии.
соответственно ограничения 2
1. старая версия языка - C#3 + пара фич из C#4
2. порезанную стандартную библиотеку времен .NET3.5.
второе благополучно проглатывается студией благодобря настройкам нет профиля и собственно связанные с этим ошибки(попытка использования классов более поздних версий дотнета) вылезет исчо при написании - студия скажет "я нихуя не знаю что такое GetCustomAttribute<T>(), иди на хуй", и вместо
attr = GetCustomAttribute<T>(); if (attr != null) {...}
приходится юзать монструозное var a = GetCustomAttributes(typeof(T));
if(a.Length > 0)
{ var attr = (T)a[0]; ...}
что в том же линкью выглядит исчо более монструозно
первое - проблема, так как студия часто предлагает автозамены исходя из существующей версии языка(C#6), что юнити проглотить не сможет.
фактически открываешь википедию "версии C#" и вычеркиваешь все начиная с C#4.0
от четверки поддерживаются только параметры по умолчанию и именованные параметры.
ах да. так как это все таки моно, широкий выбор дополнительных библиотек или не получится использовать или придется обмазывать костылями и пересобирать под моно(если доступны исходники). тот же json.net, бесплатный для дотнета в юнити стоит ужо денег.
Чем обусловлена такая низкая производительность при компиляции в html5? Чем вообще зарабатывать в веб, если плеер прикрыли , а второе работает как гавно?
Debug.Log(go);
Получаем нул. Охуенчик. А получаем нул потому, что это ёбаный спрайт, а инстансим префаб (геймобъект). А если инстансить сразу спрайт - сюрприиииз - ошибок нет, но зато и в сцене нихуя не появляется. Но! Если при этом пихать каждый инстансируемый спрайт в массив, то в массиве будут ссылки на спрайты, которых в сцене не видно.
наркоман чтоле сука? схуяли ты кастишь геймобжект в текстуру(спрайт)? бери у него спрайтрендерер и делай чо хошь
var sprite_go = Instantiate(goObject, Vector3.zero, Quaternion.Euler(Vector3.zero)).GetComponent<SpriteRenderer>();
Первый раз в 2д полез прост, а по-другому нихуя не работает.
Type `UnityEngine.Object' does not contain a definition for `GetComponent' and no extension method `GetComponent' of type `UnityEngine.Object'
goObject это геймобъект.
ага. кастуй его к GameObject и делай GetComponent
странно, вроде прокатывало без каста, но в доках написано что возвращает UnityEngine.Object, может я уже на автомате кастую? доберусь до компа проверю
ога. значится фича в том что обжект можно скастовать в компонент типа
var sprite = Instantiate(blabla) as SpriteRenderer();
что я обычно уже и делал на автомате
что будет равносильно
var go = Instantiate(blabla) as GameObject;
SpriteRenderer sprite = (go == null) ? null : go.GetComponent<SpriteRenderer>();
изначально у тебя ошибка в том, что зацепившись за название "Спрайт" ты видимо решил что Sprite это есть какая-то особая разновидность 2д го для юнити. но спрайт реализован через обычный го с прилепленым компонентом СпрайтРендерер. а Sprite - просто кусок текстуры, который он использует для отрисовки и сам по себе компонентом не является
Видимо, да, ты прав. Я пытался обращаться со спрайтом, как с го, получить его имя и т.д. Юнити просто как-то приучила, что всё легко и просто. Но на самом деле у меня есть отмазка, я в тот момент пиздец, как тупил, лол. Ведь писал же интерфейс на юГуи и там точно так же всё происходило
>Button button = Instantiate(BPitem, new Vector2(0, 0), Quaternion.Euler(Vector3.zero)) as Button;
>GameObject buttonObject = button.gameObject;
В целом вообще по впечатлениям, 2д режим и гуи режим в 3д - одно и то же.
Те, которые появляются в Editor при наведении мыши на переменную.
Именно! Благодарю!
Как-бы это и удобно, но как-бы хочется и опции и не хочется городить это велосипедными методами
Кто и как встраивал IAP (покупки) в Юнити?
Кто нить пользовался soomla?
Я пздц заепался, думаю попробую свой плагин пилит. Хочу зафигачить кнопку "remove ads"
Сделай версию с рекламой и версию без, если другое не получится.
В ассет-сторе все какие-то странные, отзывов нет.
распарсить файл со строками ключ=значение не можешь?
https://www.assetstore.unity3d.com/en/#!/content/25706
У тебя есть всё.
name monobehaviour does not exist in current context. Пикрилейтед.
Как ее полечить? У меня аллергия на красное...
Это копия, сохраненная 3 января 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.