RigidBody2D velocity.y Персонажа меняется с -3.949388e-09 на 3.949388e-09. Даже когда он стоит на земле, не пойму почему. Убрал Run() с FixedUpdate, всё норм стало, только после приземления персонажа пару раз меняется, и на 0 стаёт. Код прикрепил:
Codeusing UnityEngine;
using System.Collections;
public class CharacterControllerScript : MonoBehaviour
{
public float maxSpeed = 10f;
public float maxJump = 50f;
private bool isFacingRight = true;
[SerializeField]
private bool isGrounded;
private Animator anim;
private Rigidbody2D characterRigidBody;
private void Start()
{
characterRigidBody = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
}
private void FixedUpdate()
{
Run();
Jump();
CharacterFlyOrFall();
}
private void Run()
{
float move = Input.GetAxis("Horizontal");
anim.SetFloat("xSpeed", Mathf.Abs(1));
characterRigidBody.velocity = new Vector2(move * maxSpeed, characterRigidBody.velocity.y);
if (move > 0 && !isFacingRight)
FlipCharacter();
else if (move < 0 && isFacingRight)
FlipCharacter();
}
private void CharacterFlyOrFall()
{
if (!isGrounded)
{
anim.SetFloat("ySpeed", characterRigidBody.velocity.y);
}
else
{
anim.SetFloat("ySpeed", Mathf.Abs(0));
}
}
private void Jump()
{
if (isGrounded && Input.GetKey(KeyCode.UpArrow))
{
characterRigidBody.AddForce(new Vector2(0,maxJump));
isGrounded = false;
}
}
private void FlipCharacter()
{
isFacingRight = !isFacingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.layer == LayerMask.NameToLayer("Ground"))
{
isGrounded = true;
}
}
}
Кстати, если код - кал, то подкажите почему и как надо, буду рад)