• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

매니저를 만드는데 이런경우는 어떻게하나요?

23.11.04 10:24 작성 조회수 121

0

기존의 매니저들을 인풋,ui,리소스 등등을 따라서 만들어 봤는데요. 진짜 신세계더라구요..

그동안에 코드가 막 엉키고 정리도 잘안되고있었는데 저렇게 나눠서쓰니까 코드 분류하기가 너무 편하더라구요.. 그래서 이번에 네트워크 매니저도 하나 만들어서 쓸려고하고있는데요

제가 Pun2를 사용해서 게임을 만들어보려고하는데요..

pun2에서 지원하는 콜백을 네트워크 매니저에 붙일려고 하는데요

다른 매니저처럼 managers에다가 프로퍼티를 만들어서 접근하는식으로 만들었구요..

 

using UnityEngine;

using Photon.Pun;

public class NetworkManager: MonoBehaviourPunCallbacks

{

public override void OnConnectedToMaster()

{

Debug.Log("complete masterserver connect");

}

}

일단 테스트를 위해서 서버에 접속이되면 저 콜백이 작동을 하는지 테스트를 해봤거든요..

근데 작동을 안하더라구요..

기존 매니저들은 콜백방식은 아니었고 직접 호출하는 방식이었는데

저런식으로 콜백방식을 연동하려면 어떻게 하야할까요?

 

참고로 저걸 네트워크 매니저에 할당했을때는 안됐고 따로 게임오브젝트에서 서버접속을하는 코드를 따로 만들어서 접속시도했을때는 성공했습니다.

 

네트워크 매니저를 사용한방식에서는 로그조차 안뜨더라구요..

답변 1

답변을 작성해보세요.

0

MonoBehaviourPunCallbacks는 MonoBehaviour를 상속받은 것으로 보이는데요.
그렇다면 당연히 Component이고, Component는 GameObject에 '기생'해야 작동을 합니다.

NetworkManager를 만드셨고 현재 프레임워크처럼 Managers에
_network = new NetworkManager(); 형태로 사용하고 싶다면,
이는 Component가 아니니 동작을 하지 않습니다.

해결 방법은 다양하게 존재하는데요.

1)
MonoBehaviourPunCallbacks을 상속받은 class를 하나 파고,
그것을 이용해 Prefab을 판 다음에 해당 Prefab을 NetworkManager에서 Instantiate한다거나.

2)
MonoBehaviourPunCallbacks을 상속받은 class를 하나 파고 (ex. Test라 한다면),
NetworkManager에 Init 함수를 파서 var go = new GameObject(); go.AddComponent<Test>();
형태로 직접 만들어주는 것도 가능합니다.

물론 그 외 다양한 변형이 있을 수 있지만
기본적으로 Component와 일반 C# Class는 구분해서 생각하셔야 합니다.
이 정도는 간단히 응용할 수 있어야 서버를 붙일 수 있다고 보고,
아직 익숙치 않다면 서버는 좀 미루고
싱글 게임을 더 만들면서 유니티에 익숙해지는게 좋을 수 있어요.