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쪽에서 진행되는것을 알 수 있음.)