跳完之后下来快一点
本文关键字:一点 之后 | 更新日期: 2023-09-27 18:26:16
在我的2D游戏中,我需要我的玩家能够在跳跃后拉下。我试着在操纵杆上使用垂直控制,但它只是让我四处漂浮。当我试着跳的时候,我在空中停留的时间太长了。我希望能够把我的球员拉低。如何在没有输入.getkeydown的情况下获得这种移动?这是代码:
public class PlayerControl : MonoBehaviour
{
[HideInInspector]
public bool facingRight = true; // For determining which way the player is currently facing.
[HideInInspector]
public bool jump = false; // Condition for whether the player should jump.
public float moveForce = 365f; // Amount of force added to move the player left and right.
public float maxSpeed = 5f; // The fastest the player can travel in the x axis.
public float jumpForce = 1000f;// Amount of force added when the player jumps.
public string jumpButton = "Jump_P1";
public string horizontalCtrl = "Horizontal_P1";
public string verticalCtrl = "Vertical_P1";
private Transform groundCheck; // A position marking where to check if the player is grounded.
private bool grounded = false; // Whether or not the player is grounded.
void Awake()
{
// Setting up references.
groundCheck = transform.Find("groundCheck");
}
void Update(){
// The player is grounded if a linecast to the groundcheck position hits anything on the ground layer.
grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
// If the jump button is pressed and the player is grounded then the player should jump.
if(Input.GetButtonDown(jumpButton) && grounded)
jump = true;
}
void FixedUpdate ()
{
// Cache the horizontal input.
float h = Input.GetAxis (horizontalCtrl);
float a = Input.GetAxis (verticalCtrl);
// If the player is changing direction (h has a different sign to velocity.x) or hasn't reached maxSpeed yet...
if (h * GetComponent<Rigidbody2D> ().velocity.x < maxSpeed)
// ... add a force to the player.
GetComponent<Rigidbody2D> ().AddForce (Vector2.right * h * moveForce);
// If the player's horizontal velocity is greater than the maxSpeed...
if (Mathf.Abs (GetComponent<Rigidbody2D> ().velocity.x) > maxSpeed)
// ... set the player's velocity to the maxSpeed in the x axis.
GetComponent<Rigidbody2D> ().velocity = new Vector2 (Mathf.Sign (GetComponent<Rigidbody2D> ().velocity.x) * maxSpeed, GetComponent<Rigidbody2D> ().velocity.y);
// If the input is moving the player right and the player is facing left...
if (h > 0 && !facingRight)
// ... flip the player.
Flip ();
// Otherwise if the input is moving the player left and the player is facing right...
else if (h < 0 && facingRight)
// ... flip the player.
Flip ();
// If the player should jump...
if (jump) {
// Add a vertical force to the player.
GetComponent<Rigidbody2D> ().AddForce (new Vector2 (0f, jumpForce));
// Make sure the player can't jump again until the jump conditions from Update are satisfied.
jump = false;
}
}
void Flip ()
{
// Switch the way the player is labelled as facing.
facingRight = !facingRight;
// Multiply the player's x local scale by -1.
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
增加玩家RigidBody2D
的重力,同时增加jumpForce
变量,使其跳得足够高。随着重力和跳跃力的增加,他现在可以跳得尽可能高,然后重力会把他迅速送回地面。