@WalloutDay

Не работает переход анимации на 2d платформере под android, unity 5?

Помогите пожалуйста решитььпробдему. персонаж ходит по кнопкам. Но вот проблема=( Не работает анимация.

anim.SetFloat ("Speed", Mathf.Abs (move));

методом удаления различных команд, понял, что именно эта строка отвечает за изменение анимации. Вставил её в скрипт =>

using UnityEngine;
using System.Collections;

public class CharacterController1 : MonoBehaviour {
public Rigidbody2D rb2d;
public float speed;
public int move;
public bool groundCheck;
public bool facingRight = true;

Animator anim; 

void Start () 
{
anim = GetComponent ();
rb2d = GetComponent();
}


void FixedUpdate () 
{
if ((move < 0) && (facingRight))
{
Flip();
}

if ((move > 0) && (!facingRight))
{
Flip();
}
groundCheck = true;
}

public void Move(int InputAxis)
{
float move = Input.GetAxis ("Horizontal");
anim.SetFloat ("Speed", Mathf.Abs (move)); <=========
move = InputAxis;
GetComponent().velocity = new Vector2 (move * speed, GetComponent().velocity.y);

if ((move < 0) && (facingRight))
{
Flip();
}

if ((move > 0) && (!facingRight))
{
Flip();
}
}



void Flip()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}


}

но попрежнему что со строкой, что без строки, анимация не проигрывается!(

пожалуйста помогите найти ошибку... может что-то неправильно написал?
  • Вопрос задан
  • 1286 просмотров
Решения вопроса 1
kreo_OL
@kreo_OL
Медузко -_-
Закрывайте или удаляйте пожалуйста свои вопросы по получение ответа или по сроку давности

Очень знакомый код. Советую еще раз пересмотреть туториал из которого вы это брали.
А по делу.
Вам нужно создать в аниматоре флоат переменную Speed, далее в аниматоре настроить переход анимации из состояния покоя в состояние бега. Создаете стрелки(гуглите) на стрелке перехода в состояние бега в Conditions добавляете нашу переменную Speed и пишите что она должна быть Больше 0.01
А на стрелочке которая возвращает из состояния бега в состояние покоя проделываете тоже самое но Speed должна быть Меньше 0.01

Вот правильный код:
Причем правильный во всех отношениях.
using UnityEngine;
using System.Collections;

public class CharacterController1 : MonoBehaviour
{
    public Rigidbody2D rb2d;
    public float speed;
    public int move;
    public bool facingRight = true;

    private Animator anim;

    void Start()
    {
        anim = GetComponent<Animator> ();
        rb2d = GetComponent<Rigidbody2D> ();
    }

    void FixedUpdate()
    {
        rb2d.velocity = new Vector2(move * speed, rb2d.velocity.y);
    }

    public void Update()
    {
        float move = Input.GetAxis("Horizontal");

        anim.SetFloat("Speed", Mathf.Abs(move));

        if ((move < 0) && (facingRight))
        {
            Flip();
        }

        if ((move > 0) && (!facingRight))
        {
            Flip();
        }
    }

    void Flip()
    {
        facingRight = !facingRight;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vovo801
Freelance Unity3d/C# Developer
Первое что попалось на глаза - должно быть:
anim = GetComponent ();
rb2d = GetComponent();

Второе: есть ли вообще аниматор и анимации на этом объекте? Может аниматор не на этом объекте, а на его child object? Чтобы проверить нашло ли аниматор можно кликнуть правой кнопкой на названии вкладки Инспектор и перевести в режим Debug. Тогда будут отображаться все переменные Вашего CharacterController, включая аниматор и там посмотреть, нашла Unity его или нет.

Есть еще много моментов, которые могут повлиять.
методом удаления различных команд, понял, что именно эта строка отвечает за изменение анимации. Вставил её в скрипт =>

А как Вы поняли что эта строка влияет если анимация не заработала? Какие то другие признаки, ошибки в консоли были?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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