c# - 我想成功,所以当我在空中右键单击跳跃一次时,我不能再这样做了
问题描述
所以我有这个问题,我想解决这个问题,所以当我在空中右击一次(作为额外的跳跃)(在用空间跳跃之后)我不能再做一次。
这是我目前的运动脚本:
public class Move2D : MonoBehaviour
{
public float moveSpeed = 5f;
public bool isGrounded = false;
void Update()
{
Jump();
Vector3 movement = new Vector3(Input.GetAxis("Horizontal"), 0f, 0f);
transform.position += movement * Time.deltaTime * moveSpeed;
}
void Jump()
{
if (Input.GetButtonDown("Jump") && isGrounded == true)
{
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, 8f), ForceMode2D.Impulse);
}
if (Input.GetMouseButtonDown(1) && isGrounded == false)
{
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, 4f), ForceMode2D.Impulse);
}
}
}
这是我当前的“接地”脚本
public class Grounded : MonoBehaviour
{
GameObject Player;
// Start is called before the first frame update
void Start()
{
Player = gameObject.transform.parent.gameObject;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.tag == "Ground")
{
Player.GetComponent<Move2D>().isGrounded = true;
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.collider.tag == "Ground")
{
Player.GetComponent<Move2D>().isGrounded = false;
}
}
}
我在 youtube 上遵循了这个脚本。如果我需要为以后的帖子提供更多信息,请回答。我对编码很陌生。
解决方案
因此,您已经必须isGrounded
防止双击跳转键(我想您说过空格),并且该逻辑足够简单,可以扩展以防止双击:
- 添加一个新的全局变量
isBoosted
(在 下添加isGrounded
); - 当你跳跃时,以及为你的暴徒增加一些动力,也设置
isBoosted
为 false; - 当您右键单击以进行第二次跳转时,检查是否
isBoosted
为假; - 在右键单击的代码中,设置
isBoosted
为 true,并为您的模型添加更多动力。
第一次提升时,您将设置isBoosted
为 true,第二次尝试提升时将失败,因为测试为isBoosted
false 将失败。当你撞到地面并使用空间再次跳跃时,它会重置,因此每次“重置”时都会让你获得新的提升。
这是“最好”的方式吗?可能不是,但它与你已经拥有的一致......
推荐阅读
- mongodb - 如何将具有前导零值的字段的 CSV 文件导入 MongoDB?
- javascript - useEffect 没有得到正确的值
- json - 有没有办法在 colab 中从谷歌驱动器打开 kaggle json 文件?
- python-3.x - 在 Macbook 上安装 TA-Lib
- python - 如何更改问题解决格式以使用 lambda 和/或 map (Python)
- python - 使用带有 numpy 的 if else 语句进行算术计算
- reactjs - React + Firebase 身份验证:在不更改当前登录用户的情况下创建新用户
- amazon-web-services - 雅典娜返回返回零结果
- javascript - Typescript过滤器中回调函数的类型是什么?
- laravel - Laravel Excel:错误资源解释为文档但使用 MIME 传输