넷드론클러스터사용안내서 목차 1. 제품구성...2 2. 플랫폼구성...3 2.1. VirtualBox 설치...3 2.2. CentOS 설치...4 2.3. OS 환경설정...5 2.4. NTP 설정...6 2.5. APM 설정...7 2.6. BOOT 설정...8 3. 빌드준비...9 3.1. 개발도구...9 3.2. 클라이언트초기화...10 3.3. SSH 자동인증...11 3.4. SVN 환경설정...12 3.5. 서버환경설정...13 3.6. 서버초기화...16 3.7. 서버빌드...18 3.8. 서버실행...19 4. 지원프로그램...20 4.1. 필수도구...20 4.2. 응용도구...21 5. 사용방법...22 5.1. 패키지소개...22 5.2. 게임오브젝트...23 5.3. 오토프레임워크...24 5.4. 로그및메세지...25 5.5. 유니티엔진분리...25 6. 치트키목록...26 7. 게임테스트...28 1
1. 제품구성 구분분류 1 분류 2 비고 SDK Cluster Engine Tools.NET Template NetDroneUnity DataConverter DummyClient ReuseMemory CryptTester NetCommon UnityClient AuthServer LinkServer MainServer Essentials 크로스플렛폼 전체소스 CSV to Binary CSV 변환도구 RTCP, RUDP 테스트도구 가상메모리풀테스트도구 RSA RC5/RC6 테스트도구 Client/Server 공유소스 솔루션전체기능을테스트할수있는치트키클라이언트 인증및메인서버연결카운트를이용한로드밸런싱서버 서버간통신및연결관리서버 게임로직서버 DB 스키마 빌드스크립트 원격서버실행도구 Web Template RegiServer DB 로드밸런싱을위한계정등록모듈 2
2. 플랫폼구성 2.1. VirtualBox 설치 Oracle VirtualBox 는윈도우즈환경에서손쉽게리눅스환경을테스트할수있는가상환경을제공하는소프트웨어입니다. 만약당신이 VMware, Hyper-V 사용에익숙하다면해당소프트웨어를사용하셔도괜찮습니다. Oracle VirtualBox 다운로드 https://www.virtualbox.org 클러스터템플릿은 Windows, Linux, OSX 에서모두안정적인성능을보여주며, 본문서는 Linux 를기준으로작성됩니다. 3
2.2. CentOS 설치 리눅스배포판중하나인 CentOS 는업스트림소스인레드햇엔터프라이즈리눅스와완벽히호환되는무료기업용플랫폼입니다. 만약당신이 Utuntu, Gentoo 사용에익숙하다면해당배포판을사용하셔도괜찮습니다. CentOS (The Community ENTerprise Operating System) 다운로드 https://www.centos.org 클러스터템플릿은 Windows, Linux, OSX 에서모두원할히작동하지만본문서에서는 CentOS 6 를기준으로만안내합니다. CentOS 설치는되도록서버용으로기본패키지들만설치하세요. 최신패키지업데이트 root # yum -y update 필수패키지설치 root # yum -y install policycoreutils-python gcc gdb cmake mono mono-devel subversion rpmbuild createrepo unzip 4
2.3. OS 환경설정 처음 CentOS 를설치하면커널파라미터, IO 제한해제, SELinux, 방화벽, 호스트이름등을클러스터서버실행을위해설정해야합니다. 구분 참고 비고 sysctl essentials/share/etc/sysctl.conf 커널파라미터설정 ulimit essentials/share/etc/security/limits.conf IO 제한해제 selinux essentials/share/etc/selinux/config SELinux 모드변경 essentials/utils/init_make_sebool.sh SELinux 제한해제 firewall essentials/share/etc/sysconfig/iptables 방화벽설정 hosts essentials/share/etc/hosts 호스트이름설정 시스템자원에대한효율적인처리를위해커널파라미터설정이필요합니다. 클러스터서버는동시접속 4000 에서최대 8000 까지를처리할수있어논리적 IO 제한을해제시켜야합니다. (ulimit -a 명령어로 open files 가 65535 까지풀려있는지확인필요 ) 실제서비스운영시에는 SELinux 가 enforcing 상태여야안전하며, 개발장비에서는 permissive 상태가편리합니다. Essentials 에포함되어있는 init_make_sebool.sh 를실행하면 init_allow_sebool.sh 라는 Shell Script 가생성됩니다. 이는 SELinux 의주요시스템에대한제한들을모두허용해주는처리를하게됩니다. (enforcing 상태에서는반드시실행이필요하며, secure_mode 만 off 로처리됨 ) 클러스터서버에외부접속을허용하기위해서는 iptables 의설정이필요합니다. 관련설정을수정한뒤 /etc/init.d/iptable restart 를실행하세요. (iptables -L -n 으로룰확인가능 ) 클러스터서버는호스트이름을기반으로서버간접속을실행합니다. 이는배포시편리한점들이많아활용하는것을권장합니다. 호스트이름편집 root # vi /etc/hosts localhost 대신별칭을추가하여사용할수있습니다. 별칭위치수정이가능할경우자유롭게수정하셔도괜찮습니다. 5
2.4. NTP 설정 Windows, Linux, OSX 는 RTOS(Real-Time Operating System) 가아닌 GPOS(Normal General Purpose Operating System) 입니다. 이는시스템시간이조금씩오차가발생하는 OS 를뜻하며네트워크서버에서는정확한시간동기화가매우중요합니다. ntpdate 명령어를이용해외부서버에서시간을동기화하는것도좋지만업데이트거부등이일어날경우오차가발생할수있게됩니다. 이를보완하기위해 NTPD 설정이필요합니다. NTPDATE 설치 root # yum install ntpdate NTPD 설치 root # yum install ntp 구분참고비고 ntpd essentials/share/etc/ntp.conf 네트워크시간동기화설정 sync essentials/utils/timesync.sh ntpdate 실행및 hwclock 실행 NTPD 를한곳에두고다른서버들이 ntpdate 를통해이곳에서업데이트하도록설정하세요. NTPD 가있는서버에서는 timesync.sh 가외부서버를바라봐야합니다. NTPD 가없는서버에서는 timesync.sh 가 NTPD 서버를바라봐야합니다. 6
2.5. APM 설정 최신 APM 패키지를설치하려면반드시다음저장소들을미리추가하시기바랍니다. EPEL 저장소 root # yum install epel-release REMI 저장소 root # wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm root # rpm -Uvh remi-release-6.rpm 구분 버전 패키지 Apache HTTP Server 2.2 httpd httpd-tools httpd-devel php70w-process php70w-gd php70w-mysqlnd php70w-xmlrpc php70w-imap php70w-pgsql php70w-tidy php70w-bcmath php70w-xml PHP 7.0 MySQL 5.1 php70w php70w-pdo php70w-soap php70w-snmp php70w-mcrypt php70w-cli php70w-common php70w-mbstring php70w-intl php70w-ldap mysql-server mysql-devel mysql-libs mysql APM 설치에필요한패키지목록입니다. Apache HTTP Server 설치 root # yum -y install httpd httpd-tools httpd-devel PHP 설치 root # yum -y install php70w-process php70w-gd php70w-mysqlnd php70w-xmlrpc php70w-imap php70w-pgsql php70w-tidy php70w-bcmath php70w-xml php70w php70w-pdo php70w-soap php70w-snmp php70w-mcrypt php70w-cli php70w-common php70w-mbstring php70w-intl php70w-ldap MySQL 설치 root # yum -y install mysql-server mysql-devel mysql-libs mysql root # mkdir -p /home/data/mysql root # mkdir -p /var/lib/mysql root # mkdir -p /var/run/mysqld root # chown -R mysql:mysql /home/data/mysql root # chown -R mysql:mysql /var/lib/mysql root # chown -R mysql:mysql /var/run/mysqld 7
구분참고비고 MySQL essentials/share/etc/my.cnf datadir /home/data/mysql socket /var/lib/mysql/mysql.sock log-slow-queries /var/log/mysqld.slow.log log-error /var/log/mysqld.log pid-file /var/run/mysqld/mysqld.pid 설정파일에서다루는경로목록이며, 경로수정시해당디렉토리에는 mysql 권한이부여되어야합니다. 설치완료및 my.cnf 편집후 mysql_install_db 로 DB 초기화를실행하세요. /etc/init.d/mysqld restart 로 MySQL 을실행한뒤 mysqladmin 으로 system 계정을추가해야합니다. 설치확인 웹루트경로에 test.php 파일을만든뒤 <?php echo phpinfo();?> 를추가하세요. /etc/init.d/httpd restart 명령어로웹서버를실행합니다. 크롬브라우져등을열어 http://localhost/test.php 를실행하면 PHP 의설치상세정보를확인할수있습니다. 2.6. BOOT 설정 본문서에서다루는 CentOS 는 System V 스타일의 Init Script 를기반으로하고있습니다. 이를관리하기위한명령어로는 chkconfig 와 ntsysv 가있으며, setup 명령어를통해실행하는것도가능합니다. 서비스자동실행설정 root # ntsysv httpd, mysqld, ntpd, ntpdate 가체크되어있는지확인하세요. 8
3. 빌드준비 3.1. 개발도구 클러스터템플릿은 MonoDevelop 으로개발이가능합니다. 최신버전을다운로드받아설치하시기바랍니다. 다운로드 http://www.monodevelop.com 클러스터템플릿은 Visual Studio 로개발이가능합니다. 최신버전을다운로드받아설치하시기바랍니다. 다운로드 https://imagine.microsoft.com/ko-kr/catalog/product/101 Windows 환경에서각각의 IDE 를설치한뒤 VirtualBox/CentOS 를서버로두고개발하는것이가능합니다. 9
3.2. 클라이언트초기화 NetDrone Cluster Scene 순서와동일한 Enum 값을선언하고있어순서가매우중요합니다. 빌드후클라이언트여러개를실행하여테스트할수있습니다. 10
3.3. SSH 자동인증 클러스터템플릿은원격노드에서실행될프로세스를 SSH 서비스를통해컨트롤센터에서관리할수있도록구성하고있습니다. 이를위해다수의노드와컨트롤센터사이에는패스워드확인없이인증이되어야합니다. 개인키, 공개키생성 root # ssh-keygen 개인키, 공개키는자동인증할대상노드들에서생성하는것입니다. Key 위치는기본값으로생성하세요. Passphrase 는비워두고넘어가세요. 공개키등록 root # cd ~/.ssh root # vi authorized_keys 컨트롤센터의 ~/.ssh 경로에서 authorized_keys 파일을생성한뒤각노드들의공개키를등록해주세요. 공개키는 ~/.ssh 위치의 id_rsa.pub 입니다. 만약 localhost 에서클러스터템플릿을실행해야한다면 authorized_keys 에 localhost 의 id_rsa.pub 를등록해주세요. 자동인증확인 root # ssh root@[hostname] 패스워드를묻지않고로그인되어야합니다. 11
3.4. SVN 환경설정 클러스터템플릿은자동빌드스크립트에서 svn commit/update 명령등을실행하고있습니다. 이는 Jenkins 등과의연동을편리하게해주며 SVN 서버설정을필요하게합니다. 웹서버연동 root # yum -y install mod_dav_svn Subversion 설치방법은참고자료가많이있어본문서에서는다루지않습니다. 구분분류 1 분류 2 외부경로 netcommon include lib src netdroneunity mysql authserver linkserver mainserver unityclient 클러스터저장소 include netdroneunity netcommoncl netcommon/include/netdroneunity netcommon/src lib mysql netcommon/lib/mysql include netdroneunity netcommoncl netcommon/include/netdroneunity netcommon/src lib mysql netcommon/lib/mysql include netdroneunity netcommoncl netcommon/include/netdroneunity netcommon/src lib mysql netcommon/lib/mysql Assets SDK NetDroneUnity NetCommon netcommon/include/netdroneunity netcommon/src 각프로젝트의외부경로참조설정을이렇게잡아두면 svn commit/update 실행시모든프로젝트소스코드가동기화됩니다. 자동빌드스크립트를사용하지않는다면 SVN 환경설정은넘어가도괜찮습니다. 12
3.5. 서버환경설정 NDCF 는기본적으로하나또는각각의파일에서여러개의프로세스에대한설정옵션을프로세스이름과서버아이디를통해서구분합니다. [process_name_1:server_id_100]... [process_name_1:server_id_101]... [process_name_2:server_id_100]... [process_name_2:server_id_101]... # 마크를사용한주석입력을사용하는것이가능하며 Defines.h 에새로운 Key 를추가하여 CfgMgr 함수에서읽어오는것이가능합니다. 구분위치키값비고 gameclient-unity.txt 클라이언트 NDCF 설정 Assets /Resources/Config HeaderCrypt true, false 패킷헤더암호화 BinaryDB true, false Binary CSV 사용 SkipChannel true, false 채널상태무시 구분위치키값비고 serverinfo.txt 클라이언트 DB 설정 Assets /Resources/Text si_option1 IP, DNS IP 및 DNS 선택가능 si_ip IPv4 IP 및 DNS 입력가능 si_port 0-65535 AUTH, MAIN 서버는도메인으로접속을해야할경우 si_option1 의 DNS 이며, si_ip 에도메인을입력합니다. WEB 서버주소를정확히입력하세요. 13
구분 키 값 비고 DefaultInterface iface 외부용인터페이스 DefaultPort 0-65535 외부용포트 BackboneInterface iface 내부용인터페이스 BackbonePort 0-65535 내부용포트 MaxConnection 10-60000 최대접속자수 HeaderCrypt true, false 패킷헤더암호화 cl_authserver-linux.txt SecureAuth true, false MySQL 보안접속 AuthHost localhost 인증서버호스트명 AuthDB CL_game_auth 인증서버 DB 명 AuthUser test 인증서버계정명 AuthPassword passw0rd 인증서버계정암호 LogPath /home/data/games/cl/log 게임로그기록 InfoPath /home/data/games/cl/info 프로세스정보기록 BackboneInterface iface 내부용인터페이스 MaxConnection 10-60000 최대접속자수 HeaderCrypt true, false 패킷헤더암호화 SecureAuth true, false MySQL 보안접속 cl_linkserver-linux.txt AuthHost localhost 인증서버호스트명 AuthDB CL_game_auth 인증서버 DB 명 AuthUser test 인증서버계정명 AuthPassword passw0rd 인증서버계정암호 LogPath /home/data/games/cl/log 게임로그기록 InfoPath /home/data/games/cl/info 프로세스정보기록 cl_mainserver-linux.txt DefaultInterface iface 외부용인터페이스 DefaultPort 0-65535 외부용포트 BackboneInterface iface 내부용인터페이스 BackbonePort 0-65535 내부용포트 MaxConnection 10-60000 최대접속자수 HeaderCrypt true, false 패킷헤더암호화 SecureAuth true, false MySQL 보안접속 AuthHost localhost 인증서버호스트명 AuthDB CL_game_auth 인증서버 DB 명 AuthUser test 인증서버계정명 14
AuthPassword passw0rd 인증서버계정암호 LogPath /home/data/games/cl/log 게임로그기록 서버 NDCF 설정 InfoPath /home/data/games/cl/info 프로세스정보기록 구분 키 값 비고 Version 1.1.0 프로세스버전 SecureShell localhost:22 SSH 위치 ModeType TEST, CLEANUP, RESCUE 실행타입 cl_remote.txt 서버원격제어설정 ConfPath /etc/games/ cl_authserver-linux.txt NDCF 위치 ExecPath /opt/local/bin 실행파일위치 MsgPath /home/data/games/cl/msg 출력정보기록 InfoPath /home/data/games/cl/info 프로세스정보기록 cl_remote.txt 파일을설정한다면콘솔에서짧은명령어입력만으로도전체노드의프로세스를관리할수있습니다. cl_control.sh 는 cl_remote.txt 파일없이도파라미터입력만으로작동합니다. 15
3.6. 서버초기화 DB 생성및계정추가 mysql> create database CL_client_info_1_1_0 mysql> create database CL_game_info_1_1_0 mysql> create database CL_game_auth mysql> create database CL_game_player_1 mysql> create database CL_game_player_2 mysql> create database CL_game_server mysql> create user 'test'@'%' identified by 'passw0rd' mysql> grant usage on *.* to 'test'@'%' identified by 'passw0rd' mysql> grant SELECT, INSERT, UPDATE, DELETE, EVENT, TRIGGER, SHOW VIEW, EXECUTE ON `CL_%`.* to 'test'@'%' mysql> flush privileges DB 기본스키마설치 root # mysql -uroot -p CL_client_info_1_1_0 < essentials/dbms/cl_client_info_1_1_0 root # mysql -uroot -p CL_game_info_1_1_0 < essentials/dbms/cl_game_info_1_1_0 root # mysql -uroot -p CL_game_auth < essentials/dbms/cl_game_auth root # mysql -uroot -p CL_game_player_1 < essentials/dbms/cl_game_player_1 root # mysql -uroot -p CL_game_player_2 < essentials/dbms/cl_game_player_2 root # mysql -uroot -p CL_game_server < essentials/dbms/cl_game_server 16
서비스설정파일설치 root # mkdir -p /etc/games root # cp -a essentials/config/cl_authserver-linux.txt /etc/games/ root # cp -a essentials/config/cl_linkserver-linux.txt /etc/games/ root # cp -a essentials/config/cl_mainserver-linux.txt /etc/games/ 리눅스시스템 로그경로생성 root # mkdir -p /home/data/games/cl/info root # mkdir -p /home/data/games/cl/log root # mkdir -p /home/data/games/cl/msg 리눅스시스템 C:\> mkdir C:\data\games\cl\info C:\> mkdir C:\data\games\cl\log C:\> mkdir C:\data\games\cl\msg 윈도우즈시스템 info 경로에는 GID, PPID, PID 정보가기록됩니다. log 경로에는 NDLF 포멧의게임로그가기록됩니다. msg 경로에는 stdout 으로출력되는서버정보가기록됩니다. 실행스크립트설치 root # mkdir -p /opt/local/bin root # cp -a essentials/utils/cl_remote.txt /etc/games/ root # cp -a essentials/utils/cl_control.sh /opt/local/bin/ root # cp -a essentials/utils/cl_command.sh /opt/local/bin/ 리눅스시스템 cl_remote.txt 는 cl_control.sh 에서사용하는설정파일입니다. cl_command.sh 는원격노드의 /opt/local/bin 경로에설치되는스크립트입니다. cl_control.sh 는원격노드에설치되어있는 cl_command.sh 를통해서비스프로세스들을관리하는도구입니다. cl_control.sh 를 GMTool 에붙일경우 GMTool 에서다수의서비스프로세스를관리하는것이가능하게됩니다. 17
3.7. 서버빌드 클러스터템플릿은 MonoDevelop 이나 Visual Studio 로솔루션파일을열수있습니다. 또한 monodevel 설치및 bash 실행이가능한환경에서는 make.sh 를통해콘솔에서빌드가가능합니다. 수동빌드 (xbuild) root #./make.sh root #./make.sh Debug root #./make.sh Release make.sh 만실행할경우 Debug 와 Release 가모두빌드됩니다. 자동빌드 (xbuild+svn) root #./autobuilder.sh Debug root #./autobuilder.sh Debug install root #./autobuilder.sh Debug install /opt/local root #./autobuilder.sh Release root #./autobuilder.sh Release install root #./autobuilder.sh Release install /opt/local 자동빌드를사용하기위해서는우선 SVN 저장소구조가설정되어있어야합니다. SVN 체크아웃으로클러스터프로젝트를모두다시받으세요. autobuilder.sh 는프로젝트경로들보다상위에있어야합니다. 사용중인 SVN 의계정정보를 autobuilder.sh 의 SVN_USER, SVN_PASSWD 에입력하세요. 18
3.8. 서버실행 클러스터템플릿은다수의노드에서실행될서비스프로세스를 SSH 서비스를통해컨트롤센터에서관리할수있도록지원합니다. 구분 명령어 비고 BOOT /opt/local/bin/cl_control.sh -u root -b 서버시작 KILL /opt/local/bin/cl_control.sh -u root -k GID, PPID, PID로종료 TEST /opt/local/bin/cl_control.sh -u root -t PID가살아있는지확인 CLEANUP /opt/local/bin/cl_control.sh -u root -C PID 종료후 info 파일제거 RESCUE /opt/local/bin/cl_control.sh -u root -R 프로세스이름으로종료 FORCED BOOT /opt/local/bin/cl_control.sh -u root -bf 강제시작 FORCED KILL /opt/local/bin/cl_control.sh -u root -kf 강제종료 명령어목록 SSH 자동인증설정이되어있어야정상적인작동을하게됩니다. 수동실행 root # mono --debug./cl_linkserver.exe -s 201 -c /etc/games/cl_linkserver-linux.txt root # mono --debug./cl_authserver.exe -s 1 -c /etc/games/cl_authserver-linux.txt root # mono --debug./cl_mainserver.exe -s 101 -c /etc/games/cl_mainserver-linux.txt root # mono --debug./cl_mainserver.exe -s 102 -c /etc/games/cl_mainserver-linux.txt Linux System C:\> cl_linkserver.exe -s 201 -c cl_linkserver-windows.txt C:\> cl_authserver.exe -s 1 -c cl_authserver-windows.txt C:\> cl_mainserver.exe -s 101 -c cl_mainserver-windows.txt C:\> cl_mainserver.exe -s 102 -c cl_mainserver-windows.txt Windows System TRACE 정보출력을원하신다면 --debug 옵션으로실행하세요. 19
4. 지원프로그램 4.1. 필수도구 넷드론엔진의유니티패키지에는 csv 파일을 bytes 포멧으로일괄변경하는데이터변환도구가포함되어있습니다. Assets/../Tools 경로아래에 DataConverter.zip 파일을복사하여풀어주세요. 위치 : Tools/DataConverter.zip DataConverter Dataconverter/temp/ 아래에테스트용 csv 파일이들어있습니다. DataConverter.exe 를실행할경우지정된위치의모든 CSV 파일들은 Bytes 포멧으로변경됩니다. 생성된 Bytes 파일들은 Assets/NetDrone Cluster/Client/Resources/Binary 아래에복사하세요. 오토프레임워크의 CDBM 은 CSV, Bytes 포멧을모두지원합니다. CSV 구분자는콤마만사용해야하며첫줄에는열이름이반드시필요합니다. TCP 와 Reliable UDP 테스트가가능한클라이언트입니다. Assets/../Tools 경로아래에 DummyClient.zip 파일을복사하여풀어주세요. 위치 : Tools/DummyClient.zip DummyClient 원격명령어실행도구로사용할수있습니다. 부하측정도구로사용할수있습니다. 20
4.2. 응용도구 링크드리스트로구현한재사용가능메모리구조테스터입니다. Assets/../Tools 경로아래에 ReuseMemory.zip 파일을복사하여풀어주세요. 위치 : Tools/ReuseMemory.zip ReuseMemory Linked List 를기반으로한메모리재사용구조를보여줍니다. 반복횟수등을입력하여테스트합니다. 아이템같이메모리할당및해제가자주일어나는곳에사용하세요. 자체구현 (RC5, RC6 기반 ) 한암호화기능을테스트할수있는도구입니다. Assets/../Tools 경로아래에 CryptTester.zip 파일을복사하여풀어주세요. 위치 : Tools/CryptTester.zip CryptTester 넷드론엔진이제공하는 RC5/RC6 의암호화및복호화결과를보여줍니다. 문자열과패킷테스트가가능합니다. 21
5. 사용방법 5.1. 패키지소개 구분 분류 비고 Animation Audio Binary Config Resources Scenes Scripts SDK Server Tools Material Model Prefabs Text Texture Audio Camera DB Item Net State UI Unit Util World NetDroneUnity NetCommon Plugins Standard Assets 예제용씬 프로토콜패킷처리기능 클라이언트상태처리기능 플레이어유닛처리와관리기능 Config 처리기능 채널 / 룸처리기능 Client/Server 공유소스 gameserver DataConverter, DummyClient, ReuseMemory, CryptTester 다운로드받은후패키지를구성하는폴더구조입니다. 22
5.2. 게임오브젝트 구분분류 1 분류 2 비고 UI Channels Main Room Networks Main Player Main State (STATE) Audios User List Room List Engine Scene Music Audio Sfx Audio Queue (Native:Count) Connector (Main:TCP) Connector (Sub:TCP) Packet 및 List 정보출력 유니티에디터로실행할경우 DontDestroyOnLoad 영역에나타납니다. 예제에포함된기능들을테스트하면서 Hierarchy 에어떻게표시되는지살펴보세요. 23
5.3. 오토프레임워크 AutoFramework 란 C# 에서 C++ 처럼전역적클래스 / 함수작성을지원할수있도록고안된 partial class 집합입니다. UnityEngine 네임스페이스에포함되어있는 GameFramework 는 using UnityEngine 을선언할경우별다른추가선언이필요없습니다. GameFramework 를사용하는작성방법은다음과같습니다. MonoBehaviour 를사용하는기존클래스대체방법 Defines.cs 를참고하시면 GameFramework 는 AutoFramework 및 MonoBehaviour 상속이되어있습니다. 유니티에티터용스크립트작성시 MonoBehaviour 대신 GameFramework 를상속하세요. public class Example : GameFramework {... } 이제 partial class GameFramework 로묶여있는모든클래스 / 함수들은네임스페이스접근없이전역적접근이가능합니다. 전역적접근구조에포함시키고싶은일반클래스작성방법넷드론유니티소스코드와클라이언트예제는모두 partial class GameFramework 안에존재합니다. 새로운클래스및전역함수작성을하시려면아래예제들처럼작성하세요. namespace UnityEngine { public partial class GameFramework { public class CExample { public CExample() {} ~CExample() {} } } } namespace UnityEngine { public partial class GameFramework { public static CExample g_kexample { get { return CExample.GetInstance(); } } public class CExample : CSingleton<CExample> { public CExample() {} ~CExample() {} public void Test() {} } } } 이제 partical class GameFramework 에포함되어있거나 public class Example : GameFramework 처럼상속되는모든곳에서 g_kexample.test() 만입력하면네임스페이스접근없이호출됩니다. 24
5.4. 로그및메세지 넷드론엔진의유니티버전은 TRACE, OUTPUT, PRINT, ERROR 함수를정의하여표준출력내용을표시합니다. TRACE OUTPUT PRINT ERROR DISABLE_UNITY 선언이있을경우 Console.WriteLine(FILE, LINE, FUNCTION) 함수와연결, 선언이없을경우 UnityEngine.Debug.Log 함수와연결됩니다. DISABLE_UNITY 선언이있을경우 Console.WriteLine(FILE, LINE, FUNCTION) 함수와연결, 선언이없을경우 UnityEngine.Debug.Log 함수와연결됩니다. DISABLE_UNITY 선언이있을경우 Console.WriteLine 함수와연결, 선언이없을경우 UnityEngine.Debug.Log 함수와연결됩니다. DISABLE_UNITY 선언이있을경우 System.Diagnostics.Debug.WriteLine 함수와연결, 선언이없을경우 UnityEngine.Debug.LogError 함수와연결됩니다. TRACE 명령어를사용하려면 Assets 폴더아래 gmcs.rsp/smcs.rsp (-define:debug) 파일을생성하세요. DEBUG 선언을제거할경우 TRACE 코드는모두사라집니다. 5.5. 유니티엔진분리 넷드론유니티는유니티엔진뿐만아니라 C# 으로구현하는모든프로젝트에적용하는것이가능합니다. 독립적으로사용하려면 DISABLE_UNITY 선언을추가하세요. MonoDevelop 선언위치 Project Options: Build > Compiler > Define Symbols gameserver 프로젝트를참고하세요. 25
6. 치트키목록 명령어옵션값 1 값 2 값 3 값 4 값 5 비고 로컬명령 서버명령 /register [id] [password] [email] 회원가입 [check id] 중복검사 /login [id] [password] 로그인 /state [empty login follow wizard channel inventory shop lobby room arena] 씬전환 /show [status state room] 상태정보 /list [user inven equip char room member] 목록정보 /item buy [id] 아이템구입 create [id] 아이템생성 sell delete [serial id] 아이템판매 [serial id] [count] 수량판매 [serial id] 아이템삭제 [id] [count] 수량삭제 use [serial id] 아이템사용 equip [serial id] 아이템장창 [serial id] [slot] 슬롯장착 [offset] 장착해제 /point [+ -] [point] 포인트가감 /cash [+ -] [cash] 캐쉬가감 /grade [1-3] 등급변경 /reload [inven char user room] 데이터갱신 /char create [class] [grade] [name] 캐릭터생성 [class] [name] 캐릭터생성 delete [all cid] 캐릭터삭제 aname [name] 계정이름변경 cname [name] 이름변경 inven [size] 인벤토리크기 default [cid] 기본캐릭터 /conn [server id] [channel index] 서버 / 채널 break [channel index] 채널 강제접속해제 26
/room /option quit 정상종료 create [name] [password] [duel tdm ffa] [map id] 비밀방생성 [name] [duel tdm ffa] [map id] 일반방생성 join [id] [password] 비밀방참여 [id] 일반방참여 match [duel tdm ffa name] 자동매치 [ready waiting host] 상태변경 [start stop end leave] 방시작 / 종료 map [map id] 맵변경 mod [duel tdm ffa] [map id] 모드변경 team [red blue] 팀변경 /register 치트키로계정생성을하지않아도 test1, test2, test3, test4, test5 계정이초기화되어있으며암호는 test 입니다. /register test10 test test@test.com /login test1 test UnityClient 를여러개실행한뒤클러스터기능들을하나씩테스트해보세요. 27
7. 게임테스트 클라이언트 1 클라이언트 2 클라이언트 3 Step 1: /login test1 test Step 2: /conn 101 0 Step 3: /state lobby Step 4: /room create test ffa 1 Now Waiting... Step 5: /list member Step 6: /option team blue Step 7: /room start Now loading... Step 8: /room end Step 9: /state room Step 1: /login test2 test Step 2: /conn 101 0 Step 3: /state lobby Now Waiting... Step 4: /list room Step 5: /room join 1024 Step 6: /option team red Now loading Step 7: /state room Step 1: /login test3 test Step 2: /conn 101 0 Step 3: /state lobby Now Waiting... Step 4: /list room Step 5: /room join 1024 Step 6: /option team blue Now loading Step 7: /state room 28