C# 使用Vector3.up让玩家进行一次以上的跳跃

C# 使用Vector3.up让玩家进行一次以上的跳跃,c#,unity3d,C#,Unity3d,嗨,我是c#的新手,我刚刚编写了一个允许玩家跳跃的代码,它工作得很好,但问题是如果我点击空格键两次,它将进行双重跳跃,如果我继续这样做,它将飞行。。。。我只想要一次1跳,如果球员再次触地,就不能再跳两次。。。 我尝试的是改变与向量相乘的数字,直到跳转并生成一个 public float jump = 5f; 这里是我的源代码,希望你理解这个问题并帮助我 using System.Collections; using System.Collections.Generic; using Unity

嗨,我是c#的新手,我刚刚编写了一个允许玩家跳跃的代码,它工作得很好,但问题是如果我点击空格键两次,它将进行双重跳跃,如果我继续这样做,它将飞行。。。。我只想要一次1跳,如果球员再次触地,就不能再跳两次。。。 我尝试的是改变与向量相乘的数字,直到跳转并生成一个

public float jump = 5f;
这里是我的源代码,希望你理解这个问题并帮助我

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class PlayerMovement : MonoBehaviour
{
    public float speed = 5f;
    public float speed1;
    public float jump = 5f;


    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {

        transform.Translate(Vector3.forward * speed1);

        if (Input.GetKeyDown(KeyCode.A))
        {
            transform.Translate(-speed * Time.deltaTime, 0, 0);
        }

        if (Input.GetKeyDown(KeyCode.D))
        {
            transform.Translate(speed * Time.deltaTime, 0, 0);
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            GetComponent<Rigidbody>().AddForce(Vector3.up * jump, ForceMode.VelocityChange);
        }
    }
}
 
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
[RequiredComponent(类型)(刚体))]
公共类玩家运动:单一行为
{
公共浮子速度=5f;
公众浮标速度1;
公共浮动跳跃=5f;
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
transform.Translate(Vector3.forward*speed1);
if(Input.GetKeyDown(KeyCode.A))
{
transform.Translate(-speed*Time.deltaTime,0,0);
}
if(Input.GetKeyDown(KeyCode.D))
{
transform.Translate(速度*Time.deltaTime,0,0);
}
if(Input.GetKeyDown(KeyCode.Space))
{
GetComponent().AddForce(Vector3.up*跳跃,ForceMode.VelocityChange);
}
}
}

您可以创建一个标志
WASGORDED
,跳转后将其设置为false。玩家只能在
被禁地==true
时跳跃。 您还可以向地面添加碰撞器。一旦玩家触地,您将
wasgording
标志重置为true

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
[RequiredComponent(类型)(刚体))]
公共类玩家运动:单一行为
{
公共浮子速度=5f;
公众浮标速度1;
公共浮动跳跃=5f;
private bool wasGrounded=true;
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
transform.Translate(Vector3.forward*speed1);
if(Input.GetKeyDown(KeyCode.A))
{
transform.Translate(-speed*Time.deltaTime,0,0);
}
if(Input.GetKeyDown(KeyCode.D))
{
transform.Translate(速度*Time.deltaTime,0,0);
}
if(Input.GetKeyDown(KeyCode.Space)和&wasgunded)
{
wascounded=false;
GetComponent().AddForce(Vector3.up*跳跃,ForceMode.VelocityChange);
}
}
无效碰撞中心(碰撞其他)
{
//更改为字符串,将其与地面游戏对象的标记进行比较。
如果(other.gameObject.tag==“地面”)
{
wascounded=true;
}
}
}

确保地面对撞机上的“IsTrigger”设置为false。

等待钥匙向上,然后再让另一个钥匙向下。请问这是什么意思explain@jdweng只是等待一个关键点并不能解决任何问题。玩家仍然可以多次按下跳转按钮。我想这里的方法是检查球员是否在跳跃后落地。如果我将地面设置为IsTrigger,球员将从地上摔下来,还有一件事!如果我想允许IsTrigger,则在我将ConvText设置为true之前,无法按下它。请回答这个问题,我会接受你的问题。作为正确的答案,好的,我修正了。通过使另一个将istrigger设置为false的平面位于istrigger设置为true的平面下方。使用-0.1 Y轴,您不需要有另一个平面。将IsTrigger设置为false,并使用
OnCollisionCenter的
方法安装。我改变了答案,你可以在那里看到调整后的代码。