Я искал везде, включая документацию Unity, но, похоже, не нашел хороших примеров того, как использовать функцию Unity Vector2.Reflect (). Я пытаюсь использовать это, чтобы контролировать направление мяча (в 2D-игре Breakout), когда он ударяется о стену. Требуется 2 аргумента (inDirection, inNormal), но я не могу понять, как это использовать. Любая помощь будет оценена по достоинству.
Unity - как использовать Vector2.Reflect ()
Ответы (2)
inDirection
должен быть скоростью вашего мяча, а inNormal
должен быть единичным вектором, перпендикулярным вашей стене.
Попробуйте поместить это в свой шаровой объект:
void OnCollisionEnter(Collision collision)
{
Vector2D inDirection = GetComponent<RigidBody2D>().velocity;
Vector2D inNormal = collision.contacts[0].normal;
Vector2D newVelocity = Vector2D.Reflect(inDirection, inNormal);
}
ПРИМЕЧАНИЕ. В настоящее время я не могу протестировать этот код, поэтому может потребоваться настройка имен вещей.
person
Benjamin James Drury
schedule
13.12.2016
Похоже, inNormal должен действительно быть единичным вектором, иначе ваш результат будет испорчен, поскольку Unity применит необработанную формулу без ее нормализации для производительности.
- person hsandt; 28.02.2019
Reflect()
вместо того, чтобы просто полагаться на симуляцию физики Unity, чтобы отразить мяч от стены? Программное управление этим, скорее всего, приведет к неожиданному / нереалистичному поведению, которое может нанести ущерб опыту игрока. - person Serlite   schedule 13.12.2016newVelocity.normalized * GameManager.speed
, чтобы сохранить величину вашей скорости на случай, если она будет потеряна. Я немного сомневаюсь, чтоReflect()
будет вести себя так, как вы ищете, но вы знаете свой проект лучше всего. - person Serlite   schedule 14.12.2016