본 SocialVille 예제는 현재 공식 지원하는 예제가 아닙니다. 때문에 현재 최신 프라우드넷과 맞지 않은 부분이 다소 있습니다. 최신 프라우드넷에 부합하는 예제들은 프라우드넷 설치 폴더 내의 Sample 폴더에 있는 예제들 뿐입니다.
예제 다운로드 링크: RealtimeSocialVille.zip
해당 파일엔 실습에 필요한 라이브러리 파일 및 그래픽 리소스, 동영상에서 프로그래밍한 코드 등이 들어있습니다.
본 동영상은 Unity 5.3.4p6 와 VisualStudio 2013 기준으로 설명되었습니다. 버전에 따라 화면구성이 다를 수 있습니다.
4.1데모
실시간 멀티플레이 소셜 게임 튜토리얼입니다.
4.2RealtimeSocialVille 실습 동영상
클라이언트와 서버의 접속 및 RMI 메시지 이용 #1
1.7.42965 버전부터 ErrorType.ErrorType_Ok 값이 ErrorType.Ok로 바뀌었습니다.
그림 4-11번 영상
37초 파일명에 공백이 들어가는 경우 Unity에서 인식하지 않습니다. 파일명 작성시 주의하셔야 합니다.
그림 4-238초 : 유니티 영역 구분
38초 C# 스크립트 생성 후 Game Client에 붙여주는 과정이 생략 되었습니다.
스크립트를 Game Object에 붙여주지 않을 경우 Unity에서 인식하지 않습니다.
1 Hirarchy탭에서 GameClient를 선택한 후
2 Project탭의 GameClient 파일을 드래그하여
3 Inspector창에 붙여 주십시오.
그림 4-346초 : 클라이언트 프로젝트 폴더에 붙여넣은이후의 폴더구조
46초 영상의 ProudNet\lib\plugins폴더는 ProudNet\lib\DotNet폴더로 변경 되었습니다.
클라이언트와 서버의 접속 및 RMI 메시지 이용 #2
그림 4-42번 영상
53초 ProudDotNetClient.dll과 ProudDotNetServer.dll은 예제파일의 ProudNet\lib\x64\DotNet에 위치하고 있습니다.
그림 4-55분 45초 : 수정한 pidl.bat파일 내용과 저장된 폴더 위치
5분 45초 배치 파일 만들기 과정은 아래와 같이 진행해 주십시오.
1 예제파일 SngServerDotNet\pidl.bat을 복사하여 PIDL.exe가 있는 경로에 붙여넣기 해 주십시오.
2 붙여넣기 한 pidl.bat 파일을 메모장으로 열어, 경로를 수정해 주십시오.
3 영상을 그대로 따라 했다면, 해당 파일의 매 줄마다 붙어있는 ..\ProudNet\util\PIDL.exe를 PIDL.exe로 수정해 주십시오.
10분 48초 server.Dispose()
함수 만드는 파트는 영상에서 생략 되었습니다. 해당 함수는 SngServer
의 멤버함수로, 구현은 영상의 9분 3초를 참고해 주십시오. 단, 9분 3초의 경우 클라이언트(m_netClient
)의 멤버함수를 불러줬지만, 이것은 서버이기 때문에 m_netServer
의 멤버함수를 불러줍니다.
11분 47초 Proxy와 Stub를 만든 후, 빌드 결과를 확인해 보려면 PIDL에서 자동 생성된 Proxy & Stub 관련 *.cs파일을 프로젝트에 첨부해줘야 합니다. 이 내용은 3번 영상의 18초를 참고해 주십시오.
12분 5초 DotNet 폴더를 붙여 넣었으므로, 나머지 폴더는 붙여 넣지 않아도 런타임 에러가 뜨지 않습니다. 오히려, 붙여 넣으면 유니티 상에서 Muiltiple plugins with the same name 경고가 출력 됩니다.
클라이언트에서 나무심기 및 네트워크 동기화 #1
그림 4-63번 영상
1분 36초 ville
객체는 Ville_S
타입의 클래스로, 2분 37초에서 만듭니다. 이후, 실제로 해당 객체를 사용하는 부분은 같은 영상의 4분 10초를 참고해 주십시오.
2분 11초 GUI.label(new Rect(10, 30, 200, 80), m_failMessage)
에서 m_failMessage
를 코딩하는 부분은 생략되었습니다. m_failMessage
는 GameClient
클래스의 string
형 멤버변수입니다. 혹은, 해당 부분을 리터럴로 바꿀 수도 있습니다.
ex) GUI.label(new Rect(10, 30, 200, 80), "로그온 실패")
3분 52초 WorldObject_S
클래스는 4분 47초에서 만듭니다.
4분 4초 m_worldObjects
를 만든 후 아래 줄에 HostID를 만들고 있습니다. 영상 하단 자막에 가려 잘 안 보일 염려가 있으니, 주의해 주십시오.
4분 23초 ConcurrentDictionary는 using System.Collections.Concurrent;
를 포함하여 사용할 수 있습니다.
클라이언트에서 나무심기 및 네트워크 동기화 #2
그림 4-74번 영상
그림 4-850초 : Main camera의 Transform값 수정 및 Scene 보기 모드 변경
50초 Plane이 나오지 않을 경우,
1 Hierarchy 탭의 Main Camera를 누른 후
2 우측의 Inspector 탭에서 위와 같이 값을 셋팅해 주십시오.
혹은,
3 중앙 Scene탭의 2D를 눌러 3D보기 모드로 전환해 주십시오.
그림 4-91분 4초 : 붙여넣기 후의 Unity Project 탭
1분 4초 Material은 예제 폴더의 SngClient\Assets\Materials\에 있습니다. 해당 폴더를 클라이언트\Assets 폴더에 넣어주십시오.
Position | 0 | 0 | 30 |
Rotation | 50 | -30 | 0 |
Scale | 1 | 1 | 1 |
1분 24초 Directional light의 Transform 값은 위와 같습니다.
1분 30초 InVillage.cs의 GameClient
도 partial class
입니다.
3분 17초 람다함수 작성 후 반드시 세미콜론으로 끝내야 합니다.
3분 26초 Start 함수 첫째 줄 내용은(Nettention.Proud.HostID remote,Nettention.Proud.RmiContext rmiContext, int groupID, int result, String comment
)입니다. SocialGameS2C_stub.cs의 ReplyLogon
의 인자값이 그대로 넘어왔습니다.
3분 28초 m_myP2PGroupID
는 GameClient
의 멤버 변수입니다. 같은 영상 4분 21초를 참고 해 주십시오.
4분 16초 Start_InVilleRmiStub()
함수의 상세한 구현은 4분 29초에서 이어집니다.
4분 35초 Freefab은 예제 폴더의 SngClient\Assets\Prefabs\에 있습니다. 해당 폴더를 클라이언트\Assets 폴더에 붙여넣어 주십시오. Material을 붙여 넣을 때와 동일합니다.
Position | 0 | 220 | -130 |
Rotation | 60 | -360 | -360 |
Scale | 1 | 1 | 1 |
4분 54초 카메라 각도 값은 영상을 참조하기보단 위와 같은 값을 넣는 것이 좋습니다.
5분 43초 Monitor는 using System.Threading;
을 포함하여 사용할 수 있습니다.
7분 6초 list
변수의 선언은 7분 29초에 있습니다.
클라이언트에서 나무심기 및 네트워크 동기화 #3
그림 4-105번 영상
if (pickedObject.name == "Terrain") { // request to plant a tree m_C2SProxy.RequestAddTree(HostID.HostID_Server, RmiContext.ReliableSend, hit.point); } else if (pickedObject.GetComponentInParent(typeof(WorldObject))) { // Unity names "Tree (Clone)" e.g. WorldObject wo = (WorldObject)pickedObject.GetComponentInParent(typeof(WorldObject)); if (wo != null) { int treeID = wo.m_id; m_C2SProxy.RequestRemoveTree(HostID.HostID_Server, RmiContext.ReliableSend, treeID); } }
3초 일부 소스코드 변경이 있었습니다. 위와 같이 타이핑 해 주십시오.
클라이언트간 실시간 P2P 통신 #1
그림 4-116번 영상
그림 4-122분 13초 : Scribble을 등록한 후의 Inspector탭
2분 13초 위 그림처럼, GameClient의 Scribble Prefab을 등록 하는 부분이 생략 되었습니다.
1 Hierarchy 탭의 GameClient를 선택한 후
2 하단 Project 탭의 Assets > Prefabs > Scribble을 선택하고
3 Scribble Prefab의 None에 드래그 앤 드랍 해 주십시오.