角色从预期方向旋转 90 度
Character is rotated 90 degrees off from intended direction
我正在构建一个自上而下的游戏,我的主要玩家朝着鼠标指针旋转,但出于某种原因,玩家从他的右边(他的 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);
唯一奇怪的是没有代码告诉引擎让玩家从玩家的右侧向鼠标旋转。
一个解决方案是找到一个您希望角色旋转的矢量 "from" -- 精灵的方向 "front" -- 以及它应该旋转的位置 "to" --从角色到鼠标位置的方向——然后使用 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
我正在构建一个自上而下的游戏,我的主要玩家朝着鼠标指针旋转,但出于某种原因,玩家从他的右边(他的 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);
唯一奇怪的是没有代码告诉引擎让玩家从玩家的右侧向鼠标旋转。
一个解决方案是找到一个您希望角色旋转的矢量 "from" -- 精灵的方向 "front" -- 以及它应该旋转的位置 "to" --从角色到鼠标位置的方向——然后使用 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