@Sarcasop

Как сделать нормальный рикошет?

Суть в том, что мне необходимо реализовать рикошет шара. Хочу сделать это без помощи Rigidbody. Пробую сейчас сделать через Raycast. Рикошет действительно получается, но в том случае, если шар выпускаю из координат (0, y), y - любое. В случае, если x отличный от нуля, то рикошет идёт по непонятной мне траектории. Что можете посоветовать? Ниже участок кода с самим рикошетом.
if (Input.GetKey(KeyCode.Space))
        {
            _direction = transform.up;
        }

        transform.Translate(transform.TransformDirection(_direction) * Time.deltaTime * _speed);
        LayerMask _mask = LayerMask.GetMask("Wall");
        if (Physics2D.Raycast(transform.position, _direction, .5f, _mask))
        {
            GameObject _tempo;
            _tempo = Instantiate(_forInstantiate, transform.position, _forInstantiate.transform.rotation); //_forInstantiate необходим для определения перпендикуляра для метода Reflect
            _direction = transform.TransformDirection(Vector2.Reflect(transform.position, _tempo.transform.right).normalized);
            Destroy(_tempo.gameObject, .1f);
        }
  • Вопрос задан
  • 1102 просмотра
Решения вопроса 1
@Sarcasop Автор вопроса
Разобрался с вопросом. Если кому интересно решение - все до банального просто, я неправильно прочитал справку, из-за чего в Vector2.Reflect() неправильно написал аргументы.
transform.Translate(_direction * Time.deltaTime * _speed);
        LayerMask _mask = LayerMask.GetMask("Wall");
        RaycastHit2D hit = Physics2D.Raycast(transform.position, _direction, .5f, _mask);
        if (hit && isActive)
        {
            _direction = Vector2.Reflect(_direction, hit.normal).normalized;  
        }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы