C# 统一2d轻触行走 速度取决于从对象到单击的距离。 如何解决这个问题

C# 统一2d轻触行走 速度取决于从对象到单击的距离。 如何解决这个问题,c#,unity3d,unity3d-2dtools,C#,Unity3d,Unity3d 2dtools,如何在y轴上锁定移动(单击后) public int speed; Vector3 position; bool go; void FixedUpdate () { if (Input.GetKey (KeyCode.Mouse0)) { go=true; Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hit;

如何在y轴上锁定移动(单击后)

public int speed;
Vector3 position;
bool go;

void FixedUpdate ()
{      
    if (Input.GetKey (KeyCode.Mouse0))
    {
        go=true;
        Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast (ray, out hit, Mathf.Infinity))
        {
            position = hit.point;
        }
    }

  //////////////////////////////////////////////////////////////////////

    if(go)
    {
        Vector2 direction = position - transform.position;

        float targ_pos = Vector2.Distance (transform.position, position);

        if(targ_pos>0)
        {
            rigidbody2D.AddForce ((position - transform.position)*speed);       
        }
        else {go=false;}
    }  
}

也许你仍在寻找答案,但这可能会帮助其他对此感到疑惑的人

我做了一个游戏,角色以点击移动的方式移动。我是这样做的。我的游戏是3D的,所以你可能需要调整一下

我们存储我们击中的点,它属于我场景的地板(floorHit)。我在班上名列前茅,宣布了一个矢量多哥。我的播放器上有一个刚体,我朝着它应该移动的点旋转。然后使用MoveToward(从、到、速度)

然后,在if之外,仍然在update函数中,我们使用前面保存的toGo向量3调用moveToward:

transform.position = Vector3.MoveTowards (transform.position, toGo, speed * Time.deltaTime);
希望有帮助

最重要的是,我有代码,如果你想动画你的角色

不要犹豫要求更多


bRo

当前添加的力与您尝试“平移”的距离有关。您需要创建一个标准化向量,然后按速度将其乘以。至于第二点,在你的物体刚体中,你可以动态设置运动限制,我想这就是你想要的?谢谢你的回答。我知道“正常化”,但我真的是个新手。)类似于:rigidbody2D.AddForce((position-transform.position).Normalize*speed);导致错误。对于第2点(如果您编写了约束锁定位置/旋转),此功能仅适用于刚体(3D),而不适用于2D。
transform.position = Vector3.MoveTowards (transform.position, toGo, speed * Time.deltaTime);