Приветствую мудрецы. Такая задачка : хочу сделать soft body механику на юнити (так как не нашел готового решения). Пока что модель падает, учитывая скорость берет точки прикосновения из contact point и задает им новую позицию, но модель становится ниже и выглядит не "желешно", поэтому хочу дополнить это ограничением расстояния между вершинами. Как получить дистанцию до ближайшей вершины и её ограничить через mesh verticles [i] ? Или посоветуйте готовое решение
Есть вектор forward который (0,0,1) и есть вектор right который (1,0,0). Стандартным методом через input.axis объект может совершать передвижения в направлении Если нажать вверх и вправо то вектор получится (0.7,0,0.7). Какую формулу юнька использует чтобы это получить? Как? Может что-то с направлениями? P.S Вот код, страшный жесть, надо будет делать манипуляции и легче делать с 1 значением, чем с 4
Собстна chelper это дочерний объект камеры который покажет для главного объекта где вперед и вправо. По коду хочется передать 2 значения и в результате манипуляции получить вектор, над которым дальше колдовать Дебаг показывает тот самый 0.7, 0 , 0.7 P.S.S :
Теория вот так :
Какая функция для вектор3 - непонятно
Сообщение отредактировал SrJeonny - Пятница, 19 Октября 2018, 06:58
Хай. 2 дня мучений над задачей. Есть объект и камера, объект двигается, поворачивается (через атан2(инпуть х.у) * рад2дег). Двигается кнопками. Предположительно камера может вертеться вокруг него, а он должен двигаться относительно камеры всегда. Тоесть если камера повернута на 30 градусов, то его направление вперед должно соответствовать и он будет двигаться вперед, а не чуть влево. По предположениям : В полученный через атан2 угол плюсануть поворот камеры и перевести обратно в радианы. Но тогда получится одно число, а вектору надо два. Вообще немного понятно что вектор (1,1) это 45 градусов поворота,то 75 граудсов с повернутой камерой это уже что-то иное, возможно инпуты на что-то помножить? Или чтобы инпут давал (1,1) а он бежал на 75 относительно мира и 45 относительно себя Помогите, мудрецы, хотя-бы зацепками
Сообщение отредактировал SrJeonny - Вторник, 16 Октября 2018, 22:00
алгоритм-то верный, но в реальном мире float нельзя сравнивать строгим сравнением из-за их неточности а поскольку Vector3 состоит из трех float, его тем более нельзя поэтому так
А что с transform.Translate? Он имеет право находится среди сглаживающих магий? Я так понял у него и MoveTowards есть что-то общее в логике работы.
Есть камера, есть объект на которую она смотрит и вокруг которого крутится. По нажатию кнопки она должна переместиться на расстояние вправо, !Плавно переместиться! Проблема в настоящий момент в том, что по GetKeyUp она перемещается на очень маленькие расстояния, при GetKey только зажимая переносится куда надо. Я пробовал делать метод, запускаемый нажатием кнопки, но работает так же, как и в апдейте. Нужно чтобы один раз нажав кнопку камера плавно переместилась в конкретную точку, а не где-то между старой позицией и нужной. Сейчас шаманю с Vector3.SmoothDamp, лерп тоже ковырял, не вышло. Кажется мне может помочь transform.Translate, но как-то не понятно ничего. Местные мудрецы, разложите пожалуйста!
Добрый вечер, господа. Такое дело : вытащил из фьюза текстурированного дядю (с UV картами на всё-всё), он состоял из тела и глаз, у тела вырезал рот (он мне не нужен, к тому же 2к полигонов это вау) и поставил в юньку, сделал материал и он положился ровно, четко, на глазах глаза, на теле - тело, но вот появилась необходимость персонажа порезать еще на части. Типо руки отдельными мешами, ноги, голова, но геометрия персонажа не изменилась и вот я закидываю это в юньку и получается мыльный ужас. Как я понял оно накидывает на каждую часть тела текстуру заново? Слышал во фьюзе какая-то магическая UV карта, цилиндра и палочки у меня нет, но делать надо. И так вопрос : Как используя старую UV развертку затекстурить моего клона-Франкенштейна? В ответ хочу получить логическую цепочку необходимых действий (надеюсь это можно как-то автоматизировать с blender'ом и 3D coat'ом)
Оффтоп или не оффтоп, вообщем если кто-то сюда зайдет, то наверно не зря, дабы не плодить темы хочу задать вопрос, тесно связанный с изначальной темой. Стрельнул в слот, он переместил его на место того, из которого был луч ( и который удалился сразу после луча), а как запустить цепную реакцию на остальные слоты? Код :
Код
public void InventorySort () { int layerMask = 1 << 5; gameObject.GetComponent<BoxCollider2D> ().enabled = false; RaycastHit2D hit = Physics2D.Raycast (transform.position, -Vector2.up, 40f, layerMask); if (hit.collider != null) { Sort (hit); } else { gameObject.GetComponent<BoxCollider2D> ().enabled = true; return; } }
Добрый вечер господа. Дорабатываю инвентарь и возникли проблемы. При удалении панельки (слота в инвентаре) он пускает луч в слот ниже, а тот в следующий слот и так пока слоты не закончатся, все слоты, на которых подействовала эта магия смещаются вверх на величину удаленного слота. Так вот возникла проблема с пулянием рейкаста. Не пойму откуда стрелять то? Код с пояснением:
Код
public void InventorySort () { rtransform = gameObject.GetComponent<RectTransform> (); // пробую взять ректрансформ (ведь он аналог трансформа для UI) int layerMask = 1 << 5; RaycastHit2D hit = Physics2D.Raycast (rtransform.anchoredPosition, -Vector2.up, 50, layerMask); //Пытаюсь стрелять из ректпозиции вниз на 50 едениц (хотя до следующего слота меньше 30) if (hit.collider != null) { //тут уже не важно Debug.Log (hit.collider.name); } else return; }
Собстна не пойму откуда стрелять то? Стреляю из transform.position так луча нет нигде, из anchoredPosition тоже не видать. Может есть какая-то мудрость или я чего-то не понимаю? П.С : Коллайдеры на слотах висят в режиме триггера, коллайдеры 2д, луч 2д.
Добавлено (05 Марта 2018, 00:27) --------------------------------------------- Господа, я тут подумал что мне могут ответить. Ну придет умный дядя и скажет : "Убирай 50, ставь Mathf.Infinity, всё равно столкнется. Тогда и трансформ позишон сработает", проверил и работает! Всем спасибо! П.С : Извините за шизофрению, наверно неудобно получилось П.С2 : Админы, за такой балаган готов ответить по всей строгости, но может быть это пригодится новичкам или странникам с измученными мозгами
Сообщение отредактировал SrJeonny - Понедельник, 05 Марта 2018, 00:23
Ты не используешь ни один параметр, а удаляешь btn, который видимо поле класса и ты его присваиваешь в методе выше, поэтому и удаляется последнний добавленный предмет
Я на самом деле и rbutton туда ставил, результат тот же
Работаю с инвентарем, цикл for не использую. Когда беру предмет он удаляется и в инвентаре (ui) создается слот с иконкой, именем и кнопкой. Кнопка имеет метод onClick прописанный через скрипт. Метод удаления из инвентаря и здесь возникла проблема. Создаю слот в инвентаре, создаю кнопку и даю ей в parent'ы свежесозданный слот, по идее после нажатия кнопки должен удалится слот, который её родитель и она сама соответственно (ну и там предмет на сцене потом появится и до этого я еще не дошел). НО если я беру второй предмет в инвентарь то всё ломается : нажимая на кнопку удаления в первом слоте инвентаря удаляется второй (или третий, вообщем последний созданный) и если я жму кнопку в еще одном слоте вылазит ошибка, мол "Кнопка уже удалена, че ты её тыкаешь?". Код:
Код
public void InventoryAct (GameObject itembox) { // itembox - предмет, попавший из луч из другого скрипта, а этот войд из интерфейса
Item item = itembox.GetComponent<Item> (); items.Add (item.prefab); // тут не важно
void InventoryRemove (GameObject invItem,GameObject rbutton, RectTransform rtransform) { Destroy (btn.transform.parent.gameObject); // удаляет своего родителя ( и себя заодно) // тут будут еще строки после решения проблемы с кнопкой }
Не понимаю в чем проблема, код можно не модернизировать, прошу лишь логической помощи и наводок. Спасибо.
Сообщение отредактировал SrJeonny - Суббота, 03 Марта 2018, 00:57
Добрый вечер господа. Столкнулся с глупой проблемой. Предположим на персонажа можно одеть броню, да разбитую на части (ака Скайрим: шляпа, костюм, наручи, сапоги) и каждый из них будет иметь переменную типа int отвечающая за защиту, предположим она будет снижать урон и предельно просто, передавая суммарное значение int def со всех элементов одеяния куда-либо, все они сложатся и получится одна цифра, благодаря которой рассчитается снижение урона. Я бы залез в гугл, перекопал всю документацию по юнити, но я даже не знаю как четко сформулировать это всё. Есть вариант наплодить hatDef,armourDef,legsDef и т.дef... Но жутко не эстетично, уверен есть решение проще. Мудрецы, отзовитесь!