싱글플레이게임에서의 몬스터 AI는 몬스터의 기능에 대한 연산을 몬스터 GameObject의 컴포넌트로 붙여 현재 상태를 계산함으로 구현할 수 있다. 스킬쿨타임이나 애니메이션같은 경우 코루틴을 이용한 시간계산으로 구현하였는데 온라인게임같은 경우 서버로부터 몬스터의 상태에 대한 패킷을 클라이언트에게 전송해 몬스터의 상태를 받은 클라이언트는 그저 랜더링만 하면 된다.
싱글플레이게임의 몬스터 AI는 유니티시리즈에서 다루었다.
몬스터의 상태변화나 판정은 플레이어 공격의 투사체를 구현했을 때와 유사한 동작 방식을 가진다. 실시간으로 몬스터의 행동을 계산해 특정 대상을 탐색하거나 특정 위치로 이동하거나 몬스터가 죽었다면 죽음판정을 하기 때문이다.
플레이어가 소환한 투사체의 피격판정을 실시간으로 처리했듯이 서버는 실시간으로 몬스터의 상태를 Update하며 현재상태의 행동을 처리하고 상태변화를 시킬것이다.

물론 무한루프로 매 Update를 호출하는 것 보다는
JobQueue,JobTimer를 사용하는 구조가 더 효율적일 것이다.
몬스터의 상태수가 적다면 몬스터의 행동은 하나의 유한상태머신(FSM)으로 나타낼 수 있다. 각 상태에서 취할 수 있는 행동이 서로 다르고 바뀔수 있는 상태로 전이하는 것을 그래프로 나타래 수 있다.

그리고 각 상태에 취할 수 있는 행동에서 쿨타임과 같은 일정 시간동안 상태를 전이할 수 없다거나 선후딜레이를 구현하고 싶을 때 Tick을 도입할 수 있다.
Tick으로 매 Update호출 사이의 시간을 비교해 행동을 할 수 있는 시간이 지날 때 로직을 실행시키는 구조를 사용할 수 있다.
long _nextMoveTick = 0;
void UpdateMoving()
{
if (_nextMoveTick > Environment.TickCount64)
return;
int moveTick = (int)(1000 / Speed);
}
상태수가 비교적 많아져 Update함수 내에 'if else ~'구조가 반복된다면 [디자인 패턴 - State 패턴]을 적용해보자.