Страница 1 из 1

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

СообщениеДобавлено: 11 дек 2015, 11:54
demozbox
есть два персонажа с одинаковой скоростью движения (150), но разными анимациями движения- одна чуть медленнее.
использую контроллер анимаций меканим с рут анимацией.
какой подход нужно использовать, чтобы они перемещались по одинаковым отрезкам расстояния за одинаковое время?
полагаю, что медленная анимация должна производиться быстрее, увеличивая свой TIme, но как автоматизировать процесс выравнивания скоростей?

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

СообщениеДобавлено: 11 дек 2015, 13:54
IDoNotExist
Не использовать Root Motion, использовать физические CharController'ы с одинаковыми скоростями и подгонять анимацию под скорость контроллера, а не наоборот.

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

СообщениеДобавлено: 11 дек 2015, 13:59
demozbox
Слишком здорово в маканиме все реализовал уже. Сделать такое кодом и не знаю как даже

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

СообщениеДобавлено: 11 дек 2015, 14:06
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" и анимации движения вправо - влево.

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

СообщениеДобавлено: 11 дек 2015, 17:19
demozbox
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 отрубать надо?

и еще момент в твоем примере- куда добавлять данные с джоя? не вижу у тебя никакого инпута