@DALVROT

Unity2d velocity персонажа постоянно меняется, почему?

RigidBody2D velocity.y Персонажа меняется с -3.949388e-09 на 3.949388e-09. Даже когда он стоит на земле, не пойму почему. Убрал Run() с FixedUpdate, всё норм стало, только после приземления персонажа пару раз меняется, и на 0 стаёт. Код прикрепил:
Code
using 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;
        }
    }
}

Кстати, если код - кал, то подкажите почему и как надо, буду рад)
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
MANAB
@MANAB
Разрабатываю на C#: Web, Desktop, Gamedev
Значение +-3.949388e-09 очень мало. Обычно такие артефакты возникают из-за операций с float и это связано с битовым представлением и реализацией float. Если это не влияет на игровую механику - я бы забил.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы