字符从预定方向旋转 90 度



我正在构建一个俯视游戏,我的主要玩家向鼠标指针旋转,但由于某种原因,玩家从他的右边(他的x轴(看指针,我需要他从他的Y看。

我尝试了多种方法,仍然与我尝试将向量

从 vector3 更改为向量 2 一样,但它会使我不需要它做的事情,我什至尝试使用四元数。

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);

唯一奇怪的是,没有代码告诉引擎让玩家从玩家的右侧向鼠标旋转。

一种解决方案是找到一个你希望角色"从"旋转的向量——精灵的"前"方向——以及它应该旋转"到"的位置——从角色到鼠标位置的方向——然后使用 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);
 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 度,以便它可以再次看起来更好,我的问题有点愚蠢,但仍然没有适当的方法来解决这个问题。谢谢你们。:D

相关内容

  • 没有找到相关文章

最新更新