ユニティーエンジネのプレイヤーコントロールスクリプト(C#)に少し問題があります。私は、プレイヤーの基本的な動きで次のスクリプトを作成しました。問題は、プレイヤーがjumpステートメント(デバッグログに出力)を入力できることです。 Debug Log しかし、動作しません。キャラクターはまだ地上にいる。 ジャンプ機能は、プレーヤーが地面に接地しているときに有効になり、ダブルジャンプしませんでした。 私の質問は、 "コードミス"か、私には見えない構成上の問題があるかどうかです。キャラクターはUnity2Dでジャンプしませんが、ジャンプステートメントを入力しました
ご協力いただきありがとうございます。
using UnityEngine;
using System.Collections;
public class PlayerControl : MonoBehaviour
{
// public variables
public float speed = 3f;
public float jumpHeight = 5f;
// private variables
Vector3 movement;
Animator anim;
Rigidbody2D playerRigidbody;
// variables for the ground check
public Transform groundCheck;
public float groundCheckRadius;
public LayerMask whatIsGround;
private bool grounded;
private bool doubleJump;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
// Proves if the player is on the ground and activate the double jump function
if (grounded)
{
doubleJump = false;
}
// First line of proving the jump
if (Input.GetMouseButtonDown(0) && grounded)
{
Debug.Log("Jump if entered");
Jump();
}
if (Input.GetMouseButtonDown(0) && !doubleJump && !grounded)
{
Debug.Log("double Jump");
Jump();
doubleJump = true;
}
// Flipping the Player when he runs back
if (Input.GetAxis("Horizontal") < 0)
{
playerRigidbody.transform.localScale = new Vector2(-1.7f, 1.7f);
}
else
{
playerRigidbody.transform.localScale = new Vector2(1.7f, 1.7f);
}
}
void Awake()
{
// References setting up
playerRigidbody = this.GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
}
void FixedUpdate()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
// simple Movement without a speed control
Move(horizontal, vertical);
Animating(horizontal, vertical);
// Section for ground detection
grounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);
// Set the parameter for the jump animation false or true
anim.SetBool("Grounded", grounded);
}
void Move(float horizontal, float vertical)
{
movement.Set(horizontal, 0f, vertical);
movement = movement.normalized * speed * Time.deltaTime;
playerRigidbody.MovePosition(transform.position + movement);
}
void Jump()
{
playerRigidbody.AddForce(Vector3.up * jumpHeight);
// playerRigidbody.AddForce(new Vector2(0f, jumpHeight), ForceMode2D.Impulse);
Debug.Log("Jump function");
}
void Animating(float h, float v)
{
bool walking = h != 0f || v != 0f;
anim.SetBool("IsWalking", walking);
}
}
あなたのオブジェクトにはジャンプのアニメーションが有効になっていますか? –
ご意見ありがとうございます。 問題はアニメーションではない、キャラクターは位置を変えなかった(ジャンプ)。アニメーションが動かないときには対処できますが、ポジションを変えないという問題はありません。 しかし、ここに別の奇妙なことがあります。私はこの小さなコードを 'void update()'関数に入れます: 'if(Input.GetKeyDown(KeyCode.Space)) playerRigidbody.AddForce(Vector2.up * jumpHeight);'これも機能しません。 – t3chnico
別のアニメーションの動きをスペースで入れたら、それは機能しますか? また、私の主人公のオブジェクトでは、3人目のコントローラーを使用し、スペースを使ってジャンプすることができました。 –