Поворот 2D персонажа, с помощью бросания луча

сижу над данной проблемой уже 2-й день и ничего не могу сделать. Пробовал писать скрипт и так и сяк и все ровно не могу добиться желаемого результата, а именно поворот персонажа на 180 градусов с помощью бросания луча. Суть в том, что мне нужно чтобы персонаж поворачивался на 180 градусов если дистанция между персонажем, который его бросает и твердым объектом меньше либо ровно 1. Подскажите пожалуйста в чем может быть проблема. Может я не правильно луч бросаю или не ту проверку делаю. Вот скрипт:введите сюда описание изображения


Ответы (1 шт):

Автор решения: Рашид Ахмеров

Видимо ты хочешь сделать врага на манер гриба из Марио который будет ходить туда сюда между двумя стенками.

Проблема в том что ray.distance равен 0 если луч ничего не нашел. Поэтому лучше сперва проверить ray.collider != null.

Стоит не забыть у стенки добавить компонент типа BoxColider2D. Также обрати внимание что transform.forwardэто синяя ось объекта(в 2D режиме её не видно), она смотрит в сторону камеры. И код поворота сработает только когда персонаж наполовину зайдет под стенку до своего центральной точки(пивота).

Вот пример работающего кода

private void FixedUpdate()
    {
        //transform.localPosition = transform.localPosition + Time.fixedDeltaTime * speed * transform.right;
        transform.Translate(speed *Time.fixedDeltaTime,0,0);

        RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.right);
        if (hit.collider != null)
        {
            if (hit.distance < 1)
            {
                transform.eulerAngles +=   new Vector3(0,180,0);
                Debug.Log("Препятствие " + hit.collider+" "+ hit.distance );
            }
        }
    }
→ Ссылка