【问题标题】:Moving the gameObject on the x axis a certain amount when left key is pressed, then stopping at the game border按住左键时将游戏对象在 x 轴上移动一定量,然后在游戏边界处停止
【发布时间】:2015-09-30 04:05:27
【问题描述】:

我想知道是否有人知道如何在 c# (Unity) 中执行此操作。每当按下向左或向右箭头时,玩家将在 x 轴上向左/向右移动一定量,并且在靠近游戏边界时无法移动。

谢谢!

【问题讨论】:

  • 您可以通过更新玩家的位置来处理击键,并使用某种测试来确定玩家是否靠近游戏边界。
  • 到目前为止你尝试过什么代码?

标签: c# unity3d


【解决方案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);
    }
}

如果“将游戏对象在 x 轴上移动一定量”是指您希望对象在按下键时立即移动一定距离,您可以使用 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 值,您可以在更新结束时添加以下代码 sn-p。

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

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

编辑:

此外,要处理移动,您可以利用已经为您设置了一些良好默认设置的统一输入管理器。例如,要使用箭头键处理左右移动,您可以利用Input.GetAxis("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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多