ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니티 포톤 기초
    카테고리 없음 2024. 6. 19. 21:44

    유니티 게임개발캠프 TIL 40일차

    유니티에서 포톤을 사용해 멀티플레이어 기능 적용하기

    오늘은 유니티에서 포톤을 사용해 멀티플레이어 기능을 실제로 적용해보았습니다. 아래는 예제를 통해 배운 내용을 정리한 것입니다.

    포톤 설치 및 설정

    1. Photon Unity Networking (PUN) 패키지 설치:
      • Unity Asset Store에서 Photon Unity Networking (PUN) 패키지를 검색하여 프로젝트에 추가합니다.
    2. Photon Cloud 계정 생성 및 설정:
      • Photon Engine 웹사이트에서 계정을 생성하고, 새로운 어플리케이션을 만들어 App ID를 발급받습니다.
      • Unity에서 Window > Photon Unity Networking > PUN Wizard를 열고, App ID를 입력하여 설정을 완료합니다.

    간단한 멀티플레이어 게임 구현

    1. 네트워크 매니저 설정:
      • 새로운 Empty GameObject를 생성하고 NetworkManager라고 이름을 지정합니다.
      • PhotonView 컴포넌트를 추가하고, PhotonTransformView도 추가하여 네트워크에서 오브젝트의 위치를 동기화하도록 설정합니다.
    2. 플레이어 프리팹 생성:
      • 간단한 플레이어 캐릭터 (예: Capsule)를 생성하고, 이를 프리팹으로 저장합니다.
      • 프리팹에 PhotonView 컴포넌트를 추가하고, Observed Components에 PhotonTransformView를 추가합니다.
    3. 룸 생성 및 참가:
      • NetworkManager 스크립트를 작성하여 룸을 생성하고 참가하는 기능을 구현합니다. 예를 들어:
    using Photon.Pun;
    using UnityEngine;
    
    public class NetworkManager : MonoBehaviourPunCallbacks
    {
        public GameObject playerPrefab;
    
        void Start()
        {
            PhotonNetwork.ConnectUsingSettings();
        }
    
        public override void OnConnectedToMaster()
        {
            PhotonNetwork.JoinLobby();
        }
    
        public override void OnJoinedLobby()
        {
            PhotonNetwork.JoinOrCreateRoom("Room1", new Photon.Realtime.RoomOptions { MaxPlayers = 4 }, null);
        }
    
        public override void OnJoinedRoom()
        {
            PhotonNetwork.Instantiate(playerPrefab.name, new Vector3(0, 5, 0), Quaternion.identity, 0);
        }
    }

     4. 플레이어 이동 동기화:

    • 플레이어 프리팹에 이동 스크립트를 추가하여 입력에 따라 움직이도록 합니다. 예를 들어:
    using UnityEngine;
    using Photon.Pun;
    
    public class PlayerMovement : MonoBehaviourPun
    {
        void Update()
        {
            if (photonView.IsMine)
            {
                float moveHorizontal = Input.GetAxis("Horizontal");
                float moveVertical = Input.GetAxis("Vertical");
    
                Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
                transform.Translate(movement * Time.deltaTime * 5);
            }
        }
    }

     

     

Designed by Tistory.