首页 文章

按下左键时,将x轴上的gameObject移动一定量,然后停在游戏边界

提问于
浏览
0

我想知道是否有人知道如何在c#(Unity)中这样做 . 每当按下向左或向右箭头时,玩家将在x轴上向左/向右移动一定量,并且当它们位于游戏边界旁边时不能移动 .

谢谢!

1 回答

  • 1

    就运动而言,有几种方法可以解决这个问题 . 如果您不关心物体与物理系统的交互,移动对象的最简单方法是使用 transform.Translate ,如下所示:

    void Update () 
    {
        if(Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Translate(-Vector3.right * Time.deltaTime);
        }
        else if(Input.GetKey(KeyCode.RightArrow))
        {
            transform.Translate(Vector3.right * Time.deltaTime);
        }
    }
    

    如果通过"moving the gameObject on the x axis a certain amount"表示您希望对象在按下某个键时瞬间移动一定距离,则可以使用 GetKeyDown 函数并将Vector3乘以距离因子,如下所示:

    int distance = 2;
    
    void Update () 
    {
        if(Input.GetKeyDown(KeyCode.LeftArrow))
        {
            transform.Translate(-Vector3.right * distance);
        }
        else if(Input.GetKeyDown(KeyCode.RightArrow))
        {
            transform.Translate(Vector3.right * distance);
        }
    }
    

    为了将对象保持在某个位置范围内,请使用 Mathf.clamp 函数 . 此方法有三个参数:要钳制的值,允许的最小值以及允许的最大值 .

    因此,例如,如果使用上述代码,您希望将对象的移动限制在介于-1和1之间的所有X值,则应在更新结束时添加以下代码段 .

    Vector3 pos = transform.position;
    pos.x = Mathf.Clamp (pos.x, -1, 1);
    transform.position = pos;
    

    这将钳制游戏对象的x位置,使其保持在-1和1之间 .

    编辑:

    此外,要处理移动,您可以利用统一输入管理器,它已经为您设置了一些良好的默认值 . 例如,要使用箭头键处理左右移动,您可以利用 Input.GetAxis("Horizontal") . 这样做的好处是"Horizontal"轴映射到左右箭头键,以及键盘上的A和D.这意味着您的游戏可以使用几种常见的控件类型轻松运行,您无需对控制方案进行硬编码 .

    如果要控制对象移动的速度,可以将运动Vector3乘以速度因子 . 这是一个实现与上述相同结果的示例,但使用 Input.GetAxis 和速度因子来控制移动速度:

    public float Speed = 2f;    
    
    void Update () 
    {
        Vector3 moveDirection = new Vector3 (Input.GetAxis ("Horizontal"), 0, 0);
        moveDirection *= Speed;
        moveDirection *= Time.deltaTime;
    
        transform.Translate (moveDirection);
    
        Vector3 pos = transform.position;
        pos.x = Mathf.Clamp (pos.x, -1, 1);
        transform.position = pos;
    }
    

相关问题