Суббота, 20 Апреля 2024, 17:29

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Работа OnPointerClick [решено]
Работа OnPointerClick [решено]
MrBILLДата: Понедельник, 24 Августа 2020, 15:37 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем доброго времени суток.
Столкнулся с проблемой... Никак не допру, как сделать так, что бы это не было костылём...
Имеется скрипт:
Код
public void OnPointerClick(PointerEventData eventData)
    {
        float distNow = Vector3.Distance(player.transform.position, this.transform.position);
        print(distNow);
        if (distNow >= 3)
        {
            mover.StartMoveAction(this.transform.position, 10f);
        }
        else
        {
            PickUp();
        }

    }


Смысл такой, что на земле лежит предмет, от него идет world space канвас, на котором изображение и текст с названием предмета. По нажатию на него, если дистанция от предмета, до игрока больше 3 юнитов - бежать к предмету. Иначе - поднять предмет. Все работает исправно, но, никак не допру, как расширить этот скрипт, что бы по 1 клику, если персонаж далеко - он бежал, и как только дистанция становится менее 3 - подбирать предмет, а не останавливаться и ждать еще 1 клик.

Ну и раз уж написал пост, задам еще 1 вопрос =)
Все тот же предмет на земле, он имеет свойство перекатываться, и в принципе воздействовать с окружением, по этому он крутится, а вместе с ним и дочерний канвас, на котором скрипт с transform.forward = camera.main.transform.forward. Все нормально, но если предмет переварачивается, то канвас уходит под террейн и его вообще не видно =( Как можно зафиксировать положение относительно родительского объекта, если он крутиться? Убрать родителя у канваса - не вариант =(


Сообщение отредактировал MrBILL - Вторник, 25 Августа 2020, 14:59
IlyaKosДата: Вторник, 25 Августа 2020, 06:39 | Сообщение # 2
участник
Сейчас нет на сайте
1) Можешь например ввести булевую переменную, типа
bool pickUpAfterMoving;
и
if (distNow >= 3)
{
mover.StartMoveAction(this.transform.position, 10f);
pickUpAfterMoving = true;
}

И как-нибудь запоминать предмет и в апдейте проверить дистанцию, и, в случае pickUpAfterMoving = true вызвать PickUp.
Либо как-то еще запоминать очередность действий.

2) Можно с поворотами подрючиться.
А еще может быть возможно рендерить этот канвас другой камерой вышестоящим слоем, чтобы переграждал геометрию.
MrBILLДата: Вторник, 25 Августа 2020, 08:59 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата IlyaKos ()
1) Можешь например ввести булевую переменную, типа
bool pickUpAfterMoving;
и
if (distNow >= 3)
{
mover.StartMoveAction(this.transform.position, 10f);
pickUpAfterMoving = true;
}


Как вариант, но я хотел отказаться от Update , а тут придется проверять в любом случае =(

Добавлено (25 Августа 2020, 14:59)
---------------------------------------------
В общем практически без костылей исправил проблему...
1. Добавил пустой gameobject, при клике на предмет, этот предмет заменяет собой gameobject , и в update проверяю, если эти 2 предмета == , значит - поднять предмет, при дистанции менее 3 юнитов.
2. Все оказалось банально и легко... поменял в иерархии меш, с rigidbody и коллайдером, добавил ему пустышку родителя, и уже туда засунул дочерними канвас и меш. Теперь меш вне зависимости от канваса крутится-вертится, а канвас на своем законном месте.

Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Работа OnPointerClick [решено]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг