Strannik писал(а):Для простых ситуаций есть http://docs.unity3d.com/ScriptReference ... eInfo.html
Ранее я для этого систему написал, которая считывает теги и имена стейтов контроллера в префаб, и в игре можно
было получить любые нужные данные (имя текущего стейта, имя в который осуществляется переход и т.п.).
Для unity 5 мне пришла идея как можно попроще сделать.
Появился компонент для стейт-машины StateMachineBehaviour. Его можно вешать как на стейт-машину, так и на отдельные стейты.
Пишем класс для стейт-машины:Синтаксис:Используется csharppublic class MyMecanimSMController : StateMachineBehaviour
{
public MecanimStateData CurrentState;
public void OnMyStateEnterCompleted()
{
if (CurrentState!= null)
Debug.Log(CurrentState.Name);
}
}
Пишем класс для стейта:Синтаксис:Используется csharppublic class MecanimStateData : StateMachineBehaviour
{
public string Tag;
public string Name;
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
var fsm = animator.GetBehaviour<MyMecanimSMController>();
fsm.CurrentStateData = this;
}
public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
var fms = animator.GetBehaviour<MyMecanimSMController>();
fms.OnMyStateEnterCompleted();
}
}
Вешаем на каждый стейт и указываем Tag и Name.
Теперь можно через аниматор получить в коде нужные данные.Синтаксис:Используется csharpvar fsm=GetComponent<Animator>().GetBehaviour<MyMecanimSMController >();
var stateName = fsm.CurrentState.name;
Также можно наоборот - в класс для стейт-машины передать ссылку на объект. Тогда можно будет с ним работать в StateMachineBehaviour компонентах.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24