или
Альтернативная ссылка для картинки
Это моя проблема, у меня естьшар внутри круга, все они находятся во 2-м мире, и я хочу, чтобы мой шар отскакивал от каждого времени в соответствии с нормальной поверхностью. Как я могу это сделать?
Я разработал его так, что у меня есть 2 сценария, один из которых прикреплен к красному шару и имеет имя BallScript, а другой - для кнопки отказов, называемой сценарием отказов.
BallScript.cs подобен приведенному ниже ответу:
private ContactPoint contact;
public static Vector3 temp;
private void FixedUpdate()
{
temp = Vector3.Reflect(circle.GetComponent<Rigidbody2D>().velocity, contact.normal);
}
private void OnCollisionEnter2D(Collision collision)
{
contact = collision.contacts[0];
}
и Bounce.cs для кнопки отказов похожи на это:
ball.velocity = new Vector3(0, 5.5f, 0) + BallScript.temp;
С этими обновлениями в качестве ответов ниже, яподобрался близко, но иногда круг отскакивает к правому нормальному вектору вектора (например, если вы находитесь в правом нижнем углу большого круга, шар должен отскочить влево, если шар находится внутри нижней левой стороны круга, он должен отскочитьвправо) но иногда он подпрыгивает в неправильном направлении. Подумайте, что иногда он подпрыгивает, а иногда - в зеркальном отображении.
До сих пор я пробовал много вещей, но пока я не хотел найти путь к своему желанию, я имитировал действие, как показано ниже, с помощью скрипта отказов;
if (circle.transform.position.x < 0)
{
ball.velocity = new Vector3(3f, 5f, 0);
}
if (circle.transform.position.x > 0)
{
ball.velocity = new Vector3(-3f, 5f, 0);
}