Anz Networking Unity by dev-anz - 4

Games & ProjectsNetwork

Simple Unity Networking Package Similar to UNet or PUN

MIT LicenseUpdated 88 days agoCreated on November 22nd, 2018

Anz.Networking.Unity

  • Simple Unity Networking Package
  • Based on Anz.Networking
  • RPC and Command which resembles with UNet or PUN
  • Much easier than UNet and PUN

Why

UNet이나 PUN 같은 몇몇 유명한 네트워크 패키지들은

  • 모든 기능을 사용하려면 돈을 내야 함
  • 복잡함

우리는 더 간단하고 무료로 사용할 수 있는 게 필요하다

What

  • 게임오브젝트 동기화 및 RPC 통신
  • 해킹과 성능 이슈에 민감한 게임에는 적합하지 않을 수 있음

채팅 예제

void SendChatMessage(string chat)
{
    networkView.Command("CmdChat", chat);
}

// Command 는 클라가 서버로 보내는 메시지
[Command]
void CmdChat(string chat)
{
    RpcChat(chat);
    networkView.RPC("RpcChat", chat);
}

// RPC 는 서버가 클라로 보내는 메시지
[RPC]
void RpcChat(string chat)
{
    PrintChatMessage(chat);
}

Usage

  • Edit - Project Settings - Player - Other Settings - Configuration - Api Compatibility Level.Net 2.0 으로 설정
  • UnityNetworking.prefab 가 씬 위에 올라가 있어야 한다

Server

서버개설

Anz.Networking.UnityNetwork.OpenServer(10, 22277);

최대인원수를 10, port는 22277로 설정
port를 따로 지정해주지 않으면 동적 포트가 자동 할당되고 할당된 포트번호를 반환

Client

접속

Anz.Networking.UnityNetwork.Connect("127.0.0.1", 22277);

UnityNetworkView

이 스크립트가 붙은 게임오브젝트는

  • RPC, Command 메시지를 주고받을 수 있다
  • 서버와 클라에서 동시에 생성(Spawn) 될 수 있다
// 클라가 서버의 CmdMethod(int) 메소드를 호출한다
// 파라미터로 1을 전달한다
networkView.Command("CmdMethod", 1);

// 서버가 클라의 RpcMethod(Vector3) 메소드를 호출한다.
// 파라미터로 Vector3.one을 전달한다
networkView.RPC("RpcMethod", Vector3.one);

양쪽의 어느 오브젝트가 서로 짝인지 알기 위해서 시스템은 GUID를 사용한다.
UnityNetworkView 가 붙은 오브젝트를 서버가 Spawn 하면 GUID가 부여되고 같은 GUID를 가진 오브젝트가 클라에 생성된다.

Demo

자세한 사용법은 Demo 참고
빌드 후 게임을 2개 실행하거나 하나는 에디터로 실행해서 테스트

Issues

  • Segmented RPC, Segmented Command 는 thread-unsafe 함
  • 하지만 한 쓰레드 내에서는 호출 순서와 실행 순서가 보장되므로 크게 신경쓸 부분은 아님

기타 질문이나 버그는 Issues 에

License

MIT

Show all projects by dev-anz