본문 바로가기
Unity/TIL

Unity Photon.Pun2 멀티 동기화

by 김차루 2024. 6. 21.
스파르타 내배캠 42일차 TIL
C3조_ 이석삼조

 

 

 

오늘은 플레이를 위해서 맵의 여러 기믹과 플레이어들 간의 이동을 동기화 하는 과정을 가졌다. 

 

먼저 플레이어 캐릭터에 photon view, photon transform view, photon rigidbody view photon animator view를 붙였다.

 

photon view를 통해 플레이어를 구분하고 네트워크에서 동기화될 컴포넌트를 추가해서 photon view에서 동기화할 수 있도록 추가했다. photon transform에서는 위치, 회전, 크기를 동기화할 수 있다. photon rigidbody에서는 속도와 텔레포트 가능 거리를 동기화할 수 있다. 이 상태에서 플레이 하게 되면 한 플레이어가 움직일 때 서버에 있는 모든 캐릭터를 동시에 움직이게 할 수 있다. 그렇기 때문에 플레이어에 붙어있는 스크립트가 본인 것인지 확인하는 코드를 작성해야 한다.

public class PlayerController : MonoBehaviour
{
    PhotonView PV; //SH:photonview 사용
    
    private void Awake()
    {
    	...
        PV = GetComponent<PhotonView>(); //SH:photonview 사용
        ...
    }
    
    private void Start()
	{
    	// 카메라 중복 방지
        if (!PV.IsMine)
        {
            Destroy(GetComponentInChildren<Camera>().gameObject);
        }
    }
    
    private void Update()
	{
    	...
        // SH : 한 플레이어에 한 컨트롤러를 위해
        if (!PV.IsMine)
            return;
        ...
    }
    ...
}

 

멀티 플레이에서 중복되는 부분은 전부 방지 코드를 작성해야 한다. 

플레이어에 적용했다면 이제 맵 기믹에도 전부 넣어줘야 한다. 새가 날아가도 A플레이어와 B플레이어의 화면에서 동시에 날아가야 한다. 그렇기 때문에 그런 요소가 있는 것들에 모두 photon view와 필요한 컴포넌트를 추가로 넣어야 한다.

 

예시) 위아래로 움직이는 불덩이

 

기본적으로 photon view를 추가하고 위아래로 움직이기 때문에 photon transform도 추가했다. 그리고 불덩이를 맞게 되면 플레이어가 처음으로 이동하게 되는데 이때 부딪힌 사람만 이동되어야 하기 때문에 아래에 코드를 추가했다. 

void OnTriggerEnter2D(Collider2D other)
{
    // 충돌한 오브젝트가 "Player" 태그를 가지고 있는지 확인
    if (other.CompareTag("Player"))
    {
    	//pv적용
        PhotonView pv = other.gameObject.GetPhotonView();
        if(pv.IsMine)
            // 타겟 오브젝트를 목표 위치로 텔레포트
            targetObject = other.gameObject;
            Teleport();
    }
}

 

이 과정을 모든 기믹에 다 붙이면 된다. 동기화 과정을 이렇게 일일이 붙이는게 맞는가? 라고 생각해서 튜터님께 물어봤는데 노가다 과정을 거쳐야 동기화가 된다고 한다. 

 

 

마무리하며

아마 내가 진행한 과정은 포톤의 가장 기본적인 사용일 것 같다. 메소드나 속성이 너무 많기 때문에 사용법만 익히면 포톤으로 채팅, 보이스 채팅 등등 모두 구현 가능할 것 같다. 마무리 작업 과정에 알게 된 사실인데 포톤 패키지를 임포트하면 폴더에 데모파일이 있다. 포톤에서 각 메서드를 어떻게 써야하는지 전 과정을 예시로 구현한 것이 있다. 이걸 확인하면서 공부하면 더 좋은 자료가 될 수 있을 것 같다. 

'Unity > TIL' 카테고리의 다른 글

피드백에 대한 수정 및 공부  (0) 2024.06.26
Unity photon 멀티플레이 예외처리  (0) 2024.06.24
Unity Photon.Pun2 멀티 플레이  (1) 2024.06.20
Unity Render Pipeline  (1) 2024.06.18
Unitu 멀티플레이 게임  (0) 2024.06.13