유니티 Netcode for GameObject, Physics / Transports

Physics

NGO는 물리 시뮬레이션이 서버에서만 실행되는 서버권위적인 방식으로 Physics에 대한 접근을 제한하고 있습니다!
Network Pyhsics를 가능하게 하기 위해선 Object에 NetworkRigidbody 컴포넌트를 추가하면 됩니다!
 


NetworkRigidbody / 충돌판정(서버 / 클라이언트)

NetworkRigidbody  모든 비권위적인 인스턴스들의 Rigidbody를 설정해줍니다! 
 
NetworkRigidbody의 Authority는 NetworkTransform컴포넌트에 의해 좌우지간 됩니다!

소유권을 가지는 사람이면 Kinematic이 false로 설정된다!

NetworkTransform가 서버권위적인지 소유자권위적인지에 따라

NetworkRigidbody는 그거에 맞춰 따라갑니다!
 
이렇게 하는 이유는 물리 시뮬레이션은 서버의 인스턴스에서 실행되고 결과 위치는 비권위적인 인스턴스에서 각각의 Rigidbody가 Kinematic상태로 동기화됩니다!
 
NetworkRigidbody를 사용할 때 일부 충돌 이벤트가 발생하지 않습니다!

  1. 서버에서는 모든 충돌과 트리거 이벤트(OnCollisionEnter과 같은) 가 예상대로 발생하며 사용자의 Rigidbody값에 접근하고 변경할 수 있습니다!
  2. 클라이언트측에서는 Rigidbody가 Kinematic상태입니다, Trigger이벤트들은 여전히 실행되지만 네트워크에 연결된 다른 Rigidbody 인스턴들은 충돌할 때 이벤트가 발생하지 않습니다!!

따라서, Collision이 발생하는 게임플레이에서는
Server에서는 OnCollsionEnter를 듣게하고 모든 클라이언트들에게 ClientRPC를 통해 이벤트를 동기화시키면 됩니다!
 


 

NetworkRigidbody & ClientNetworkTransform

ClientNetworkTransform 패키지 샘플을 사용면 NetworkObject를 클라이언트에서도 권한있는 방식으로 NetworkRigidbody를 사용할 수 있습니다.

 

동일한 객체를 소유한 클라이언트가 다른 NetworkObject와 충돌하는 경우에만 동적 충돌이 발생합니다.

https://docs-multiplayer.unity3d.com/netcode/current/components/networktransform#clientnetworktransform

 

NetworkTransform | Unity Multiplayer Networking

The position, rotation, and scale of a NetworkObject is normally only synchronized once (when that object spawns). To synchronize position, rotation, and scale at real-time during the game, you must use a NetworkTransform component. NetworkTransform synchr

docs-multiplayer.unity3d.com


Physics and latency

멀티플레이 게임 내에서 물리를 다룰 때 흔히 생기는 문제는 랙과
다른 타임라인 안에 있는 오브젝트를 Update하는 방법입니다!
 
물리적인 대기 시간 문제를 해결하는 가장 좋은 방법은 Custom한 물리 기반 Interpolator로 Custom NetworkTransform을 만드는 것입니다!
 


Transports

NGO는 Unity Transport를 기본값으로 사용하며 UNet Transport도 지원합니다!
 
Transport Layer에 관련해서는!
2023.03.02 - [Unity - GamingService/Relay] - 유니티(Unity) Untiy Transport Package(UTP)에 대해서 (#Relay 2편)

 

유니티(Unity) Untiy Transport Package(UTP)에 대해서 (#Relay 2편)

Relay SDK는 Unity Transport Package (UTP)에서 잘 작동됩니다 About Unity Transport | Unity Multiplayer Networking Unity Transport provides the com.unity.transport package, used to add multiplayer and network features to your project. docs-multiplay

wlsdn629.tistory.com

참고하시면 좋을듯합니다!!