ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Unity - 실시간 네트워크 서버 엔진 Nclib(Necial)사용
    Search: Unity Unity 2021. 3. 27. 11:09

    Unity 실시간 네트워크 서버 엔진 Nclib(Necial)사용

    https://github.com/Necial
    에서 Nc1PbsGit을 받아서 적당한 곳에 압축을 푼다.

    Server와 Client중 먼저 Server를 준비한다.

    Server 준비

    VisualStudio로 Nc1PbsSln.sln을 연다.

     

    만약 Dll찾을 수 없는 오류가 나면
    Nc1Ex1Server '속성' -> '참조 경로' -> 'Nc1Lib'폴더가 있는 경로를 지정하고 '폴더 추가'를 하면 된다.

     

    Nc1Ex1Server프로젝트에 Nc1Ex1ServerMainAm2.cs을 편집하면 된다.
    아래 코드는 브로드캐스트를 위한 작업. 추가 작업 필요 없게 바뀌었다.

    public class Sv : NccpcDll.NccpcNw1Sv //에
    {
      public List mCs = new List(); //를 선언
      //...
      public override void onNccpcNwEnter(int cti, string peer) {
      mCs.Add(cti); //를 추가
      }
      public override void onNccpcNwLeave(int cti) {
      mCs.Remove(cti); //를 추가
      }
      public override void onNccpcNwRecv(int cti, NccpcDll.NccpcNw1Pk2 ncpk) {
      using (var pkw = ncpk.copyDeep()) { this.send(mCs, pkw); } //를 추가
      }
    }

    수정 완료하고

     

    빌드하고 실행하면 서버 준비는 끝난다.

     

     

    Client 준비


    원하는 Unity 프로젝트를 준비한다.
    Assets폴더에 Plugins폴더를 만들고 'Nc1Lib'에 있는 Jc1Dn2_0.dll와 JcCtUnity1Dll.dll를 복사해둔다.

    Nc1PbsSln.sln솔루션에 Nc1Ex1Client프로젝트에 Nc1Ex1ClientMainAm1.cs파일속에
    "class Client : JcCtUnity1.JcCtUnity1"클래스 전체롤 복사해서 Unity script에 넣는다.

    Client에 클래스를 수정한다.


    innLogOutput()함수를 Unity용에 맞게 수정

    protected override void innLogOutput(string s1) { Debug.Log(s1); }
    public void qv(string s1) { innLogOutput(s1); }

     

    생성과 서버 접속 명령 추가

    connect()함수 호출

    
    Client mCt;
    void Start()
    {
    	//...
        mCt = new Client();
    	connect("127.0.0.1", 7777);
    	//...
    }

     

     

    framemove()함수 호출

    void Update()
    {
    	//...
    	mCt.framemove();
    	//...
    }

     

    기본적인 사용 준비는 끝났다.

     

    간단 사용 Ex

     

    //네트워크를 관리할 클래스 편집
    Client mCt = new Client(); //추가
    public void qv(string s1) { mCt.qv(s1); }
    
    // 보낼 데이터 처리
    int pkt = 1111;
    using (JcCtUnity1.PkWriter1Nm pkw = new JcCtUnity1.PkWriter1Nm(pkt)) {
    pkw.wReal32(0); pkw.wReal32(mY); pkw.wReal32(0);
    mCt.send(pkw);
    }
    
    //Client클래스에 받는 데이터 처리
    protected override bool onRecvTake(Jc1Dn2_0.PkReader1 pkrd) {
    Obj.transform.eulerAngles = new Vector3(pkrd.rReal32(), pkrd.rReal32(), pkrd.rReal32());
    return true;
    }

    이런식으로 원하는 내용을 넣어 사용하면 된다.

     

    댓글