C# Unity RigidBody2D悬停在某台计算机上不工作
您好,我制作2D游戏并实现悬停效果(浮动) 首先,我的rigidbody2D组件选项是图片 我通过按住X按钮使悬停功能工作 下面是我创建的源代码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)) {
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