Персонаж повернут на 90 градусов от намеченного направления - PullRequest
1 голос
/ 25 марта 2019

Я строю игру сверху вниз с моим основным игроком, вращающимся в направлении указателя мыши, но по какой-то причине игрок смотрит на указатель справа (его ось x), и мне нужно, чтобы он смотрел из своего Y.

Я пробовал несколько способов и все так же, как и в, я пытался изменить вектор с vector3 на vector2, но это приведет к тому, что мне это не нужно, и я даже попытался использовать кватернионы.

void controlScheme()
{
    if (Input.GetKey(KeyCode.W))
    {
        transform.Translate(Vector3.up * PlayerSpeed * Time.deltaTime,Space.World);
    }
    if (Input.GetKey(KeyCode.S))
    {
        transform.Translate(Vector3.down * PlayerSpeed * Time.deltaTime,Space.World);
    }
    if (Input.GetKey(KeyCode.A))
    {
        transform.Translate(Vector3.left * PlayerSpeed * Time.deltaTime,Space.World);
    }
    if (Input.GetKey(KeyCode.D))
    {
        transform.Translate(Vector3.right * PlayerSpeed * Time.deltaTime,Space.World);
    }

    transform.up = dir;*/

    var dir = Input.mousePosition - Camera.main.WorldToScreenPoint(transform.position);
    var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

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

Ответы [ 2 ]

0 голосов
/ 28 марта 2019
 Vector2 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - this.transform.position;


    float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
    this.transform.rotation = Quaternion.Euler(0f, 0f, rot_z -90);

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

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

Одним из решений является поиск вектора, в котором вы хотите, чтобы персонаж поворачивался «от» - направление «фронта» спрайта - и где он должен вращаться «на» - направление от символа к позиции мыши- и затем используйте transform.rotation.SetFromToRotation, чтобы установить любое вращение, необходимое для этого изменения:

Vector3 desiredDirection = Camera.main.WorldToScreenPoint(transform.position) - Input.mousePosition;
Vector3 startDirection = Vector3.up; // the vector direction of the character's
                                     // "front" before any rotation is applied.

transform.rotation.SetFromToRotation(startDirection, desiredDirection);
...