기존에 플레이어컨트롤러를 참조하던 코드들에 추가로 Ai컨트롤러 또한 참조할 수 있게 수정해야한다. 기존에 사용되는 곳은 아래와 같다.
이러한 용도로 사용되는 구조에 추가적으로 AiController를 참조시켜야 한다. Ai 플레이어들 또한 위와같은 기능들을 필요로 하기 때문이다. 해결책으로 4개를 생각해볼 수 있다.
1 번의 경우, PlayerController가 너무 무겁기 때문에 상속받기에는 깔끔하지 않다. 당장에 구현하기에는 가장 쉬운 경우다.
2 번의 경우, 스크립트를 상당히 많이 수정해야한다. 코드가 꼬일 확률이 높다.
3 번의 경우, 차선책으로 좋은방법이다. 각 컨트롤러마다 추가적인 컴포넌트 부착이 필요하단 점과 에디터 상에서 추적이 불가능하다는 단점이 있다.
4번은 구현도 쉽고, 객체지향적으로도 올바른 방법이다. 수정해야 하는 코드 또한 많지 않기 때문에 코드의 재사용성 또한 높다.
참여했던 방에서 나간 다음, 다시 방에 참여하려고 하면 에러가 발생한다. JoinLobby 수행 후에 다시 방에 참가하려고 해도 에러가 발생하는데, 이는 포톤 시스템 상 로비에 참가한 다음의 후처리를 아직 다 못한 상황에서 룸에 참여하려고 하기 때문이다. 룸 참가 함수에 조건을 추가한다
if (PhotonNetwork.NetworkClientState == ClientState.JoinedLobby)
{
PhotonNetwork.JoinRoom(roomName);
joinButton.onClick.RemoveListener(JoinRoom);
}