내가 처리하려고 하는 것들인데 이렇게 해도 괜찮을지 핑까좀 해줄 수 있을까? 좀 길어서 바쁘면 3번만 봐줘도 고마움..



1) 플레이어 이벤트

플레이어가 NetworkSpawn될때 IsOwner로 클라실행만 통과시켜서OnPlayerSpawn(Player player) 이벤트 발생시켰음 

= 각 플레이어가 스폰될때 각 개체에대한 이벤트 발생

월드에 있는 ‘여닫을 수 있는 문’ 처럼 난입시 업데이트가 필요한 경우에 오브젝트에 이벤트를 구독시켜서 client rpc 실행될 수 있도록 만듦



2) 서버사이드 몬스터?

몬스터는 서버에서만 생성되고 호스트 외 클라들은 업데이트만 받게 하는 게 맞는 거 같아서 아래처럼 처리하려고 함

몬스터가 생성될때 NetworkSpawn에서 IsServer로 서버실행만 통과시켜서 OnMonsterSpawn(Monster monster) 이벤트 발생시킴. 몬스터의 움직임이나 스킬 메커니즘은 서버에서만 처리하고 클라는 위치와 외형 업데이트만 받음

이벤트는 몹 생성시 주변에 안개를 생성시킨다던가 하는 월드 이벤트에 활용하려고 만들었어

다만 플레이어가 닿아서 공격을 맞거나 몬스터거 사망하는 등 즉발적인 피드백이 필요한 건 클라사이드로 처리하고, 몬스터의 체력과 이에따른 사망 같은 값은 네트워크 변수 쓸거야



3) 지금 가장 궁금한거: 게임매니저가 네트워크 오브젝트인데 Spawn 안시켜줘도 되나?

게임매니저에 NetworkVariable이 있고 이걸로 게임 시간을 저장시키고 있음. 전반적인 게임 매커니즘을 관리하는 스크립트임

대부분의 작동은 서버에서 하겠지만 일부 클라에서 rpc보낼때 허브로 쓰려고 싱글톤처럼 구성해놨음

여기에 네트워크 변수가 있어서 Network 컴포넌트를 붙여놨는데(별다른 동기화 필요없을거같아서 컴포넌트 모든 속성 false), 
Network.Spawn을 시켜줘야 네트워크 오브젝트로 인식이 된다고 알고있거든?

하지만 얘는 프리팹도 아니라서 NetworkPrefabs에 등록도 안되어있고 딱히 Spawn도 안시켜둔 상태, 즉 그냥 하이어라키에 생성시켜둔게 다임

<< 근데 네트워크 변수 동기화도 되고 오류도 없어. 클라사이드 하이어라키 보면 게임매니저도 존재함

이렇게 그냥 하이어라키에 생성시켜둔 애들은 Spawn 안시켜줘도 되는거야?




절차적 지형 생성에 프리팹 묶음을 쓰고있는데, 이 안에 월드 이벤트(서버사이드 시간)에 따라 외형이 바뀌는 자식 프리팹이 포함되어 있어

그러면 이 자식 프리팹은 Network이어야 할 것이고, 절차적 생성을 할때 단순히 인스턴싱 할 게 아니라 자식을 쭉 훑어서 네트워크 오브젝트인 애들 골라가지고 Spawn을 시켜줘야 하는 거야?






미안하다 줄줄이 질문만 해서

근피티한테 물어보긴 했는데 특히 3번에 대한 대답이 계속 바뀌어서 사람 개발자의 평가를 듣고싶다..

오열