Я пытаюсь создать игру, в которой мяч будет рикошетом от нескольких разных коллайдеров на экране.Основываясь на том, что я исследовал, я получил код, который поначалу казался осмысленным, но, похоже, не работал вообще.Я проверяю это, просто упав на двухмерный пол с прикрепленным к нему коллайдером.Однако, как только он сталкивается с полом, он просто останавливается и не возвращается назад.Я попытался отключить «Запуск запросов в коллайдерах» в настройках проекта и сместить исходную позицию RaycastHit2D, чтобы он не обнаруживал коллайдер, к которому он подключен, но он все еще не работал.Я не думаю, что RaycastHit2D вообще работает, потому что он даже ничего не отображает в консоли.Вот мой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyBehavior : MonoBehaviour {
Rigidbody2D rigidbody;
public Vector2 startPos;
public float speed;
public float hitOffset;
Vector3 vector = new Vector3(0, 5,0); //used to offset origin point of RaycastHit2D hit
private void OnEnable()
{
rigidbody = GetComponent<Rigidbody2D>();
this.transform.position = startPos;
}
private void Update()
{
transform.Translate(Vector2.down * speed * Time.deltaTime);
RaycastHit2D hit = Physics2D.Raycast(transform.position + vector, - transform.up, speed * Time.deltaTime + hitOffset);
Debug.DrawRay(transform.position, -transform.up, Color.red);
Ray2D ray = new Ray2D(transform.position, -transform.up);
if (hit)
{
Debug.Log(speed * Time.deltaTime + hitOffset);
Debug.Log(hit.collider.name);
Vector2 reflectDir = Vector2.Reflect(ray.direction,hit.normal);
float rotation = Mathf.Atan2(reflectDir.y, reflectDir.x) * Mathf.Rad2Deg;
transform.eulerAngles = new Vector3(0, 0, rotation);
}
}
}
Моя математика плохая?Любая помощь очень ценится, спасибо.