C# Unity RigidBody2D悬停在某台计算机上不工作

C# Unity RigidBody2D悬停在某台计算机上不工作,c#,unity3d,hover,2d,C#,Unity3d,Hover,2d,您好,我制作2D游戏并实现悬停效果(浮动) 首先,我的rigidbody2D组件选项是图片 我通过按住X按钮使悬停功能工作 下面是我创建的源代码 void Update() { CheckJump(); CheckRavitate(); DoingAction(); } void DoingAction() { if (this.IsStatus(CustomCharacterInfo.CHAR_STATUS.JUMP)) {

您好,我制作2D游戏并实现悬停效果(浮动)

首先,我的rigidbody2D组件选项是图片

我通过按住X按钮使悬停功能工作

下面是我创建的源代码

void Update()
{
    CheckJump();
    CheckRavitate();

    DoingAction();
}

void DoingAction()
{
     if (this.IsStatus(CustomCharacterInfo.CHAR_STATUS.JUMP))
     {
         // Jump
         this.rigid2D.AddForce(transform.up * JUMP_FORCE);
         nowStatus &= ~CustomCharacterInfo.CHAR_STATUS.JUMP;
     }

     if (IsStatus(CustomCharacterInfo.CHAR_STATUS.RAVITATE))
     {
         RaycastHit2D rayHitData = Physics2D.Raycast(
                 new Vector2(transform.position.x, transform.position.y),
                 new Vector2(0, -1.0f),0.5f,
                 1 << GlobalLayerMask.TERRIAN_MASK);
         bool canRavitate = rayHitData.collider ? false : true;
         Debug.DrawRay(transform.position, new Vector2(0, -0.8f),Color.green);
         if (canRavitate)
         {
             float yVel = Physics.gravity.y;
             Debug.Log("Ravitae FORECE " + yVel);

             //Howering
             rigid2D.AddForce(new Vector2(0, -yVel), ForceMode2D.Force);
         }
     }
}

/*
My intention is that when the x key is pressed for more than 0.05 seconds, 
the floating flag is turned on.
When you release x, it will be off.
*/
void CheckRavitate()
{
    if (true)
    {
        if (Input.GetKey(KeyCode.X))
        {
            if (raviValue.canRavitate && Time.time - raviValue.tDown > 0.05f && rigid2D.velocity.y < 0.2f)
            {
                Debug.Log("RAVITATE FLAG ON");
                nowStatus |= CustomCharacterInfo.CHAR_STATUS.RAVITATE;
                rigid2D.velocity = new Vector2(0.0f, 0.0f);
                raviValue.canRavitate = false;
            }
        }

        if (this.IsStatus(CustomCharacterInfo.CHAR_STATUS.RAVITATE) && Input.GetKeyUp(KeyCode.X))
        {
            nowStatus &= ~CustomCharacterInfo.CHAR_STATUS.RAVITATE;
            raviValue.canRavitate = true;
        }
    }
}



void CheckJump()
{

    // Jump Function
    if (Input.GetKeyDown(KeyCode.X) && jumpcount > 0)
    {
        isGrounded = false;
        nowStatus |= CustomCharacterInfo.CHAR_STATUS.JUMP;
        jumpcount--;
        raviValue.tDown = Time.time;
    }
}

public class RavitateFlag
{
    public float tDown;
    public bool canRavitate;
    public RavitateFlag()
    {
        tDown = Time.time;
        canRavitate = true;
    }
}
void Update()
{
CheckJump();
检查重力();
DoingAction();
}
void DoingAction()
{
if(this.IsStatus(CustomCharacterInfo.CHAR\u STATUS.JUMP))
{
//跳跃
this.rigid2D.AddForce(transform.up*JUMP_FORCE);
nowStatus&=~CustomCharacterInfo.CHAR\u STATUS.JUMP;
}
if(IsStatus(CustomCharacterInfo.CHAR\u STATUS.RAVITATE))
{
RaycastHit2D rayHitData=Physics2D.Raycast(
新矢量2(transform.position.x,transform.position.y),
新矢量2(0,-1.0f),0.5f,
1 0.05f和刚性2D.velocity.y<0.2f)
{
Log(“RAVITATE标志打开”);
nowStatus |=CustomCharacterInfo.CHAR_STATUS.RAVITATE;
rigid2D.velocity=新矢量2(0.0f,0.0f);
raviValue.canRavitate=false;
}
}
if(this.IsStatus(CustomCharacterInfo.CHAR\u STATUS.RAVITATE)和&Input.GetKeyUp(KeyCode.X))
{
nowStatus&=~CustomCharacterInfo.CHAR\u STATUS.RAVITATE;
raviValue.canRavitate=true;
}
}
}
void CheckJump()
{
//跳跃函数
如果(输入.GetKeyDown(KeyCode.X)和&jumpcount>0)
{
isfounded=false;
nowStatus |=CustomCharacterInfo.CHAR_STATUS.JUMP;
跳数--;
raviValue.tDown=Time.Time;
}
}
公共级国旗
{
公共交通崩溃;
公共布尔峡谷;
红旗()
{
时差=时间;
峡谷=真实;
}
}
那个结果比那个低

那是动作捕捉

这是正确的动作捕捉

该问题与玩家的计算机不兼容

我不知道为什么会有这种不同。代码相同,日志也相同

如果将一个重力标度更改为1,则浮点函数正常工作

但我认为这不是一个解决办法。此外,将“重力比例”更改为1时,处于正常操作状态的角色将飞到天空


我想是时候调用update函数了,但这也不清楚。

尝试使用
FixedUpdate
为玩家添加力量。你需要使用
time.deltaTime
中的
update
time.fixedDeltaime
中的
FixedUpdate
否则这种行为完全是意料之中的。正如Draco所说,你需要在
FixedUpdate
而不是
Update