public void StateUpdate() { if (myMaster.pathObject != null) { if (myMaster.agent.remainingDistance <= myMaster.distanceToTurn) { myMaster.UpdatePath(); myMaster.agent.SetDestination(myMaster.path[myMaster.pathCpt].position); } } else { if (myMaster.agent.remainingDistance <= 0.1) { myMaster.tr.SetPositionAndRotation(myMaster.startPos, myMaster.startRot); myMaster.stateMachine.ChangeState(myMaster.idle); return; } } angle = Vector3.SignedAngle(myMaster.tr.forward, myMaster.agent.destination - myMaster.tr.position, myMaster.tr.up); myMaster.animator.SetFloat("turn", angle); myMaster.LookForPlayer(); myMaster.animator.SetBool("isDetectingBlank", myMaster.playerDetected); if (myMaster.playerDetected) { myMaster.stateMachine.ChangeState(myMaster.chase); } }
public void StateUpdate() { timeInState += Time.deltaTime; if (timeInState >= timeToDetect) { myMaster.LookForPlayer(); } myMaster.animator.SetBool("isDetectingBlank", myMaster.playerDetected); angle = Vector3.SignedAngle(myMaster.tr.forward, myMaster.agent.destination - myMaster.tr.position, myMaster.tr.up); myMaster.animator.SetFloat("turn", angle); //Detection if (myMaster.playerDetected) { myMaster.stateMachine.ChangeState(myMaster.chase); } else if (myMaster.agent.remainingDistance <= 0.5f) { myMaster.stateMachine.ChangeState(myMaster.patrol); } }
public void StateUpdate() { timeInState += Time.deltaTime; myMaster.LookForPlayer(); myMaster.animator.SetBool("isDetectingBlank", myMaster.playerDetected); //Regarde le joueur en x,z if (myMaster.playerDetected && timeInState < timeToKill) { Vector3 lookAtPos = GameManager.instance.currentAvatar.tr.position; lookAtPos.y = myMaster.tr.position.y; myMaster.tr.LookAt(lookAtPos); } //Detection if (!myMaster.playerDetected) { myMaster.searchDestination = GameManager.instance.currentAvatar.tr.position; myMaster.stateMachine.ChangeState(myMaster.search); } //Optimisation de navMesh cpt++; if (cpt % 10 == 0) { myMaster.agent.SetDestination(GameManager.instance.currentAvatar.tr.position); } angle = Vector3.SignedAngle(myMaster.tr.forward, myMaster.agent.destination - myMaster.tr.position, myMaster.tr.up); myMaster.animator.SetFloat("turn", angle); //Kill selon la distance if (Vector3.Distance(myMaster.tr.position, GameManager.instance.currentAvatar.tr.position) <= myMaster.killDistance && GameManager.instance.currentAvatar.stateMachine.currentState != GameManager.instance.currentAvatar.stateMachine.death) { if (timeInState >= timeToKill && GameManager.instance.currentAvatar.controller.enabled) { Physics.Linecast(myMaster.tr.position + Vector3.up, GameManager.instance.currentAvatar.tr.position + Vector3.up, out hit); if (hit.collider.CompareTag("Player")) { GameManager.instance.currentAvatar.animator.SetBool("deathByTrap", true); GameManager.instance.currentAvatar.stateMachine.ChangeState(GameManager.instance.currentAvatar.stateMachine.death); myMaster.playerDetected = false; myMaster.Invoke("ResetPos", 3f); myMaster.stateMachine.ChangeState(myMaster.search); } } } }
public void StateUpdate() { if (myMaster.pathObject != null) { myMaster.stateMachine.ChangeState(myMaster.patrol); } myMaster.LookForPlayer(); myMaster.animator.SetBool("isDetectingBlank", myMaster.playerDetected); if (myMaster.playerDetected) { myMaster.stateMachine.ChangeState(myMaster.chase); } }