멀티플레이 환경

CJB_ny·2022년 6월 25일
0

2D_Project

목록 보기
20/23

서버에서 패킷을 보내는 이부분이 조금 복잡 -> 수정 하는 작업 먼저 하도록 하겠다.

이렇게 중복 되는 부분 묶어 주도록 하자.

이게 messeage의 enum값인데

C#의 Reflection의 우아한 기능을 사용하면된다.

Reflection

리플렉션(Reflection)은 프로그램이 돌아가는 런타임 중에 객체의 정보를 조사하거나, 다른 모듈에 선언된 인스턴스를 생성하거나, 기존 개체에서 가져온 형식에 해당하는 메서드를 호출하거나 해당 필드와 프로퍼티에 접근할 수 있는 기능을 제공합니다.

리플렉션을 이용하기 전에 타입을 얻어야 하는데 다음 코드와 같은 방법으로 타입(Type) 객체를 얻을 수 있습니다.

https://blog.hexabrain.net/152?category=442691

정리하자면
동적으로? (무슨말) 객체에 접근하여 런타임 도중 해당 객체의 정보를 뽑아오는 기능

지금 Enum.Pare하게되면 MsgId에 해당하는 enum 중에서 msgName과 같은 이름인 것을 찾아 준다.(object타입으로 반환 해준다.


nullable

C# -> int 선언 -> 4바이트 메모리 할당.

C# 컴파일러는 이 메모리 공간에 반드시 어떤 값이든 넣도록 "강제"함.

-> 원하는 대로 안해주면 컴파일러는 실행파일 안 준다.

"값형식"에 한해서

"데이터형식? 변수이름;"이다.

값형식?
C#에서는 메모리에 공간에 데이터를 할당하는 두 가지 방법이 있습니다.
값 형식(Value Types)은 스택(Stack) 공간에 데이터를 할당하며, 참조 형식(Reference Types)은 힙(Heap) 공간에 데이터를 할당합니다.

값 형식(Value Types)과 참조 형식(Reference Types)의 주요 차이점

  • 값 유형은 스택 메모리에 저장되고 참조 유형은 힙 메모리에 저장됩니다.
  • 구조체, 문자열, 열거형을 제외한 모든 기본 데이터 유형은 값 유형의 Example입니다.
  • Class, string, array, delegate, interface는 참조 유형의 Example입니다.
  • 값 유형이 다른 값 유형에 복사되면 실제 값은 복사되지만 참조 유형이 다른 참조 유형에 복사되면 값의 참조 주소는 복사입니다.
  • 값 유형은 0 으로 초기화 하고 참조 유형은 NULL 로 초기화 할 수 있습니다 .

출처: https://developer-talk.tistory.com/50 [평범한 직장인의 공부 정리:티스토리]

열거형이란?

  • 하나의 이름으로 서로 관련있는 정수 값을 갖는 상수 집합을 정의

이제부터 진짜 멀티 환경 구현 ㄱㄱ

서버에 핵심적인 부분을 이렇게 dll파일로 공유하면 -> 해커들이 역분석 후 보안 취약 가능성 있다.

유니티는 정책상 같은 프로젝트를 두개를 켜서 작업을 할 수 없다.

방법

    1. 코드 자체를 통째로 복사를 해가지고 다른데서 관리를 하는 방식으로 해서 -> 버젼관리 툴을 사용해서 양쪽 갱신 -> 관리
    1. 빌드후 -> 빌드된 결과물을 두군데서 켜주는 방법

2번 방법 보여준다.

build setting -> 경로에 Builds파일 만들어주고 빌드 ㄱㄱ

오류있는 부분 수정해주고 (더블클릭해서 안들어가지는 에러는 무시해도 되는듯!)

이렇게 뜬다.

그래서 이 exe파일을 여러개 켜주는게 멀티플레이의 정석정인 방법이기는 하다.

이거 테스트할때 화면 작게 설정하는 방법 ㄱㄱ

우리는 현재 선봉대 역할 = GameScene에서 이렇게 수정 해주도록 하자.

그리도 다시 빌드 ㄱㄱ

요런 느낌에서 테스트 ㄱㄱ

그런데!!

이게 최선인가?

매번마다 코드를 바꿀때 마다 빌드를 해가지고 Build산하에 가가지고... 테스트를 해야 한다고 하면은 귀찮고 어렵다.

Tool로 할 수 있는거 => 코드로도 가능함.

이거 Build -> Build Settings에서 Build하는거 누르는것을 코드로도 가능하다는 말임. 전부다.

Editor가서 이렇게 만들어 주도록 하자.

코드 이렇게 해주는데 GetProjectName 함수는 뭐냐하면은 프젝 이름 받아오는 방법인데

(인터넷에 찾으면 바로나옴)

EditorBuildSettings의 scene은

여기 들어가 있는 씬을 말하는 것이다.

SwitchActive함수 부분은 그냥 그런값다 하면되고

for문에서 첫인자 -> 경로, 폴더 이름,

빌드타겟 = 윈도우, 옵션은 그냥 빌드하면 자동으로 실행해라 라는 옵션이다.

이부분들 당연히 외울 필요 없다.

이렇게 만들어주면 이렇게 뜸.

잘 된다. 4개도 다 잘됨.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글