Попытка сделать Rigidbody2D лицом к цели, используя AddTorque - PullRequest
0 голосов
/ 24 марта 2019

Предположим, у меня есть игрок-корабль и планета в 2D игре на единство.Я хочу, чтобы угол поворота корабля падал относительно поверхности, находящейся непосредственно под ним (например, если часть поверхности под кораблем составляет 80 градусов, корабль должен иметь тенденцию падать до 80 градусов, когда он находится над этим местом).

В настоящее время у меня есть код, который вроде работает:

    Vector2 direction = planet.position - transform.GetChild(0).position;
    float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg + 90;
    rig[0].AddTorque(-rig[0].rotation + angle);

Он делает то, что я хочу, за исключением места, где вращение корабля меняется с 360 на 0, где происходит внезапный 360-кратный переворот.Я пытаюсь понять, как этого не произошло.

Я не хочу использовать LookAt() для этого, потому что это должен быть момент, который стремится к направлению цели, а не хваткаустановить в этом направлении.

1 Ответ

0 голосов
/ 28 марта 2019

Грубый обходной путь, который я использовал в прошлом:

Создайте 2 объекта и сделайте их потомками объекта вашего игрока.

Расположите один из них в (-1,0,0) локально и назовите его LeftObj.Поместите другой в (1,0,0) и назовите его RightObj.

Теперь вы можете просто проверить, что ближе к цели, чтобы выяснить, какой из них наиболее эффективен для поворота.

float LDist = Vector3.Distance(LeftObj.transform.position, target.transform.position);

float RDist = Vector3.Distance(RightObj.transform.position, target.transform.position);

if (LDist < RDist){

    // Turn left

}else{

    // Turn right

}

Не самый эффективный метод, но его легко и быстро настроить, и он четко говорит вам «влево или вправо» независимо от значений поворота.

Очевидный недостаток заключается в том, что вы не можете получить вращениезначение для масштабирования вашего крутящего момента, когда вы приближаетесь к цели, поэтому вам может потребоваться увеличить angularDrag на жестком теле вашего игрока, чтобы сгладить некоторое заикание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...