当一个立方体在移动时,我如何使它能够';不要在空中跳
本文关键字:何使它 在空中 一个 立方体 移动 | 更新日期: 2023-09-27 18:00:03
我在场景中有一个立方体,当你按下其中一个箭头键时,它会向上并沿箭头键的方向移动。当立方体已经在空中时单击时,它会在返回地面之前再次跳跃。如何使立方体在回到地面之前不能再次跳跃?这是我迄今为止的代码:
public class MovePlayer : MonoBehaviour {
Vector3 endPos;
Vector3 startPos;
bool jumping = false;
// Update is called once per frame
void Update () {
endPos = gameObject.transform.position;
startPos = gameObject.transform.position;
if (Input.GetButtonDown ("up") && gameObject.transform.position == endPos) {
transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
transform.Translate(Vector3.forward * 50 * Time.deltaTime, Space.World);
}
else if (Input.GetButtonDown ("down") && gameObject.transform.position == endPos) {
transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
transform.Translate(-Vector3.forward * 50 * Time.deltaTime, Space.World);
}
else if (Input.GetButtonDown ("left") && gameObject.transform.position == endPos) {
transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
transform.Translate(Vector3.left * 50 * Time.deltaTime, Space.World);
}
else if (Input.GetButtonDown ("right") && gameObject.transform.position == endPos) {
transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
transform.Translate(Vector3.right * 50 * Time.deltaTime, Space.World);
}
}
}
如果玩家与地面接触/碰撞,则将布尔jumping
设为false。如果不是,那就让它成为现实。然后添加并用跳转输入条件检查它,这样true不会让跳转,false会让跳转。
为了探测地面,请使用以下代码。根据需要标记地面。玩家和地面都需要collider
组件,其中至少一个需要连接Rigidbody
组件。
void OnCollisionEnter (Collision other)
{
if (other.collider.tag == "ground_tag")
{
Jumping = false;
}
}
void OnCollisionExit (Collision other)
{
if (other.collider.tag == "ground_tag")
{
Jumping = true;
}
}
可以使用从角色脚部到地面的光线投射。如果射线击中了什么东西,你就在地上。
var origin = transform.position;
var onGround = Raycast(origin, Vector3.down, 1f);
请注意,您需要从脚投射光线,因此可能需要更改origin
值。
这种方法很好,因为您可以使用层遮罩和许多其他选项。