我想知道是否有人知道如何在c#(Unity)中这样做 . 每当按下向左或向右箭头时,玩家将在x轴上向左/向右移动一定量,并且当它们位于游戏边界旁边时不能移动 .
谢谢!
就运动而言,有几种方法可以解决这个问题 . 如果您不关心物体与物理系统的交互,移动对象的最简单方法是使用 transform.Translate ,如下所示:
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乘以距离因子,如下所示:
GetKeyDown
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 函数 . 此方法有三个参数:要钳制的值,允许的最小值以及允许的最大值 .
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.这意味着您的游戏可以使用几种常见的控件类型轻松运行,您无需对控制方案进行硬编码 .
Input.GetAxis("Horizontal")
如果要控制对象移动的速度,可以将运动Vector3乘以速度因子 . 这是一个实现与上述相同结果的示例,但使用 Input.GetAxis 和速度因子来控制移动速度:
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; }
1 回答
就运动而言,有几种方法可以解决这个问题 . 如果您不关心物体与物理系统的交互,移动对象的最简单方法是使用
transform.Translate
,如下所示:如果通过"moving the gameObject on the x axis a certain amount"表示您希望对象在按下某个键时瞬间移动一定距离,则可以使用
GetKeyDown
函数并将Vector3乘以距离因子,如下所示:为了将对象保持在某个位置范围内,请使用
Mathf.clamp
函数 . 此方法有三个参数:要钳制的值,允许的最小值以及允许的最大值 .因此,例如,如果使用上述代码,您希望将对象的移动限制在介于-1和1之间的所有X值,则应在更新结束时添加以下代码段 .
这将钳制游戏对象的x位置,使其保持在-1和1之间 .
编辑:
此外,要处理移动,您可以利用统一输入管理器,它已经为您设置了一些良好的默认值 . 例如,要使用箭头键处理左右移动,您可以利用
Input.GetAxis("Horizontal")
. 这样做的好处是"Horizontal"轴映射到左右箭头键,以及键盘上的A和D.这意味着您的游戏可以使用几种常见的控件类型轻松运行,您无需对控制方案进行硬编码 .如果要控制对象移动的速度,可以将运动Vector3乘以速度因子 . 这是一个实现与上述相同结果的示例,但使用
Input.GetAxis
和速度因子来控制移动速度: