Journal of Digital Art Engineering & Multimedia Vol.4, No1, June (2017), pp. 19-28 디지털예술공학멀티미디어논문지 http://dx.doi.org/10.29056/idaem.2017.06.02 멀티플랫폼게임엔진을이용한 2D 게임설계및구현 Design and Implementation for Multi-Platform Game Engine using the 2D Game 배재환 1) Jae-Hwan Bae 1 요약멀티플랫폼 (Multi-Platform) 은게임이여러종류의플랫폼 (Platform) 에서구동한다는것을말한다. 여기서말하는플랫폼이란하드웨어 (Hardware) 가될수도있고, OS(Operation System) 가될수도있다. 현재출시된멀티플랫폼게임엔진중게임개발사에서많이사용중인엔진은 Unity3D 엔진이다. 본논문에서는 Unity3D 엔진을이용한게임을설계개발하고자한다. 유니티엔진은 C#, 자바스크립트, Boo로코드를작성할수있다는이유로 C# 과모노기반코드로개발되었다고알려져있었다. 실제로엔진의런타임부분은 C++ 과마이크로소프트닷넷 API, 에디터프로그램은 C# 으로개발되었다. 스크립트는유니티내에서바로수정은하지못하고 Mono Develop 등유니티를지원하는스크립트에디터에서수정할수있다. 이에본논문에서는멀티플랫폼게임엔진을이용한 2D 게임설계및구현을제안하고자한다. 이를통해서다양한멀티플랫폼기반의게임설계및개발에도움이되었으면한다. 핵심어 : 멀티플랫폼게임엔진, 멀티플랫폼게임, 멀티플랫폼, 2D 게임 Abstract Multi-Platform means that the game runs on different kinds of platforms. The platform referred to here may be hardware or may be an operating system (OS). Unity3D engine is one of the most popular multiplatform game engines in game development. In this paper, we design and develop games using Unity3D engine. The Unity engine was known to have been developed in C # and mono-based code because of its ability to write code in C #, JavaScript, and Boo. In fact, the run-time part of the engine was developed with C ++ and Microsoft.NET APIs, and the editor program with C #. Scripts can not be modified directly in Unity and can be modified in Script editor supporting Unity such as Mono Develop. In this paper, we propose the design and implementation of 2D game using multi-platform game engine. We hope this will help you design and develop various multiplatform based games. Keyword: Multi-Platform Game Engine, Multi-Platform Game, Multi-Platform, 2D Game 1) Department of Game Engineering, TongMyong Univ., Sinseon-ro, Nam-gu, Busan, 608-711, Korea e-mail: bjhmail@tu.ac.kr * 이논문은 2017 학년도동명대학교교내학술연구비지원에의하여연구되었음 ( 과제번호 2017F004) Received(April 24.2017), Review (June 11.2017), Accepted(June 30.2017) ISSN: 2508 9099 JDAEM c 2017 NCISS 19
Design and Implementation for Multi-Platform Game Engine using the 2D Game 1. 서론 멀티플랫폼 (Multi-Platform) 은게임이여러종류의플랫폼 (Platform) 에서구동한다는것을말한다. 여기서말하는플랫폼이란하드웨어 (Hardware) 가될수도있고, OS(Operation System) 가될수도있다. 현재출시된멀티플랫폼게임엔진중게임개발사에서많이사용중인엔진은 Unity3D 엔진이다. 유니티엔진은 C#, 자바스크립트, Boo로코드를작성할수있다는이유로 C# 과모노기반코드로개발되었다고알려져있었다. 실제로엔진의런타임부분은 C++ 과마이크로소프트닷넷 API, 에디터프로그램은 C# 으로개발되었다 [1][2]. 스크립트는유니티3D 내에서바로수정은하지못하고 Mono Develop 등유니티를지원하는스크립트에디터에서수정할수있다 [3]. 이에본논문에서는멀티플랫폼게임엔진을이용한 2D 게임설계및구현을제안하고자한다. 논문의주요구성은 2장게임엔진기술분석, 3장멀티플랫폼게임엔진, 4장게임기술분석및게임구현, 5장결론으로구성된다. 2. 게임엔진기술분석 2.1 게임엔진기술분석 게임엔진의개념이본격적으로자리를잡은것은 1996년발매된 FPS(First Person Shooter) 게임퀘이크 (Quake) 이후 3D게임이보편화되면서부터였다. 퀘이크의개발자존카멕이퀘이크시리즈의소스코드를공개하며게임엔진이라는개념이자리잡은것이다. 상용게임엔진에는 3D 게임의구동을위한렌더링 (Rendering) 등의기능이미리구현되어있기때문에, 이를이용함으로써게임개발기간을단축할수있다. 게임엔진이가지는주요기능으로는 3D 그래픽의표현을위한렌더링엔진 (Rendering Engine), 3D 공간의충돌감지및현실적인물리효과 (Physics Effect) 를내기위한물리엔진 (Physics Engine), 각종개발도구 (Development Tool) 등이있다. 돈을받고라이선스 (Licence) 를판매하는상용게임엔진의경우, 개발자의편의와개발속도향상을위한스크립트에디터 (Script Editor), 맵에디터 (Map Editor) 등의다양한기능들을제공하고있다. 대표적인상용게임엔진으로는언리얼엔진 (Unreal Engine), 크라이엔진 (Cry Engine), 소스엔진 (Source Engine) 등이있다. 언리얼엔진과크라이엔진, 소스엔진은 FPS 게임개발을위한 20 c 2017 NCISS
Journal of Digital Art Engineering & Multimedia Vol.4, No.1, June (2017) 엔진인만큼, FPS나 TPS(Third Person Shooter) 게임을개발하는데용이하나, 각종부가기능들을이용해 MMORPG(Massively Multiplayer Online Role-Playing Game) 나액션게임 (Action Game) 등을개발하기도한다. 일반적인게임서버 & 클라이언트엔진모델은아래와같다. 게임엔진은게임소프트웨어의구성에필요한소프트웨어구성요소를재사용할수있게만든것이다. 엔진은개발에필요한기능을즉시사용할수있도록제공하여개발의단가와복잡도를줄여주고, 제일정에복잡한게임을출시할수있게해준다. 이것은게임업계에서매우중요한일이다. 게임엔진은유연하고재사용가능한소프트웨어환경을제공해주는점때문에 ' 게임미들웨어 ' 라고불리기도한다. 게임미들웨어라고불리는시스템들은구성요소 ( 컴포넌트 ) 기반의구조를가지는것이많다 [4][5]. [ 표 1] 게임서버및클라이언트구조 [Table 1] Game server and client structure 구분 Game Server & Client 구조 서버 클라이언트 ISSN: 2508 9099 JDAEM c 2017 NCISS 21
Design and Implementation for Multi-Platform Game Engine using the 2D Game 3. 게임기술분석및게임구현 멀티플랫폼게임개발을위해서는멀티플랫폼개발이가능한언어를사용하거나멀티플랫폼을지원하는게임엔진을구매해게임을개발하는게일반적이다. 특히직접멀티플랫폼을지원하는게임엔진 (Game Engine) 을만들경우, 각플랫폼이나기기에따른대응이어려워지기때문에개발효율과위험성관리를위해멀티플랫폼을지원하는게임엔진을구매하는경우가많다. 보통멀티플랫폼이라하면여러기기등에서구동이된다는의미로사용하지만, 아예다양한플랫폼에서연동되는멀티플레이 (Multi-Play) 를지원하는경우도있다. 세가가개발한액션 MORPG(Multiplayer Online Role-Playing Game) 판타시스타온라인 2(Phantasy Star Online 2) 에서는플레이스테이션 3와 PS Vita, PC 사용유저가함께즐길수있는멀티플레이를선보인바있다. 멀티플랫폼 (Multi-Platform) 은게임이여러종류의플랫폼 (Platform) 에서구동한다는것을말한다. 여기서말하는플랫폼이란하드웨어 (Hardware) 가될수도있고, OS(Operation System) 가될수도있다. 현재출시된멀티플랫폼게임엔진중게임개발사에서많이사용중인엔진은 Unity3D 엔진이다.[6-8] 본논문에서는 Unity3D 엔진을이용한게임을설계개발하고자한다. 유니티엔진은 C#, 자바스크립트, Boo로코드를작성할수있다는이유로 C# 과모노기반코드로개발되었다고알려져있었다. 실제로엔진의런타임부분은 C++ 과마이크로소프트닷넷 API, 에디터프로그램은 C# 으로개발되었다. 스크립트는유니티내에서바로수정은하지못하고 Mono Develop 등유니티를지원하는스크립트에디터에서수정할수있다. Visual Studio Tools for Unity[2] 플러그인을이용해서 Visual Studio 를통해유니티 C# 스크립트를개발및디버깅할수있으며, 해당플러그인은비주얼스튜디오커뮤니티 (Visual Studio Community) 버전이상에서사용가능하다. 유니티는 Premium Support 솔루션을가지고있다. 이솔루션을이용하면유니티 3D에질문을하고하루내로답변을받을수있다. 22 c 2017 NCISS
Journal of Digital Art Engineering & Multimedia Vol.4, No.1, June (2017) [ 그림 1] 플랫폼구성 [Fig. 1] Platform Configuration 4. 게임기술분석및게임구현 게임기술이란부분은포괄적인응용부분이라서정의하기가쉽지않다. 만약기반기술이라면 비교적명확한선과경계선이있으나게임기술은기반기술들을이용하는응용기술이므로그경 계가명확하지않다. [ 그림 2] 게임프로그래밍다이어그램 [Fig. 2] Game Programming Diagram ISSN: 2508 9099 JDAEM c 2017 NCISS 23
Design and Implementation for Multi-Platform Game Engine using the 2D Game 그래서게임기술은게임을제작하는데있어서필요한기술로정의할수있을것이다. 즉기술의영역을사용상의범위혹은필요상의범위로한정할수있을것이다. 게임에사용하는기술은여려가지상황에따라다를수있으나대략게임을직접적으로개발하는프로그래밍기술과게임에필요한그래픽이나사운드등을제작하는제작기술그리고그공정을관리하는관리기술이라고정의할수있다 [9]. 4.1 게임오브젝트구현 게임오브젝트란, 게임에등장하는캐릭터, 건물, 아이템등과같은객체들을의미한다. 게임오 브젝트시스템설정은변수 (Parameter), 작용장치 (System), 명령체계 (Command System), 상호작 용 (Interaction System) 으로나눌수있다. [ 표 2] 게임오프젝트 [Table 2] Game Object 게임오브젝트 (Game Object) 아군 적군 장애물 파티클 24 c 2017 NCISS
Journal of Digital Art Engineering & Multimedia Vol.4, No.1, June (2017) 4.2 게임프로그래밍구현 게임프로그래밍기술은기반학문인전산학과이를기반으로한응용기술, 언어와 Platform 기술등이있다. 게임시스템이복잡해짐에따라 Platform 은크게 H/W 와 S/W로구성되어있으며, 각단계를이어주는여러인터페이스로구성된다고할수있다. 아래에논문에서설계개발하고자하는프로그래밍소스일부를추가하였다. Player_Script using UnityEngine; using System.Collections; [System.Serializable] public class Boundary public float xmin, xmax, ymin, ymax; //Screen Boundary dimentions public class Player_Script : MonoBehaviour //Public Var public float speed; //Player Ship Speed public Boundary boundary; //make an Object from Class Boundary public GameObject shot;//fire Prefab public Transform shotspawn;//where the Fire Spawn public float firerate = 0.5F;//Fire Rate between Shots public GameObject Explosion;//Explosion Prefab //Private Var private float nextfire = 0.0F;//First fire & Next fire Time // Update is called once per frame void Update () //Excute When the Current Time is bigger than the nextfire time if (Time.time > nextfire) nextfire = Time.time + firerate; //Increment nextfire time with the current system time + firerate Instantiate (shot, shotspawn.position,shotspawn.rotation); //Instantiate fire shot ISSN: 2508 9099 JDAEM c 2017 NCISS 25
Design and Implementation for Multi-Platform Game Engine using the 2D Game GetComponent<AudioSource>().Play (); //Play Fire sound // FixedUpdate is called one per specific time void FixedUpdate () float movehorizontal = Input.GetAxis ("Horizontal"); //Get if Any Horizontal Keys pressed float movevertical = Input.GetAxis ("Vertical");//Get if Any Vertical Keys pressed Vector2 movement = new Vector2 (movehorizontal, movevertical); //Put them in a Vector2 Variable (x,y) GetComponent<Rigidbody2D>().velocity = movement * speed; //Add Velocity to the player ship rigidbody //Lock the position in the screen by putting a boundaries GetComponent<Rigidbody2D>().position = new Vector2 ( Mathf.Clamp (GetComponent<Rigidbody2D>().position.x, boundary.xmin, boundary.xmax), //X Mathf.Clamp (GetComponent<Rigidbody2D>().position.y, boundary.ymin, boundary.ymax) //Y ); //Called when the Trigger entered void OnTriggerEnter2D(Collider2D other) //Excute if the object tag was equal to one of these if(other.tag == "Enemy" other.tag == "Asteroid" other.tag == "EnemyShot") Instantiate (Explosion, transform.position, transform.rotation); //Instantiate Explosion SharedValues_Script.gameover = true //Trigger That its a GameOver Destroy(gameObject); //Destroy Player Ship Object 4.2 게임플레이 논문에서프로토타입으로설계및개발한멀티플랫폼게임엔진을이용한 2D 의실행화면은 아래와같다. 26 c 2017 NCISS
Journal of Digital Art Engineering & Multimedia Vol.4, No.1, June (2017) [ 그림 3] 게임플레이화면 [Fig. 3] Game play screen 5. 결론 멀티플랫폼 (Multi-Platform) 은게임이여러종류의플랫폼 (Platform) 에서구동한다는것을말한다. 여기서말하는플랫폼이란하드웨어 (Hardware) 가될수도있고, OS(Operation System) 가될수도있다. 현재출시된멀티플랫폼게임엔진중게임개발사에서많이사용중인엔진은 Unity3D 엔진이다. 본논문에서는 Unity3D 엔진을이용한게임을설계개발하고자한다. 유니티엔진은 C#, 자바스크립트, Boo로코드를작성할수있다는이유로 C# 과모노기반코드로개발되었다고알려져있었다. 실제로엔진의런타임부분은 C++ 과마이크로소프트닷넷 API, 에디터프로그램은 C# 으로개발되었다. 스크립트는유니티내에서바로수정은하지못하고 Mono Develop 등유니티를지원하는스크립트에디터에서수정할수있다. 이에본논문에서는멀티플랫폼게임엔진을이용한 2D 게임설계및구현을제안하고자한다. 이를통해서다양한멀티플랫폼기반의게임설계및개발에도움이되었으면한다. ISSN: 2508 9099 JDAEM c 2017 NCISS 27
Design and Implementation for Multi-Platform Game Engine using the 2D Game References [1] Bae, Jae-Hwan. "Design and Analysis of Creativity Based Infants Learning Game." Korea Computer Game Association Spring Conference, (2009):118-125. [2] Lee, Jeong-Gwan. "Theological basis of the education ministry in light of Calvin's doctrine of Education." Theological Criticism 21 (2008): 387-406. [3] Lee, Eun-Kyoo. "Research on Westminster Shorter Catechism as Curriculum for Christian Youth." The Korean Society for Practical Theology 26.2 (2011): 247-275. [4] Kwon, Ho. "Preaching the Heidelberg Catechism for the Reformed Church Education", The Society of Reformed Theology 28 (2013): 215-246. [5] You, Gi-Won and Yoon, Seon-Jeong. "Serious Game Design and Implementation for Kids." Journal of Korea Game Society 15.4 (2015): 19-28. [6] Park, Jong-Seok "Review of Christian educational computer games." Christian and Education 10 (2002): 46-68. [7] Park, Joong-Soo. "Design and Prototyping of a Bible Game in Smart Platform." Korean Society For Computer Game 26.4 (2013): 99-104. [8] Kwon, Yong-Man. "A Study on the Game Definition & Its Attributions." Korean Society For Computer Game, 27.4 (2014): 221-227. [9] Kim, Na-Young. "A research on good game factors for designing educational game at an early development stage." Korean Society For Computer Game 28.2 (2015): 53-61. 28 c 2017 NCISS