角色从预期方向旋转了90度

时间:2019-03-25 03:18:11

标签: c# unity3d controls topdown

我正在构建一个自上而下的游戏,我的主要玩家朝着鼠标指针旋转,但由于某种原因,玩家从他的右手(他的x轴)注视着指针,所以我需要他从他的Y方向看。

我尝试了多种方法,但仍然与尝试将vector3从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 :(得分:0)

一种解决方案是找到一个您想要角色旋转的向量,即精灵从“前”的方向旋转,以及它应该旋转至的“方向”,即从角色到鼠标位置的方向-然后使用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);

答案 1 :(得分:0)

 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度,这样看起来可以再好一点,我的问题有点愚蠢,但是仍然没有合适的方法解决此问题的方法。 谢谢你们。