protected override void SetupStates() { var stoppedState = new StoppedState(this); var followingState = new FollowingTarget(this, tryingToOpenDoorSound, () => brokeDoorPercentage, timeToWaitWhenWalkingAndSeePlayer); var walkAroundState = new WalkAroundState(this, tryingToOpenDoorSound, () => brokeDoorPercentage, timeToWaitWhenWalkingAndSeePlayer, () => numberOfFlagsToLookAt, () => numberOfFlagsToSkip); var killingTargetState = new KillingTargetState(this, macheteSound); var seenTargetTransition = new TargetOnSightTransition(this, followingState, seeYou); var targetIsCloseToKill = new TargetIsClose(this, killingTargetState, distanceToKillTarget, () => coolDownAfterCloseDoor > minKillCoolDownAfterCloseDoor); var targetUnreachable = new TargetUnreachable(this, walkAroundState); var targetGiveUp = new TargetGiveUp(this, walkAroundState, () => timeToGiveUp); stoppedState.SetTransitions(seenTargetTransition); followingState.SetTransitions( targetIsCloseToKill, targetUnreachable, targetGiveUp); walkAroundState.SetTransitions(seenTargetTransition); SetFirstState(walkAroundState); allStates = new State[] { stoppedState, followingState, walkAroundState, killingTargetState }; }
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { //transfPlayer = FindObjectOfType<PlayerControllerBB>().transform; transfPlayer = GameObject.FindGameObjectWithTag("Player").transform; lastpos = transfPlayer.position; controller = animator.GetComponent <FollowingTarget>(); }