旋转球员朝向他们的方向

时间:2018-03-30 18:17:31

标签: c# unity3d

我试图从一个旧的Flash游戏中复制一个移动系统我基于一个团结的游戏(主要用于练习)。我遇到的主要问题是玩家没有看到'走向他要去的地方。他只是一直朝这个方向看。

Here's what mine currently looks like

and here's what I want it to look like

我已经尝试过这样做,但我找不到一个效果很好的解决方案(并且它的代码早已不复存在)。如果有人可以帮我实现这样的事情,那就太好了!

我的播放器控件的代码:

public void PlayerFixedUpdate () {
    if (Input.GetKey(KeyCode.A) && transform.position.x > -44){
        if (body.velocity.x > -15){
            body.AddForce(new Vector2(-15,0),ForceMode2D.Force);
        }
    }
    if (Input.GetKey(KeyCode.D) && transform.position.x < 9){
        if (body.velocity.x < 15){
            body.AddForce(new Vector2(15,0),ForceMode2D.Force);
        }
    }
    if (Input.GetKey(KeyCode.W) && transform.position.y < 24){
        if (body.velocity.y < 15*body.mass){
            body.AddForce(new Vector2(0,15),ForceMode2D.Force);
        }
    }
    if (Input.GetKey(KeyCode.S) && transform.position.y > -1){
        if (body.velocity.y > -15*body.mass){
            body.AddForce(new Vector2(0,-15),ForceMode2D.Force);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

取决于您的对象的设置方式,但一种解决方案是在速度组件的方向上设置旋转。

void rotateFace()
{
   Vector2 dir = rbody.velocity.normalized; // where rbody is your rigidbody2D
   transform.rotation = Quaternion.Euler(0, 0, Mathf.Atan2(dir.y, dir.x)*Mathf.Rad2Deg - 90); //may not need 90deg offset here
}

您可能需要检查零速度,在这种情况下,您应该不做任何事情来维持最后一次旋转。

答案 1 :(得分:0)

第二个链接显示它们总是在一个方向上移动,这只是角色面对的方向,基本上他们所做的就是使用播放器输入旋转角色并继续在本地向前方向施加速度玩家。