На будущее, нужно выделять код в редакторе сообщений и нажимать кнопку "code". Так читать удобнее:
Код
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
[SerializeField]
float _MovementSpeed = 3f;
Rigidbody2D _body2D = null;
Animator _animator;
bool facingRight = true;
enum States
{
IdleRight, MoveRight, MoveRightDown, MoveLeftDown, MoveLeft, IdleLeft, MoveLeftUp, MoveRightUp
}
void Awake()
{
_body2D = GetComponent<Rigidbody2D>();
_animator = GetComponent<Animator>();
}
void FixedUpdate()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
SetAnimation(horizontal, vertical);
HandleMovement(horizontal);
}
void HandleMovement(float horizontal)
{
_body2D.velocity = new Vector2(horizontal * _MovementSpeed, _body2D.velocity.y);
}
void SetAnimation(float horizontal, float vertical)
{
if (facingRight && horizontal > -0.01f && horizontal < 0.01f && vertical > -0.01f && vertical < 0.01f)
{
_animator.SetInteger("state", (int)States.IdleRight);
}
else if (horizontal > 0.01f && vertical > -0.01f && vertical < 0.01f)
{
_animator.SetInteger("state", (int)States.MoveRight);
facingRight = true;
}
else if (horizontal > 0.01f && vertical < -0.01f)
{
_animator.SetInteger("state", (int)States.MoveRightDown);
facingRight = true;
}
else if (horizontal > 0.01f && vertical > 0.01f)
{
_animator.SetInteger("state", (int)States.MoveRightUp);
facingRight = true;
}
else if (!facingRight && horizontal > -0.01f && horizontal < 0.01f && vertical > -0.01f && vertical < 0.01f)
{
_animator.SetInteger("state", (int)States.IdleLeft);
}
else if (horizontal < -0.01f && vertical > -0.01f && vertical < 0.01f)
{
_animator.SetInteger("state", (int)States.MoveLeft);
facingRight = false;
}
else if (horizontal < -0.01f && vertical < -0.01f)
{
_animator.SetInteger("state", (int)States.MoveLeftDown);
facingRight = false;
}
else if (horizontal < -0.01f && vertical > 0.01f)
{
_animator.SetInteger("state", (int)States.MoveLeftUp);
facingRight = false;
}
}
}
Цитата Valik_Fenko (
)
if(Input.GetAxis("Horisontal") != 0 || Input.GetAxis("Vertical") != 0)
С числами float лучше избегать прямого сравнения. Хотя может с Input.GetAxis так можно, но я избегаю. А то были случаи, когда в каком-нибудь далёком разряде была цифра.
Цитата Valik_Fenko (
)
Пардон народ.Кривой я ..Написал не Horizonal,а Horisontal..
Вот и хорошо, что разобрались сами. Лучше ещё перед названием темы ныписать [Решено] Это по желанию.