마지막 회로 중요한 Method들을 정리하는 시간을 가질까 합니다.
그리고 어떻게 흘러가는지에 대한 개괄을 설명드리고 Photon Cloud 강좌는 종료할께요 =)

* 소스는 댓글확인 부탁드립니다.

* 아마도 더 하게 된다면 Photon Server SDK로 dll 뽑아서 dll만든뒤에 Microsoft의 Azure에 올리는 방법 (기존 서버와 같이 만드는 방법)을 할 것 같습니다만, 개발 일정이... 흐흐흐흐

* 돈은 못벌면서 겁나 일하는 신세인지라.. T_T
사용자 삽입 이미지


암튼, 각설하고 Photon Cloud의 주요흐름은

1. 서버접속
2. 로비접속
3. 방으로 접근
4. 방으로 접근시도후 실패시 방만듬
5. 방입장
6. "방장"의 명령에 따라 Object들을 Sync


이상 6가지가 주요흐름입니다. 물론, 게임이 끝나면 종료되는건데 그건 알아서... (쿨럭)


1. 서버접속관련
* Method (PhotonNetwork)
PhotonNetwork.ConnectUsingSettings("0.1");
이건 뭐... 너무 간단해서요... ㅡㅜ

* 서버접속후 발생하는 이벤트
아래 Event들은 다음과 같이 사용됩니다.
void OnConnectedToPhoton(){ ~이벤트처리 로직~ }
- OnConnectedToPhoton : 포톤에 접속되었을 때
- OnLeftRoom : 방에서 나갔을 때
- OnMasterClientSwitched : 마스터클라이언트가 바뀌었을 때
- OnPhotonCreateRoomFailed : 방만들기 실패
- OnPhotonJoinRoomFailed : 방에 들어가기 실패
- OnCreatedRoom : 방이 만들어 졌을 때
- OnJoinedLobby : 로비에 접속했을 때
- OnLeftLobby : 로비에서 나갔을 때
- OnDisconnectedFromPhoton : 포톤 접속 종료
- OnConnectionFail : 연결실패 void OnConnectionFail(DisconnectCause cause){ ... }
- OnFailedToConnectToPhoton : 포톤에 연결 실패 시  void OnFailedToConnectToPhoton(DisconnectCause cause){
... }- OnReceivedRoomList : 방목록 수신시
- OnReceivedRoomListUpdate : 방목록 업데이트 수신시
- OnJoinedRoom : 방에 들어갔을 때
- OnPhotonPlayerConnected : 다른 플레이어가 방에 접속했을 때 void OnPhotonPlayerConnected(PhotonPlayer new-
Player){ ... }- OnPhotonPlayerDisconnected : 다른 플레이어가 방에서 접속 종료시  void OnPhotonPlayerDisconnected(Photon-
Player otherPlayer){ ... }- OnPhotonRandomJoinFailed : 렌덤하게 방으로 입장하는게 실패했을 때
- OnConnectedToMaster : 마스터로 접속했을 때
- OnPhotonSerializeView : 네트워크싱크시  void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info){ ...}
- OnPhotonInstantiate : 네트워크 오브젝트 생성시 void OnPhotonInstantiate(PhotonMessageInfo info){ ... }

위 접속관련 메소드와 이벤트를 참고한 결과가 전회의 "Master_Join"와 "NetworkObj" 입니다. =)


2. 로비관련
일단 로비 접속에 성공하면, 이제부터는 방목록을 얻어 온다던가... 아니면 방을 만든다던가... 이것도 아니라면 아무 방에 들어가기 위한 노력이 다입니다. =) 고로, 실재로는 몇재 안쓴다는 진실이...

* Method
RoomInfo [] PhotonNetwork.GetRoomList ( ) //방목록을 가져옵니다.
void PhotonNetwork.CreateRoom ( string roomName ) //방을 이름으로만 만듭니다.
void PhotonNetwork.CreateRoom ( string roomName, bool isVisible, bool isOpen, int maxPlayers ) //방을 만들되 이름, 보임여부, 오픈여부, 최대 플레이어 수를 지정합니다.
void PhotonNetwork.JoinRandomRoom ( ) //아무방이나 들어갑니다.
void PhotonNetwork.JoinRoom ( string roomName ) //지정한 방으로 들어갑니다.
아주 쉽죠? ㅡㅡ?

물론, 이전 회에서 보신적이 있으실 [RPC]도 호출이 가능하니 로비에서 웃고 떠들고 하는 것도 가능합니다!

3. 방에서...
방에서는 할 일이 그닥 없습니다. ㅡㅡ;; 진짭니다... 믿어 주세염 T_T

* Method
GameObject PhotonNetwork.Instantiate ( string prefabName, Vector3 position, Quaternion rotation, int group) //resources폴더에 있는 prefab의 이름으로 게임오브젝트를 생성합니다.
GameObject PhotonNetwork.InstantiateSceneObject ( string prefabName, Vector3 position, Quaternion rotation, int group, object[] data ) //씬에 종속된 게임오브젝트를 생성합니다.

위 2개의 Method 차이는 플레이어에 종속된 GameObject를 만들것인가, 플레이어의 접속이 끝나도 계속 살아남을 Object를 만들것인가입니다.

* Event
방에서 PhotonView로 설정한 객체는 서로 데이터를 Sync할 수 있습니다. 이때 발생하는 이벤트는 딱 1개라고 생각하심 될 듯 싶어요.
void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info){ ...}
전회 강좌에서 보신 "NetworkObj"입니다.

네트워크상에서의 동기화는 다음과 같이 수행됩니다.

void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
        }
        else
        {
            this.correctPlayerPos = (Vector3)stream.ReceiveNext();
            this.correctPlayerRot = (Quaternion)stream.ReceiveNext();
        }
}

위 코드에서 사용가능한 데이터형은
- Bool
- Int
- string
- char
- short
- float
- PhotonPlayer
- Vector3
- Vector2
- Quaternion
- PhotonViewID

입니다. =)

Component로 반드시 PhotonView 객체가 추가되어 있어야 겠지요?


나머지는 일반 Unity3D로 만드는 게임과 대동소이 합니다. =)

여기까지 Photon Cloud의 기초강좌를 마칩니다. =)


사용자 삽입 이미지

* Photon cloud의 전체 Manual은 다음을 클릭하시면 PDF로 받으실 수 있습니다. =)





2012/12/04 01:01 2012/12/04 01:01

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다