скорость персонажей и анимация

Импорт текстур, моделей, звуков и пр.

скорость персонажей и анимация

Сообщение demozbox 11 дек 2015, 11:54

есть два персонажа с одинаковой скоростью движения (150), но разными анимациями движения- одна чуть медленнее.
использую контроллер анимаций меканим с рут анимацией.
какой подход нужно использовать, чтобы они перемещались по одинаковым отрезкам расстояния за одинаковое время?
полагаю, что медленная анимация должна производиться быстрее, увеличивая свой TIme, но как автоматизировать процесс выравнивания скоростей?
Аватара пользователя
demozbox
UNITрон
 
Сообщения: 170
Зарегистрирован: 20 июн 2014, 07:57

Re: скорость персонажей и анимация

Сообщение IDoNotExist 11 дек 2015, 13:54

Не использовать Root Motion, использовать физические CharController'ы с одинаковыми скоростями и подгонять анимацию под скорость контроллера, а не наоборот.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: скорость персонажей и анимация

Сообщение demozbox 11 дек 2015, 13:59

Слишком здорово в маканиме все реализовал уже. Сделать такое кодом и не знаю как даже
Аватара пользователя
demozbox
UNITрон
 
Сообщения: 170
Зарегистрирован: 20 июн 2014, 07:57

Re: скорость персонажей и анимация

Сообщение IDoNotExist 11 дек 2015, 14:06

demozbox писал(а):Слишком здорово в маканиме все реализовал уже. Сделать такое кодом и не знаю как даже

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class HumanoidNPCAnim : MonoBehaviour {

    public float runFadeSpeed = 5f;

    private Animator anim;

    private Transform trs;

    void Awake()
    {
        anim = GetComponent<Animator>();
        trs = transform;
    }


    void FixedUpdate()
    {

        //----------Movement---------------------
        Vector3 currentPos = trs.position;
        Vector3 velosity = (currentPos - prevPosition) / Time.deltaTime;
        prevPosition = currentPos;


        Vector3 localVelo = trs.InverseTransformDirection(velosity);

        float currentZVelo = anim.GetFloat("forwardMove");
        float currentXVelo = anim.GetFloat("sidewaysMove");

        float forwardMove = Mathf.Lerp(currentZVelo, localVelo.z, runFadeSpeed * Time.deltaTime);
        float sidewaysMove = Mathf.Lerp(currentXVelo, localVelo.x, runFadeSpeed * Time.deltaTime);

        anim.SetFloat("forwardMove", forwardMove);
        anim.SetFloat("sidewaysMove", sidewaysMove);
    }
   
}

 

где "forwardMove" и "sidewaysMove" это переменные 2D Blend Tree в аниматоре, т.е. по оси Y идет "forwardMove" и анимации движения вперед-назад, по оси Х "sidewaysMove" и анимации движения вправо - влево.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: скорость персонажей и анимация

Сообщение demozbox 11 дек 2015, 17:19

IDoNotExist писал(а):
demozbox писал(а):Слишком здорово в маканиме все реализовал уже. Сделать такое кодом и не знаю как даже

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class HumanoidNPCAnim : MonoBehaviour {

    public float runFadeSpeed = 5f;

    private Animator anim;

    private Transform trs;

    void Awake()
    {
        anim = GetComponent<Animator>();
        trs = transform;
    }


    void FixedUpdate()
    {

        //----------Movement---------------------
        Vector3 currentPos = trs.position;
        Vector3 velosity = (currentPos - prevPosition) / Time.deltaTime;
        prevPosition = currentPos;


        Vector3 localVelo = trs.InverseTransformDirection(velosity);

        float currentZVelo = anim.GetFloat("forwardMove");
        float currentXVelo = anim.GetFloat("sidewaysMove");

        float forwardMove = Mathf.Lerp(currentZVelo, localVelo.z, runFadeSpeed * Time.deltaTime);
        float sidewaysMove = Mathf.Lerp(currentXVelo, localVelo.x, runFadeSpeed * Time.deltaTime);

        anim.SetFloat("forwardMove", forwardMove);
        anim.SetFloat("sidewaysMove", sidewaysMove);
    }
   
}

 

где "forwardMove" и "sidewaysMove" это переменные 2D Blend Tree в аниматоре, т.е. по оси Y идет "forwardMove" и анимации движения вперед-назад, по оси Х "sidewaysMove" и анимации движения вправо - влево.

c таким кодом как аниматор контроллер выглядить должен? root motion отрубать надо?

и еще момент в твоем примере- куда добавлять данные с джоя? не вижу у тебя никакого инпута
Аватара пользователя
demozbox
UNITрон
 
Сообщения: 170
Зарегистрирован: 20 июн 2014, 07:57


Вернуться в Медиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1