Added AI Unity project
Added FSM examples
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace AI.FSM
|
||||
{
|
||||
public class PlayerDetectedState : IState
|
||||
{
|
||||
private GameObject _owner;
|
||||
private Transform _player;
|
||||
private float _radius;
|
||||
|
||||
public PlayerDetectedState(GameObject owner, Transform player, float radius)
|
||||
{
|
||||
_owner = owner;
|
||||
_player = player;
|
||||
_radius = radius;
|
||||
}
|
||||
|
||||
public void Enter(IFiniteStateMachine fsm)
|
||||
{
|
||||
Debug.Log("PlayerDetectedState Enter");
|
||||
}
|
||||
|
||||
public void Update(IFiniteStateMachine fsm)
|
||||
{
|
||||
Debug.Log("PlayerDetectedState Update");
|
||||
|
||||
// distance to player
|
||||
float distance = Vector3.Distance(_owner.transform.position, _player.position);
|
||||
|
||||
if (distance < _radius)
|
||||
{
|
||||
// option 1: player is close enough
|
||||
Debug.Log("Player is close enough");
|
||||
}
|
||||
else
|
||||
{
|
||||
// option 2: player is too far
|
||||
Debug.Log("Player is too far");
|
||||
fsm.ChangeState(new IdleState(_owner, _player, 30.0f));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void Exit(IFiniteStateMachine fsm)
|
||||
{
|
||||
Debug.Log("PlayerDetectedState Exit");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class GameValues
|
||||
{
|
||||
public static float PlayerDetectionRadius = 10.0f;
|
||||
public static float EnemyViewAngle = 30.0f;
|
||||
}
|
||||
Reference in New Issue
Block a user