Unity - 让玩家指向鼠标
Unity - Make player point toward mouse
我正在制作一个自上而下的射击游戏,玩家可以使用 WASD 上下左右移动并不断指向鼠标。我希望移动与玩家指向的方向无关,但现在情况并非如此。
这是我的代码:
void Update()
{
float igarH = Input.GetAxisRaw("Horizontal");
float igarV = Input.GetAxisRaw("Vertical");
if (igarH > 0.5f || igarH < -0.5f)
{
transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f));
}
if (igarV > 0.5f || igarV < -0.5f)
{
transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f));
}
// Point toward mouse
Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = rotation;
}
抱歉缩进错误,很难弄清楚网站要我如何做标记,而且我是这个网站的新手。
为什么播放器会根据我的鼠标位置移动不同?我希望无论如何运动都是一样的。
请保留所有与 Unity2D 而非 3D 相关的答案。
Transform.Translate 有一个可选参数 relativeTo
,您可以选择是否希望对象相对于其自身的坐标系或世界坐标系移动。
只需将您的通话更改为:
if (igarH > 0.5f || igarH < -0.5f) {
transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f), Space.World);
}
if (igarV > 0.5f || igarV < -0.5f) {
transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f), Space.World);
}
我正在制作一个自上而下的射击游戏,玩家可以使用 WASD 上下左右移动并不断指向鼠标。我希望移动与玩家指向的方向无关,但现在情况并非如此。
这是我的代码:
void Update()
{
float igarH = Input.GetAxisRaw("Horizontal");
float igarV = Input.GetAxisRaw("Vertical");
if (igarH > 0.5f || igarH < -0.5f)
{
transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f));
}
if (igarV > 0.5f || igarV < -0.5f)
{
transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f));
}
// Point toward mouse
Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = rotation;
}
抱歉缩进错误,很难弄清楚网站要我如何做标记,而且我是这个网站的新手。
为什么播放器会根据我的鼠标位置移动不同?我希望无论如何运动都是一样的。
请保留所有与 Unity2D 而非 3D 相关的答案。
Transform.Translate 有一个可选参数 relativeTo
,您可以选择是否希望对象相对于其自身的坐标系或世界坐标系移动。
只需将您的通话更改为:
if (igarH > 0.5f || igarH < -0.5f) {
transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f), Space.World);
}
if (igarV > 0.5f || igarV < -0.5f) {
transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f), Space.World);
}