Animator Unity. Не присваивается значение полям
После переданного значения CastTime в StartAnimation, оно не присваивается в поле _castTime. Это работает, потому что тестили на других персонажах, но именно на одном оно почему-то слетает.
public class WaitingBehaviour : StateMachineBehaviour
{
private Animator _currentAnimator;
private float _castTime = -1.0f;
private bool _isStarted;
private bool _isStarted = false;
private float _waitingTime = 0.0f;
private float _nextClipLength;
private int _attackHash = Animator.StringToHash("Attack");
private int _attackTimeHash = Animator.StringToHash("Attacktime");
private int _weaponTypeHash = Animator.StringToHash("WeaponType");
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo,
int layerIndex)
{
//Странный баг с непередаваемым значением castTime
//(Приравнивается в 65 строке)
Debug.Log("Started "+ _castTime);
_currentAnimator = animator;
if (_castTime > 0)
{
_nextClipLength = animator.GetNextAnimatorClipInfo(layerIndex)[0].clip.length;
}
else
{
animator.SetFloat(_attackTimeHash, 0.0f);
animator.SetBool(_attackHash, false);
_isStarted = false;
}
animator.SetInteger(_weaponTypeHash, -1);
}
public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo,
int layerIndex)
{
_castTime = -1;
_isStarted = false;
}
public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo,
int layerIndex)
{
if (_isStarted)
{
if (_waitingTime > 0)
{
_waitingTime = _castTime - _nextClipLength;
Debug.Log("Update castTime "+ _castTime);
Debug.Log("Update clipTime "+ _nextClipLength);
animator.SetFloat(_attackTimeHash, _waitingTime);
}
else if (_waitingTime <= float.Epsilon)
{
animator.SetBool(_attackHash, false);
}
}
}
public void StartAnimation(Animator animator, float castTime, int weaponInt)
{
_castTime = castTime;
if (!_isStarted)
{
if (_currentAnimator == null) _currentAnimator = animator;
_waitingTime = castTime;
animator.SetInteger(_weaponTypeHash, weaponInt);
animator.SetBool(_attackHash, true);
animator.SetFloat(_attackTimeHash, _waitingTime);
Debug.Log(animator.GetInteger(_weaponTypeHash));
_isStarted = true;
Debug.Log("Starting "+ _castTime);
}
}
}
Отсюда можно понять, что в StartAnimation поле присваивается и в дебаге выводится все нормально, но вот в OnStateEnter выводится -1(то есть приравненное изначально к полю число).
Повторюсь, код рабочий, перетестил раз на 100. Логика одинаковая. Думаю, какой-то юнитовский баг.