Есть скрипт игрока. Игрок ходит влево-вправо и прыгает. Почему когда я прыгаю и в прыжке нажимаю влево или вправо, он не падает а двигается влево или вправо в воздухе?
Синтаксис:
Используется csharp
public class PlayerScript : MonoBehaviour {
public float groundSpeed = 20;
public float airSpeed = 5;
public float jumpSpeed = 300;
public float maxSpeed = 4;
public bool limitSpeed = true;
public float onGroundDrag = 1;
public float inAirDrag = 0.1f;
private bool onGround;
private bool isJump;
void Update ()
{
if(Input.GetKeyDown(KeyCode.Space))
Jump();
}
void FixedUpdate ()
{
rigidbody.AddForce(Input.GetAxisRaw("Horizontal") * transform.right * ((onGround) ? groundSpeed : airSpeed))
if(isJump)
{
rigidbody.AddForce(transform.up * jumpSpeed);
onGround = false;
isJump = false;
rigidbody.drag = inAirDrag;
}
}
void Jump()
{
if(onGround)
isJump = true;
}
void LateUpdate ()
{
if(limitSpeed && Mathf.Abs(rigidbody.velocity.x) > maxSpeed)
rigidbody.velocity = new Vector3(Mathf.Sign(rigidbody.velocity.x) * maxSpeed, 0, 0);
}
void OnCollisionEnter ( Collision collision )
{
float collisionAngle = Vector3.Angle(collision.contacts[0].normal, Vector3.up);
if(collisionAngle < 40.0f)
{
onGround = true; //Player is grounded
rigidbody.drag = onGroundDrag; //Restore original drag value
}
}
void OnCollisionStay ( Collision collision )
{
float collisionAngle= Vector3.Angle(collision.contacts[0].normal, Vector3.up);
if(collisionAngle < 40.0f)
{
onGround = true; //Player is grounded
rigidbody.drag = onGroundDrag; //Restore original drag value
}
}
void OnCollisionExit ( Collision collision )
{
onGround = false;
rigidbody.drag = inAirDrag;
}
}
public float groundSpeed = 20;
public float airSpeed = 5;
public float jumpSpeed = 300;
public float maxSpeed = 4;
public bool limitSpeed = true;
public float onGroundDrag = 1;
public float inAirDrag = 0.1f;
private bool onGround;
private bool isJump;
void Update ()
{
if(Input.GetKeyDown(KeyCode.Space))
Jump();
}
void FixedUpdate ()
{
rigidbody.AddForce(Input.GetAxisRaw("Horizontal") * transform.right * ((onGround) ? groundSpeed : airSpeed))
if(isJump)
{
rigidbody.AddForce(transform.up * jumpSpeed);
onGround = false;
isJump = false;
rigidbody.drag = inAirDrag;
}
}
void Jump()
{
if(onGround)
isJump = true;
}
void LateUpdate ()
{
if(limitSpeed && Mathf.Abs(rigidbody.velocity.x) > maxSpeed)
rigidbody.velocity = new Vector3(Mathf.Sign(rigidbody.velocity.x) * maxSpeed, 0, 0);
}
void OnCollisionEnter ( Collision collision )
{
float collisionAngle = Vector3.Angle(collision.contacts[0].normal, Vector3.up);
if(collisionAngle < 40.0f)
{
onGround = true; //Player is grounded
rigidbody.drag = onGroundDrag; //Restore original drag value
}
}
void OnCollisionStay ( Collision collision )
{
float collisionAngle= Vector3.Angle(collision.contacts[0].normal, Vector3.up);
if(collisionAngle < 40.0f)
{
onGround = true; //Player is grounded
rigidbody.drag = onGroundDrag; //Restore original drag value
}
}
void OnCollisionExit ( Collision collision )
{
onGround = false;
rigidbody.drag = inAirDrag;
}
}