이번에는 Photon의 기능인 커스텀 프로퍼티(속성)에 대해서 설명하겠습니다.
커스텀 프로퍼티란 룸이나 플레이어에 관련시킬 수 있는 해시테이블 형식의 일시적 파라미터입니다.
룸이나 플레이어를 작성할 때나 SetCustomProperties메소드를 사용함으로써 파라미터에 세팅할 수 있습니다.
커스텀 프로퍼티를 호출할 때는 customProperties메소드를 부르는 것으로 이용 가능합니다.
이때의 되돌리는 값은 HashTable형식이 됩니다.
그럼 실제로 이용해 보겠습니다.
이번에는 Photon Unity Networking을 이용, 룸의 커스텀 프로퍼티를 사용했습니다.
또한, Photon Unity Networking의 버전은 "v1.28.1"입니다.
using UnityEngine; using System.Collections; using Hashtable = ExitGames.Client.Photon.Hashtable; public class CustomPropertiesSample : Photon.MonoBehaviour { // 커스텀 프로퍼티를 일시 저장한다
private string text = ""; void Awake () { // Photon접속
PhotonNetwork.ConnectUsingSettings ("0.1"); } void OnDestory () { // Photon끊김 PhotonNetwork.Disconnect (); } void OnJoinedLobby () { // 랜덤으로 입실(하지만 룸은 1개만) PhotonNetwork.JoinRandomRoom (); } void OnPhotonRandomJoinFailed () { // 랜덤으로 입실 실패한 경우, 룸을 작성
// 룸 옵션의 작성
RoomOptions roomOptions = new RoomOptions (); roomOptions.isVisible = true; roomOptions.isOpen = true; roomOptions.maxPlayers = 4; roomOptions.customRoomProperties = new Hashtable (){{"CustomProperties", "커스텀 프로퍼티"}}; roomOptions.customRoomPropertiesForLobby = new string[] {"CustomProperties"}; // 룸의 작성
PhotonNetwork.CreateRoom ("CustomPropertiesRoom", roomOptions, null); } void OnGUI () { // 룸에 있는 경우만
if (PhotonNetwork.inRoom) { // 룸의 상태를 취득
Room room = PhotonNetwork.room; if (room == null) { return; } // 룸의 커스텀 프로퍼티를 취득 Hashtable cp = room.customProperties; GUILayout.Label ((string)cp ["CustomProperties"], GUILayout.Width (150)); text = GUILayout.TextField (text, 100, GUILayout.Width (150)); // 커스텀 프로퍼티를 갱신 if (GUILayout.Button ("갱신")) { cp ["CustomProperties"] = text; room.SetCustomProperties (cp); } } } }
37, 38번째 줄과 같이 룸 작성 시에 파라미터로써 Hashtable과 string배열을 세팅할 필요가 있습니다.
37번째 줄의 Hashtable에는 커스텀 프로퍼티 요소를, 38번째 줄의 string배열에는 로비에서 이용하기 위한 커스텀 프로퍼티의 이름을 배열로 세팅 합니다.
40번째 줄에서 룸이 작성되면 바로 커스텀 프로퍼티를 이용할 수 있습니다.
54번째 줄에서 룸의 커스텀 프로퍼티를 취득하고 Hashtable에 세팅합니다.
55번째 줄에서 Hashtable 요소의 "CustomPropeties"를 Label로 표시합니다.
그리고 60번째 줄에서 룸의 커스텀 프로퍼티에 세팅 합니다.
이와 같이 Photon에서는 매우 간단하게 룸 자체가 프로퍼티를 가지는 것이 가능합니다.
마찬가지로 Player자신도프로퍼티를 가지는 것도 가능하므로 꼭 활용해보세요!
본 내용은 기사 작성시점에서의 상황을 베이스로 구성되었습니다.
버전에 따라서는 이용하지 못할 가능성도 있으므로, 양해 부탁드립니다.
댓글
댓글 0개
댓글을 남기려면 로그인하세요.