私はUnity3dで無限のランナーゲームを開発しています。私はジャンプするキャラクターを作りました。そうすることで、ユニティのカーブフィーチャーを使用して、ジャンプ中にキャラクターの高さと中心を変更しました。Unityでキャラクターがジャンプする際の重力を無効にする方法は?
私はこの問題を遭遇しました。ジャンプボタンを押すと、上向きの推力や物理がないようにアニメーションクリップを実行します。単に、コライダーの高さと中心点を減らしています。しかし、そうすることで、最終的に私の性格が落ちるので、私は重力を実装しているので、私の性格は下がる傾向があります。
私が重力をかかえたくないのは、私がジャンプしているとき(ジャンプアニメーションが実行中のとき)だけです。どうすればいいの?または、このエラーを解決する方法に関するアドバイス?
以下は私がジャンプのために実装したコードです。
private float verticalVelocity;
public float gravity = 150.0f;
private bool grounded = true;
private bool jump = false;
private float currentY;
private Animator anim;
private AnimatorStateInfo currentBaseState;
private static int fallState = Animator.StringToHash("Base Layer.Fall");
private static int rollState = Animator.StringToHash("Base Layer.Roll");
private static int locoState = Animator.StringToHash("Base Layer.Run");
private static int jumpState = Animator.StringToHash("Base Layer.Jump");
void Update()
{
currentY = verticalVelocity * Time.fixedDeltaTime;
currentBaseState = anim.GetCurrentAnimatorStateInfo(0);
grounded = true;
if (isGround() && currentY < 0f)
{
verticalVelocity = 0f;
currentY = 0f;
grounded = true;
jump = false;
fall = false;
if (currentBaseState.fullPathHash == locoState)
{
if (Input.GetButtonDown("Jump") && grounded && currentY == 0f)
{
grounded = false;
jump = true;
verticalVelocity = 0f; //I have tried here to stop gravity but don't work
follower.motion.offset = new Vector2(follower.motion.offset.x, verticalVelocity);
}
}
else if (currentBaseState.fullPathHash == jumpState)
{
Debug.Log("Jumping state");
collider.height = anim.GetFloat("ColliderHeight");
collider.center = new Vector3(0f, anim.GetFloat("ColliderY"), 0f);
}
}
else if (jump)
{
follower.motion.offset = new Vector2(follower.motion.offset.x, 0.0f); //I have tried here to stop gravity but don't work
}
else
{
grounded = false;
jump = false;
fall = true;
}
anim.SetBool("Grounded", grounded);
anim.SetBool("Jump", jump);
anim.SetBool("Fall", fall);
if (fall)
{
if (currentBaseState.fullPathHash == fallState)
{
Debug.Log("falling");
collider.height = anim.GetFloat("ColliderHeight");
collider.center = new Vector3(0f, anim.GetFloat("ColliderY"), 0f);
}
}
else
{
if (currentBaseState.fullPathHash == rollState)
{
Debug.Log("Roll");
collider.height = anim.GetFloat("ColliderHeight");
collider.center = new Vector3(0f, anim.GetFloat("ColliderY"), 0f);
}
}
MoveLeftRight();
verticalVelocity -= gravity * Time.fixedDeltaTime;
follower.motion.offset = new Vector2(follower.motion.offset.x, currentY);
Z - Forward and Backward
follower.followSpeed = speed;
}
ありがとうこれはたくさん説明します。私は何ができるかを見ていきます。ありがとう@イグナシオ・アローレ!. –