私はビデオゲームプログラミングを勉強している2年生ですが、私は今この問題を少しでも苦労しています。この問題を解決する方法に関する最善の提案。Unity3D - 方向が変わるのを防ぐ3Dキャラクター
私は、歩く、走る、ジャンプする、ダブルジャンプする、回転してカーソルに向き合うことができる3Dキャラクターを持っています。しかし、私はキャラクターが空中での動きをコントロールできるようなバグに気づいた。例えば
あなたは左Shiftキー + Wを保持することによって実行し、ジャンプした場合、あなたは前進停止して空中に残って機銃掃射を開始することができます。私はキャラクターの動きに関連していない任意のコードを削除した
void Update()
{
// Turns off all animations while in the air
if (isInAir)
{
animator.SetBool("Running", false);
animator.SetBool("Walking", false);
}
if (Input.GetKey(KeyCode.W))
{
// If the character is not in the air then turn on the walk animation
if (!isInAir)
{
animator.SetBool("Walking", true);
}
transform.Translate(Vector3.forward * movementSpeed * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.S))
{
// If the character is not in the air then turn on the walk animation
if (!isInAir)
{
animator.SetBool("Walking", true);
}
transform.Translate(Vector3.back * movementSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))
{
// If the character is not in the air then turn on the walk animation
if (!isInAir)
{
animator.SetBool("Walking", true);
}
transform.Translate(Vector3.left * movementSpeed * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.D))
{
// If the character is not in the air then turn on the walk animation
if (!isInAir)
{
animator.SetBool("Walking", true);
}
transform.Translate(Vector3.right * movementSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.LeftShift))
{
// If the character is not in the air then turn on the run animation
// and change the character's movementSpeed
if (!isInAir)
{
movementSpeed = runSpeed;
animator.SetBool("Running", true);
}
}
else
{
// If the character is not in the air then reset their movement speed
// and turn off the run animation.
if (!isInAir)
{
movementSpeed = walkSpeed;
animator.SetBool("Running", false);
}
}
// When a key is released, turn off the movement animations
// This does not cause an issue since each movement if statement turns the animation back on
if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.D))
{
animator.SetBool("Walking", false);
animator.SetBool("Running", false);
}
#endregion
// Jumping
if (Input.GetButtonDown("Jump") && jumpCounter != 2)
{
jumpCounter++;
isInAir = true;
myRigidbody.AddForce(new Vector3(0, jumpForce));
if (jumpCounter == 1)
{
firstJumpStamp = Time.time;
}
}
if(Physics.Raycast(groundCheckRay, groundCheckRayDistance) && Time.time > firstJumpStamp + 0.5f)
{
jumpCounter = 0;
isInAir = false;
}
}
:
は、ここに私のコードです。
誰も私がこの仕事をするために使用できる方法について私に示唆を与えることができますか?
は私はこの問題、ただの提案を修正するためのコードを求めていないよ...私は自分自身でこれを学ぶ必要があるように私は感じ
、私はちょうど私を指すように誰かを必要とします方向。
コードの一部を理解していない場合は、お気軽にお問い合わせください。私が喜んで行っていることをお見せします。 :)例えば、ある種の行を書くより良い方法を知っているかもしれません。
(私はそれを超える100%のコントロールを持っていないとき、それは難しい動きをするために見つけるので、私はInput.GetAxis
かかわらを使用して回避しようとします)
? –
Input.GetKey(KeyCode.A)とKeyCode Dを確認してから、文字を左右に翻訳するだけです。 コードはS –