Четверг, 25 Апреля 2024, 09:26

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблемы с анимацией (..)
Проблемы с анимацией
Valik_FenkoДата: Среда, 13 Января 2016, 15:50 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Давно уже столкнулся с такой проблемой как анимации.Я хз,мб у меня unity кривой или я),но всё сделано как в примере и анимации не воспроизводятся.

Вот код:
Код
using UnityEngine;
using System.Collections;

public class PlayerControl : MonoBehaviour
{
public CharacterMotor CharMot;
public CharacterController CharCont;
private float VelocityMagnitude;
public float WalkSpeed;
public float RunSpeed;
#region Animations
public AnimationClip Idle;
public AnimationClip Walk;
public AnimationClip Run;
#endregion
public void Start()
{
}
public void FixedUpdate()
{
VelocityMagnitude = CharCont.velocity.magnitude;
SpeedController();
AnimationController();
}
public void SpeedController()
{
if(Input.GetAxis("Horisontal") != 0 || Input.GetAxis("Vertical") != 0)
{
if(Input.GetButton("Run"))
{
CharMot.movement.maxForwardSpeed = RunSpeed;
}
else
{
CharMot.movement.maxForwardSpeed = WalkSpeed;
}
}
}
public void AnimationController()
{
if (Input.GetAxis("Horisontal") != 0 || Input.GetAxis("Vertical") != 0)
{
if(Input.GetButton("Run"))
{
animation.CrossFade(Run.name,0.2f);
animation[Run.name].speed = VelocityMagnitude/RunSpeed*1.2f;
}
else
{
animation.CrossFade(Walk.name,0.2f);
animation[Walk.name].speed = VelocityMagnitude/WalkSpeed*1.2f;
}
}
}
}

Анимации добавлены есть все компоненты.Почему анимации не воспроизводятся?

Пардон народ.Кривой я ..Написал не Horizonal,а Horisontal..


Сообщение отредактировал Valik_Fenko - Среда, 13 Января 2016, 16:06
8Observer8Дата: Среда, 13 Января 2016, 16:56 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
На будущее, нужно выделять код в редакторе сообщений и нажимать кнопку "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..

Вот и хорошо, что разобрались сами. Лучше ещё перед названием темы ныписать [Решено] Это по желанию.


Сообщение отредактировал 8Observer8 - Среда, 13 Января 2016, 16:59
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблемы с анимацией (..)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг