서버에서 패킷을 보내는 이부분이 조금 복잡 -> 수정 하는 작업 먼저 하도록 하겠다.
이렇게 중복 되는 부분 묶어 주도록 하자.
이게 messeage의 enum값인데
C#의 Reflection의 우아한 기능을 사용하면된다.
리플렉션(Reflection)은 프로그램이 돌아가는 런타임 중에 객체의 정보를 조사하거나, 다른 모듈에 선언된 인스턴스를 생성하거나, 기존 개체에서 가져온 형식에 해당하는 메서드를 호출하거나 해당 필드와 프로퍼티에 접근할 수 있는 기능을 제공합니다.
리플렉션을 이용하기 전에 타입을 얻어야 하는데 다음 코드와 같은 방법으로 타입(Type) 객체를 얻을 수 있습니다.
https://blog.hexabrain.net/152?category=442691
정리하자면
동적으로? (무슨말) 객체에 접근하여 런타임 도중 해당 객체의 정보를 뽑아오는 기능
지금 Enum.Pare하게되면 MsgId에 해당하는 enum 중에서 msgName과 같은 이름인 것을 찾아 준다.(object타입으로 반환 해준다.
C# -> int 선언 -> 4바이트 메모리 할당.
C# 컴파일러는 이 메모리 공간에 반드시 어떤 값이든 넣도록 "강제"함.
-> 원하는 대로 안해주면 컴파일러는 실행파일 안 준다.
"값형식"에 한해서
"데이터형식? 변수이름;"이다.
값형식?
C#에서는 메모리에 공간에 데이터를 할당하는 두 가지 방법이 있습니다.
값 형식(Value Types)은 스택(Stack) 공간에 데이터를 할당하며, 참조 형식(Reference Types)은 힙(Heap) 공간에 데이터를 할당합니다.
출처: https://developer-talk.tistory.com/50 [평범한 직장인의 공부 정리:티스토리]
서버에 핵심적인 부분을 이렇게 dll파일로 공유하면 -> 해커들이 역분석 후 보안 취약 가능성 있다.
유니티는 정책상 같은 프로젝트를 두개를 켜서 작업을 할 수 없다.
2번 방법 보여준다.
build setting -> 경로에 Builds파일 만들어주고 빌드 ㄱㄱ
오류있는 부분 수정해주고 (더블클릭해서 안들어가지는 에러는 무시해도 되는듯!)
이렇게 뜬다.
그래서 이 exe파일을 여러개 켜주는게 멀티플레이의 정석정인 방법이기는 하다.
이거 테스트할때 화면 작게 설정하는 방법 ㄱㄱ
우리는 현재 선봉대 역할 = GameScene에서 이렇게 수정 해주도록 하자.
그리도 다시 빌드 ㄱㄱ
요런 느낌에서 테스트 ㄱㄱ
그런데!!
이게 최선인가?
매번마다 코드를 바꿀때 마다 빌드를 해가지고 Build산하에 가가지고... 테스트를 해야 한다고 하면은 귀찮고 어렵다.
이거 Build -> Build Settings에서 Build하는거 누르는것을 코드로도 가능하다는 말임. 전부다.
Editor가서 이렇게 만들어 주도록 하자.
코드 이렇게 해주는데 GetProjectName 함수는 뭐냐하면은 프젝 이름 받아오는 방법인데
(인터넷에 찾으면 바로나옴)
EditorBuildSettings의 scene은
여기 들어가 있는 씬을 말하는 것이다.
SwitchActive함수 부분은 그냥 그런값다 하면되고
for문에서 첫인자 -> 경로, 폴더 이름,
빌드타겟 = 윈도우, 옵션은 그냥 빌드하면 자동으로 실행해라 라는 옵션이다.
이부분들 당연히 외울 필요 없다.
이렇게 만들어주면 이렇게 뜸.
잘 된다. 4개도 다 잘됨.