Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Мяч не отскакивает от объекта (Unity)

нара фаа Ученик (97), на голосовании 3 дня назад
Попадает по объекту и просто "плывёт" в сторону после попадая, а не отскакивает по примеру:
"угол падения равен углу отражения"



 using UnityEngine; 

public class BallController : MonoBehaviour
{
private Rigidbody2D rb;

[Header("Настройки шарика")]
// Скорость (например, 1)
public float initialSpeed = 1f;

void Start()
{
rb = GetComponent<Rigidbody2D>();
if (rb == null)
{
Debug.LogError("Rigidbody2D не найден на объекте Ball!");
return;
}
// Направление
rb.linearVelocity = new Vector2(1f, 1f).normalized * initialSpeed;
}

void OnCollisionEnter2D(Collision2D collision)
{
// "Breakable"
if (collision.gameObject.CompareTag("Breakable"))
{
Destroy(collision.gameObject);
}

// Точка
if (collision.contacts.Length > 0)
{
Vector2 contactNormal = collision.contacts[0].normal;
// Вектор
Vector2 reflectedVelocity = Vector2.Reflect(rb.linearVelocity, contactNormal).normalized * initialSpeed;
rb.linearVelocity = reflectedVelocity;
}
}
}
Голосование за лучший ответ
Мороз Админов Знаток (389) 1 месяц назад
using UnityEngine;

public class BallController : MonoBehaviour
{
private Rigidbody2D rb;

[Header("Настройки шарика")]
public float initialSpeed = 1f;

void Start()
{
rb = GetComponent<Rigidbody2D>();
if (rb == null)
{
Debug.LogError("Rigidbody2D не найден на объекте Ball!");
return;
}

// Установка начальной скорости
rb.velocity = new Vector2(1f, 1f).normalized * initialSpeed;
}

void OnCollisionEnter2D(Collision2D collision)
{
// "Breakable"
if (collision.gameObject.CompareTag("Breakable"))
{
Destroy(collision.gameObject);
}

// Обработка отскока
if (collision.contacts.Length > 0)
{
Vector2 contactNormal = collision.contacts[0].normal;
Vector2 reflectedVelocity = Vector2.Reflect(rb.velocity, contactNormal).normalized * initialSpeed;
rb.velocity = reflectedVelocity;

// Убедитесь, что добавились изменения для мета-движения в случае столкновения
rb.angularVelocity = 0f; // сбрасываем угловую скорость,
если это необходимо
}
}
}
нара фааУченик (97) 1 месяц назад
Неа, тож самое
Похожие вопросы