Перемещение (вращение)объекта вокруг "якоря"

Программирование на Юнити.

Перемещение (вращение)объекта вокруг "якоря"

Сообщение Flash14243 24 мар 2021, 07:12

Всем привет, столкнулся с такой проблемой как вращение объекта вокруг персонажа.

Суть: Нужно что бы маркер(Sprite) вращался вверх-вниз как бы огибая половину круга перед персонажем, при повороте персонажа соответственно, что бы перед лицом так же оставался маркер.

Я кучу ссылок просмотрел, много испробовал, но то что я хотел сделать, даже близко не получалось.
При попытке сделать это "Маркер" вращался вокруг центра экрана и при повороте персонажа, он резко увеличивал свой радиус.
Хотя я привязывал его к "Якорю"(Пустой гейм объект на игроке). Так же пробовал RotateAround, но он у меня вращался в основном по z.

И ещё, если это получится у вас сделать, можно будет без проблем к этому маркеру добавить точку для выстрела(тоже пустой объект), что бы она без прерываний работала. Если не получится, напишите об этом пожалуйста, я тогда сам допишу, что бы он следовал за маркером.

Если нужны скрины и прочее, отправлю, как увижу сообщение на форуме.
Заранее спасибо за помощь.
Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Перемещение (вращение)объекта вокруг "якоря"

Сообщение 1max1 24 мар 2021, 08:43

Скрины или видео не помешало бы, я не очень понимаю что за маркер и зачем он нужен.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Перемещение (вращение)объекта вокруг "якоря"

Сообщение Flash14243 24 мар 2021, 11:18

https://imgur.com/a/3Pt4GZ4
Жёлтым я нарисовал полукруг, по которому должен двигаться маркер
А зелёный - это уже его путь когда персонаж поворачивается.
То есть маркер всегда огибает только половину круга, только в разных сторонах
Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Перемещение (вращение)объекта вокруг "якоря"

Сообщение TeslaGan 24 мар 2021, 11:56

в плане идеи можно написать что-то подобное(нет под рукой компа, могут быть ошибки):
Синтаксис:
Используется csharp
    public float Distance;
    public transform Anchor;
    private Vector3 _mousePosition;

    void Update()
    {
        _mousePosition=Input.mousePosition;
       
        //_mousePosition.z=Camera.main.nearClipPlane; //если игра не 2д
        _mousePosition=Camera.main.ScreenToWorldPoint(_mousePosition);
        //_mousePosition.z=transform.position.z; если игра 2д
                if (transform.rotation.x*_mousePosition.x<0) //transform.rotation.x - хранит направление поворота игрока, его надо менять, на то, что у тебя в коде задает его
            _mousePosition.x*=-1;
        Anchor.position = (transform.position+Vector3.Normalize(_mousePosition-transform.position)*Distance);

набросал что-то такое...
p.s. вообще с такими вопросами(а особенно "если это получится у вас сделать"@Flash14243) надо идти в платный раздел
Последний раз редактировалось TeslaGan 24 мар 2021, 12:01, всего редактировалось 1 раз.
TeslaGan
UNITрон
 
Сообщения: 315
Зарегистрирован: 01 авг 2015, 18:00

Re: Перемещение (вращение)объекта вокруг "якоря"

Сообщение Alkos26Rus 24 мар 2021, 11:57

сделай один дочерний объект(номер1) внутри персонажа на нулевых позициях, затем в этот дочерний объект засунь свой маркер(номер2) уже со смещением по Х, и вращай объект(номер1) по нужной оси(не помню какая в 2д) локально с ограничением в 180 градусов и это все будет работать при развароте если ты поворачиваешь персонаж отрицательным scale
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Перемещение (вращение)объекта вокруг "якоря"

Сообщение Flash14243 24 мар 2021, 16:13

TeslaGan писал(а):в плане идеи можно написать что-то подобное(нет под рукой компа, могут быть ошибки):
Синтаксис:
Используется csharp
    public float Distance;
    public transform Anchor;
    private Vector3 _mousePosition;

    void Update()
    {
        _mousePosition=Input.mousePosition;
       
        //_mousePosition.z=Camera.main.nearClipPlane; //если игра не 2д
        _mousePosition=Camera.main.ScreenToWorldPoint(_mousePosition);
        //_mousePosition.z=transform.position.z; если игра 2д
                if (transform.rotation.x*_mousePosition.x<0) //transform.rotation.x - хранит направление поворота игрока, его надо менять, на то, что у тебя в коде задает его
            _mousePosition.x*=-1;
        Anchor.position = (transform.position+Vector3.Normalize(_mousePosition-transform.position)*Distance);

набросал что-то такое...
p.s. вообще с такими вопросами(а особенно "если это получится у вас сделать"@Flash14243) надо идти в платный раздел

Я так понял это что бы он двигался за мышью, но это немного не то что мне нужно.
А что за платный раздел, я тут вроде 2 года, иногда захожу, но никогда не видел/слышал об этом.
Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Перемещение (вращение)объекта вокруг "якоря"

Сообщение waruiyume 24 мар 2021, 16:46

Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Перемещение (вращение)объекта вокруг "якоря"

Сообщение TeslaGan 25 мар 2021, 10:09

Flash14243 писал(а):Я так понял это что бы он двигался за мышью, но это немного не то что мне нужно.
А что за платный раздел, я тут вроде 2 года, иногда захожу, но никогда не видел/слышал об этом.

тогда сделайте как вам посоветовал Alkos26Rus, этот вариант будет оптимальным. или еще как вариант - поищите как люди делают радиальные слайдеры
TeslaGan
UNITрон
 
Сообщения: 315
Зарегистрирован: 01 авг 2015, 18:00


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 13