在2D场景中旋转3D对象

时间:2015-06-27 22:06:49

标签: unity3d

我正在制作一款2.5D平台游戏,但我无法正确调整播放器。我只是希望它在X轴上旋转,同时玩家向左和向右移动。我的动作脚本是:

      if (isWalking)
    {
        transform.Rotate(0, facingDir, 0);
        isWalking = false;
    }
    else { }

    if (Input.GetKey(KeyCode.Space))
        GetComponent<Rigidbody>().velocity = new Vector2(GetComponent<Rigidbody>().velocity.x, jumpHeight);

    if (Input.GetKey(KeyCode.A)){
        GetComponent<Rigidbody>().velocity = new Vector2(-speedHeight, GetComponent<Rigidbody>().velocity.y);
        facingDir = 180;
        isWalking = true;
    }

    if (Input.GetKey(KeyCode.D))
    {
        GetComponent<Rigidbody>().velocity = new Vector2(speedHeight, GetComponent<Rigidbody>().velocity.y);
        facingDir = 0 ;
        isWalking = true;
    }

我可以旋转它的最好方法是通过transform.rotate(0,180,0)和(0,0,0),但是它会不停地旋转,我怎么知道玩家在X上的移动方向-axis所以我可以正确转换。旋转?

1 个答案:

答案 0 :(得分:1)

transform.forward

这应该为您提供玩家移动的方向。您可以使用

transform.LookAt(target);

将玩家定向在特定方向。主要问题是您正在尝试更新GetKey函数中的方向,该方向在按住键时返回true。这会导致角色不断旋转,您可以通过使用额外的检查来避免这种情况。您可以通过以下方式使用Lookat:

GetComponent<Rigidbody>().velocity = new Vector2(-speedHeight, GetComponent<Rigidbody>().velocity.y);

transform.LookAt(transform.position+new Vector3(GetComponent<Rigidbody>().velocity.x,0,GetComponent<Rigidbody>().velocity.y));

有更好的方法可以解决这个问题。