Skip to content

LINEARJUN/FOSS-Unity-Netcode-Explanation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 

Repository files navigation

Logo

Unity Netcode

유니티 넷코드에 대한 간략한 소개

Unity3D · Netcode Repository · Video · Presentation

소개

  • 작성자 : 201920765 - 김준영
  • Unity Netcode에 대한 사진과 리소스는 Unity가 제작하였습니다.
  • 현재 유뷰트에 올린 영상은 SWTT에 영상이 게시될 시 삭제됩니다!
  • 📚 목차

    Details
    1. 프로젝트 소개 (About)
    2. 기능 설명 (Techniques)
    3. 참조 (References)

    ❗ Unity Netcode 란 무엇인가?

    유니티 엔진에서 사용되는 미드레벨 네트워킹 라이브러리이다. => 유니티 넷코드 공식 레포지토리

    유니티 넷코드를 활용하면 비교적 네트워크 지식이 전문가들보다 떨어지더라도 네트워크 관련 기술을 라이브러리로 부터 가져와 쓸 수 있고 어려운 실시간 네트워크 통신 기술 구연들을 조금 더 쉽게 해볼 수 있다.

    🔌 기능 설명

    넷코드에서 사용되는 대표적인 기능들 소개

  • Netcode 버전 1.0.0 기준으로 설명 됨
  • 일부 사진 자료 및 코드 자료는 Unity 측에서 제작함
  • 더 많은 정보를 보고 싶다면 유니티 넷코드 공식 DOCS 참고!

  • Client RPC

    Can be invoked by the server to be executed on a client.

    서버가 자신에게 연결된 클라이언트들에게 원격 함수 호출을 해야할 때 사용하는 Attribute.

    사용을 위해선 함수위에 반드시 [ClientRpc] Attribute가 붙어 있어야 하며 함수 이름은 ClientRpc로 끝나야 한다!

    클라이언트 RPC는 일반적으로 서버에서만 호출될 수 있다!!

    [ClientRpc]
    private void PongClientRpc(int somenumber, string sometext) { /* ... */ }

    Server RPC

    Can be invoked by a client to be executed on the server.

    클라이언트가 서버에 있는 함수 호출을 요청 혹은 작업을 요청할 때 사용하는 Attribute.

    사용을 위해선 함수위에 반드시 [ServerRpc] Attribute가 붙어 있어야 하며 함수 이름은 ServerRpc로 끝나야 한다!

    서버 RPC는 일반적으로 클라이언트나 호스트에서만 호출될 수 있다!!

    [ServerRpc]
    private void PingServerRpc(int somenumber, string sometext) { /* ... */ }

    Network Variables

    다른 접속 클라이언트들과 주기적으로 동기화 되는 변수 형식
    // everyone can read, only owner can write
    public NetworkVariable<Vector3> NetPosition = new NetworkVariable<Vector3>(
        default,
        NetworkVariableBase.DefaultReadPerm, // Everyone
        NetworkVariableWritePermission.Owner
    );

    주기적으로 다른 클라이언트들과 값을 계속 동기화해야 하는 변수가 있다면 위의 NetworkVariable 를 사용하면 된다.

    완전히 실시간으로 동기화 되는 것도 아니며 동기화 주기가 일정한 것도 아니다. 다만 계속 값을 교환할 뿐이다.

    NetworkVariableBase. 에서 읽기 권한을 NetworkVariableWritePermission. 에서 쓰기 권한을 설정할 수 있다.


    RPC vs Network Variables

    RPC 와 Network Variables 의 동작 차이
    using Unity.Netcode;
    
    public class TestNetworkScript : NetworkBehaviour
    {
        /// <summary>
        /// This is network variable
        /// </summary>
        public NetworkVariable<bool> IsOpen { get; } = new NetworkVariable<bool>();
        
        // And RPCs
        [ServerRpc]
        private void TestServerRpc()
        {
          if(IsServer) TestClientRpc();
        }
        
        [ClientRpc]
        private void TestClientRpc()
        {
          // ~
        }
    }

    Network Variables 는 주기적으로 값을 동기화 하기 때문에 늦게 접속한 클라이언트들도 그 값을 받아 볼 수 있다!


    RPCs 는 호출하는 타이밍에서만 명령이 떨어지기에 늦게 접속하는 플레이어는 그 값이나 명령을 받아볼 수 없다!

    즉 요약하자면 명령이나 값 전달을 원하는 시점에 호출 했을 때 Latency의 시간 이후 바로 클라이언트가 그 정보를 받아 보길 원한다면 RPCs를 사용하는 것이 좋다.

    주기적으로 값을 동기화 해야 되고 늦게 접속한 플레이어도 값을 봐야 한다면 Network Variable을 사용하는 것이 더 적합하다.

    🔍 참조 (References)

    이번 발표를 진행하며 참조한 사이트
  • 유니티 공식 홈페이지 : https://unity.com
  • 유니티 공식 넷코드 Repository (MIT) : https://github.com/Unity-Technologies/com.unity.netcode.gameobjects
  • 유니티 공식 넷코드 Documentation : https://docs-multiplayer.unity3d.com/netcode/current/about
  • About

    [SWTT] 간략한 유니티 넷코드 설명 영상

    Resources

    License

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published