DevLog/유니티 프로젝트
[HDProject]파티 초대 팝업창 포톤 연동 + 왜 포톤을 쓰나요?
뽀또치즈맛
2025. 4. 23. 23:47
Git : https://github.com/kwon1232/HDProject
필자가 Unity엔진에서 Photon 서버를 사용하는 주된 이유는 다음과 같다.
- 빠른 개발 속도
Photon Unity Networking(PUN) 패키지를 통해
복잡한 소켓 프로그래밍 없이도 멀티플레이어 기능을 즉시 구현할 수 있다.
RPC 호출, 룸 생성·관리, 이벤트 전송 등 기본적인 네트워킹 기능을 API 한 줄로 처리할 수 있다. - 낮은 레이턴시 및 글로벌 리전 지원
전 세계에 분산된 서버 리전을 통해
플레이어가 가장 가까운 리전에 접속하여 레이턴시를 최소화할 수 있다.
게이머의 지역에 따라 자동으로 최적의 리전을 선택하는 기능도 제공된다. - 매치메이킹·로비·룸 관리 기능이 제공
자동 매치메이킹으로 플레이어를 간편하게 그룹화할 수 있다.
룸 속성(Property) 설정을 통해 게임 룸을 세부 조정할 수 있으며,
대기실(Lobby)에서 특정 룸 검색과 조건별 필터링이 가능하다. - 크로스 플랫폼 지원
PC, 모바일(Android·iOS), WebGL, 콘솔, VR/AR 등
다양한 플랫폼을 하나의 네트워킹 솔루션으로 통합할 수 있다.
한 번 개발하면 여러 플랫폼에 재사용 가능하여 유지보수가 용이하다. - 확장성과 안정성
Photon Cloud를 이용하면 서버 운영 부담 없이 곧바로 배포할 수 있다.
자체 호스팅이 필요할 때는 Photon Server SDK로 완전한 커스텀 서버 환경을 구성할 수 있다. - 커스터마이징 가능성
Photon Server SDK로 서버 사이드 로직을 직접 작성하여
권한 검사, 게임 룰, 시뮬레이션 등을 서버에서 완전 제어할 수 있다.
커스텀 인증과 암호화 옵션을 제공하여 보안 요구사항을 충족시킬 수 있다. - 풍부한 생태계와 문서가 갖춰져 있음
공식 튜토리얼, 샘플 프로젝트,
활성화된 포럼과 슬랙 커뮤니티를 통해 문제 해결이 빠르다.
매치메이킹 확장, 통계 분석, 챗 시스템 등 다양한 서드파티 플러그인 연동도 용이하다. - 비용 효율성이 높음
소규모 팀이나 인디 개발자는 무료 티어로 시작할 수 있으며,
사용자 증가에 따라 단계별 요금제로 확장 가능하여 초기 비용 부담이 적다.
Photon 서버는 직접 서버를 구현·운영하기 어렵거나
시간이 부족한 개발팀이 빠르게 안정적인 멀티플레이어 게임을 출시할 수 있도록 돕는 검증된 솔루션이다.
파티 UI 액션 바인딩 부분
using Photon.Pun;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D;
public enum Action_State
{
None = 0,
InviteParty,
Trade,
InviteGuild
}
public class ActionHolder : MonoBehaviourPunCallbacks
{
public static SpriteAtlas Atlas;
public static Dictionary<Action_State, Action> Actions = new Dictionary<Action_State, Action>();
public static PhotonView photonView;
public static int TargetPlayerIndex;
public static Sprite GetAtlas(string temp)
{
return Atlas.GetSprite(temp);
}
private void Awake()
{
photonView = GetComponent<PhotonView>();
Atlas = Resources.Load<SpriteAtlas>("Atlas");
Actions[Action_State.InviteParty] = InviteParty;
Actions[Action_State.Trade] = Trade;
Actions[Action_State.InviteGuild] = InviteGuild;
}
서버에서 호출되는 부분
PunRPC 부분이 상대 플레이어에게 보내지는 메시지이다.
// RPC 기능 사용할 것
public static void InviteParty()
{
photonView.RPC("ReceivePartyInvite", RpcTarget.Others,
PhotonNetwork.LocalPlayer.ActorNumber, TargetPlayerIndex);
}
[PunRPC]
public void ReceivePartyInvite(int inviterID, int targetPlayerID)
{
string temp = string.Format("<color=#FFF000>{0}</color>님이 " +
"파티를 초대하셨습니다.\n수락하시겠습니까?",
PhotonHelper.GetPlayerNickName(inviterID));
PopUPManager.instance.Initialize(temp, null, null);
}