【发布时间】:2015-09-30 04:05:27
【问题描述】:
我想知道是否有人知道如何在 c# (Unity) 中执行此操作。每当按下向左或向右箭头时,玩家将在 x 轴上向左/向右移动一定量,并且在靠近游戏边界时无法移动。
谢谢!
【问题讨论】:
-
您可以通过更新玩家的位置来处理击键,并使用某种测试来确定玩家是否靠近游戏边界。
-
到目前为止你尝试过什么代码?
我想知道是否有人知道如何在 c# (Unity) 中执行此操作。每当按下向左或向右箭头时,玩家将在 x 轴上向左/向右移动一定量,并且在靠近游戏边界时无法移动。
谢谢!
【问题讨论】:
就运动而言,有几种方法可以解决这个问题。如果您不关心对象与物理系统的交互,移动对象的最简单方法是使用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;
}
【讨论】: