유니티 Photon Fusion 사용법

JHO·2024년 11월 12일
0

유니티 3D

목록 보기
7/14

1. 포톤 서버 생성


1. 포톤 서버 생성 및 ID 복사

  • 생성 후 ID를 복사 해 놓는다.

2. 패키지 추가


1. MonoCecil 추가

  • Photon을 사용하기 위해서는 MonoCecil 패키지를 필요로 함.
  • com.unity.nuget.mono-cecil@1.10.2

2. Photon Fusion 추가

  • Asset store 등을 통해 Photon Fusion 패키지 추가

3. 서버 ID 연동

  • 복사해 놓은 ID를 연동.
  • Tools - Fusion - Fusion Hub.

4. ParrelSync 다운

  • 멀티 환경을 에디터 상에서 쉽게 테스트 하기 위해서 Parrel Sync zip 다운.
  • 다운받은 zip을 압축해제 후, ParrelSync 폴더를 추가.

3. 서버연동테스트


1. Clone 생성

  • ParrelSync- Clone Manager 클릭.
  • Add new Clone을 통해 clone 생성.
  • Fusion - Scene - Set up Networking in the Scene 클릭.
    -> Prototype Network 및 Prototype Runner 생성.
  • clone을 생성하면 하나의 에디터가 더 생성.

4. 번외


1. 다른 서버 Id 병행.

  • Fusion Setup에서 Photon App Settings 을 들어가면,
    Photon APp Settings 프리펩 확인 가능.
  • App id Chat이나 APp id Voice에 Chat 서버나 Voice 서버의 Id를 연동하면 chat과 voice기능도 가능.

2. NetWork Runner

  • IPlayerJoined, IPlayerLeft 같은 이벤트 함수가 바로 호출 되는 이유는 Runner 가 실행하게 해주므로, Runner쪽에 붙여줘야한다.
  • 만약, Network Events를 이용한다면, Runner쪽에 컴포넌트를 꼭 붙이지 않아도 된다.

3. 소유권

  • 본인 캐릭터만 StateAuthority가 true.
    -> 다른 캐릭터는 에디터상에서 마우스로 잡아 이동 불가.
  • 소유권이 없기때문에 건들지 못한다.

4.Spawned, FixedUpdateNetwork

  • Spawned: Awake - OnEnable - Start - Spawned순으로 라이프사이클이 돌아가며, 네트워크상에서 Awake나 Start대신에 사용.
  • FixedUpdateNetwork: 라이프사이클이 완전 독립적이다.

5. NetWorkBehaviour, SimulationBehaviour

  • NetWorkBehaviour : 네트워크 오브젝트에 붙어서 게임오브젝트 Update 동작관련 기능
  • SimulationBehaviour : 네트워크 러너에 붙어서 접속, 해제, 다른 플레이어 참가, 다른 플레이어 나감, 네트워크 이벤트 관련 내용 기능

6.Networked, OnChangedRender

public class PlayerModel : NetworkBehaviour
{
    [Networked, OnChangedRender(nameof(OnCHangeHp))] public int Hp { get;  set; }
    public UnityAction<int> OnChangedHpEvent;
    public int MaxHp;
    public override void Spawned()
    {
        Hp = MaxHp;
    }
    private void OnCHangeHp()
    {
        OnChangedHpEvent?.Invoke(Hp);
    }
}
  • Networked : 네트워크에서 동기화할 데이터를 선정. 값형식만 가능. 프로퍼티 필수, 인스펙터창에서 보이도록 가능
  • OnChangedRender: 네트워크 데이터가 변경되었을 때 호출되는 함수를 지정.
  • 다른 클래스에서 PlayerModel의 Hp값을 변경시킬 때, OnChangeHp함수가 호출 된다.

7. RPC 함수

    [Rpc(RpcSources.All, RpcTargets.StateAuthority)]
    public void TakeHitRpc(int damage)
    {
        Debug.Log("피격");
        _playerModel.Hp--;
    }
  • RpcSources: 누가 실행할 수 있는지
    - RpcTargets: 누구한테 보낼 것인지, 받는 쪽에서만 함수내부를 진행한다.
  • Rpc함수 이름 정의할때 꼭 Rpc가 붙어야함!
  • Rpc함수를 사용해 다른 소유권자의 Networked변수를 직접적으로 건들수는 없지만, Rpc함수를 통해서 다른 소유권자가 자신의 Networked변수를 건들어서 동기화되도록 가능함.
    (호출은 RpcSources 쪽이여도, 함수 내부 실행은 Target쪽에서 진행되는것을 알 수 있음.)
profile
개발노트

0개의 댓글