3. 핀볼 게임이란?

핀볼(Pinball)은 보통 동전으로 작동하는 아케이드 게임의 하나로, 핀볼 머신(pinball machine)으로 불리는 유리로 덮힌 케이스 안에서 하나 이상의 금속 공을 이용하여 점수를 얻는 오락이다. 이 오락의 주 목적은 가능한 점수를 많이 얻는 것이다. 두 번째 목적은 즐기는 시간을 최대한으로 늘려서 무료 게임(리플레이) 수를 늘리는 것이다.

4. 핀볼 게임을 만드는 이유

윈도우 95 시절 우리는 핀볼 게임을 많이 접했는데요... 그런 핀볼 게임의 특성을 살린 플레이필드(Playfield) 중에 플리퍼, 범퍼, 슬링샷과 볼의 궤적과 볼의 속도 제어에 대해 알아보고자 합니다.

5. 핀볼 게임 만들기

1) 먼저, 준비된 유니티패키지를 디렉토리에 넣습니다. 리소스 될 수 있으면 영문 디렉토리에 넣도록 합니다. PinBallMake
2)PinBallGame이라고, 새 프로젝트를 생성합니다. D:\Unity3d\PinBallGame
				3) 프로젝트를 생성하면 오른쪽 상단에 2 by 3 으로 세팅해줍니다. Project는 One Column Layout으로 하면 편합니다.
4)Asset > Import Package > Custom Package

		8)그림과 같이 한글 디렉토리에서 Import 할려면 사용가능하지 않다는 에러가 납니다. 디렉토리를 영문으로 바꿨다면 Pinball.unitypackage를 열기를 클릭합니다.
6)영문 디렉토리에 유니티 패키지를 저장하면 에러가 발생하지 않습니다. Error while importing package: Couldn't decompress package Unity 한글 디렉토리는 안됩니다. 한글 계정도 안됩니다. 주의 합시다. 모든 패키지를 import 합시다.
7)Scenes의 Main이라는 Scene을 클릭해줍니다. 저장하지 않겠다고 Don’t Save를 해줍니다. Scene이 전환되면서 빈 Scene을 저장하라고 나오는 메시지입니다. 평소에는 저장하는 습관을 기릅시다.
				8)PinballMachine이라는 GameObject를 클릭합니다. Unity는 GameObject안에 자식 GameObject를 넣을 수 있습니다.
9) GameObject > Create Other > Cube를 만들고주고 생성된 Cube를 Rename(Cube선택하고 마우스 오른쪽 버튼)하여 FlipperL 로 이름을 바꾸어 줍니다.
10) Inspector창에서 Position과 Rotation, Scale 값을 다음과 같이 입력해줍니다. Position은 위치, 이동 Rotation은 회전 Scale은 확대/축소

11) Inspector창에서 FlipperL의 Mesh Renderer를 그림처럼 순서대로 클릭해줍니다.
12)FlipperMat를 검색해서 재질을 선택해줍니다.
13) 왼쪽 플리퍼가 적용된 것이 보입니다.
14) Hinge Joint 컴포넌트 추가 Inspector 뷰에서 Add Component 버튼을 클릭하고 Hinge Joint를 검색해줍니다. Hinge Joint Component를 추가하면 Rigidbody 컴포넌트가 추가됩니다.
15)Rigidbody 설정 Inspector 뷰에서 Rigidbody의 Mass를 0.1로, Angular Drag를 0으로, Hinge Joint의 Anchor를 –0.5,0,0으로, Axis를 0,1,0으로 설정합니다.

물리시스템에서 쓰이는 RigidBody 와 Joint (링크 참조: http://game.dongguk.ac.kr/unity3d/chap6.pdf)

리지드바디

* 리지드바디(RigidBody)

- 오브젝트에 물리적인 특성을 부여하는 컴포넌트

- 외부에서 힘을 주어 이동시키는 오브젝트는 반드시 리지드바디 컴포넌트를 추가해야한다.

– 물리학에서 어떠한 힘을 받아도 변하지 않는 단단한 물체를 의미

– 강체라고도 함

– 물리의 기본 법칙은 물체가 리지드바디라는 리지드바디라는 가정하에 세워지며,

유니티에서도 물리시스템을 구현하기 위해서는 물리에 반응할 게임 오브젝트가 리지드바디이어야 함

* 유니티에서 게임오브젝트를 리지드바디로 설정하려면

– Component > Physics > RigidBody 를 통해 리지드바디 컴포넌트만 추가하면 됨

Mass	질량. 질량이 작을수록 더 빨리 움직이고, 더 멀리 움직인다.
Drag	저항. 이 값이 크면 속도가 떨어진다.
Angular Drag	회원 운동 저항. 이 값이 0이면 한없이 굴러간다.
Use Gravity	중력 사용 여부
Is Kinematic	관절 운동 처리 여부, 강체
Collision Detection	물체의 연속적인 충돌을 검사하는 방법

조인트 (Joint)

* 두 물체 간에 조인트(Joint)라 불리는 연결정보를 넣어 두 물체가 상호 동작하는 물리현상 구현

– 조인트는 주로 두 물체 간의 연결을 통해 특정 움직임을 제한하는 용도로 많이 사용

– 예 : 진자처럼 선에 연결된 물체, 한쪽 면이 벽에 고정되어 작동하는 문 등

조인트 종류	설명
힌지(Hinge) 조인트	문에 사용하는 경첩처럼 물체의 특정부분을 고정시켜 움직이게 합니다. 문이나 시계추 같은 물리 효과를 구현할 때 가장 적합한 조인트이며, 여러 개를 사용하면 체인 같은 효과를 표현할 수도 있습니다.
고정(Fixed) 조인트	물체를 다른 물체에 고정합니다. 단순히 자식 게임 오브젝트가 부모 게임 오브젝트를 따라 움직이는 효과를 주지만, 일정 이상의 힘이 가해지면 떨어지도록 설계할 수 있습니다.
스프링(Spring) 조인트	두 물체를 스프링으로 연결합니다.
캐릭터(Character) 조인트	3축 회전을 위해 사용하는 조인트입니다. 주로 캐릭터의 관절 부위에 사용되어 어깨 관절 같은 움직임을 구현하는데 사용됩니다.
설정(Configurable) 조인트	사용자가 직접 조인트를 설계할 수 있도록 다양한 옵션을 제공합니다. 모든 조인트 형태를 제작할 수 있습니다.

Hinge Joint 컴포넌트
설정 항목	설명
Connected Body	조인트를 통해 추가적으로 연결할 리지드바디를 지정합니다.
Anchor	물체가 움직일 기준점을 지정합니다.
Axis	물체가 움직일 회전축을 지정합니다.
Use Spring	스프링 기능을 사용할 지 여부를 지정합니다.
Spring	스프링의 힘을 지정합니다. 힘이 높을 수록 지정 위치로 이동하려고 합니다.
Dampe	스프링의 저항을 지정합니다. 높을수록 스프링의 복원력이 감소합니다.
Target Position	스프링이 복원하려는 목표 위치를 지정합니다. 이 값은 현재 설정되어 있는 회전축에 대한 각도를 의미합니다.
Use Motor	일정 속도로 움직이려는 모터 기능을 사용할 지 결정합니다.
Target Velocity	물체가 도달할 속력을 지정합니다.
Force	속력에 도달하는 데 필요한 힘을 지정합니다.
Free Spin	이 옵션을 선택하면 모터의 속력은 물체의 움직임을 방해하지 않고, 추가적이 가속을 하는 데만 사용됩니다.
Use Limit	물체의 움직임에 제한을 둘지를 결정합니다.
Min	회전의 최소각을 지정합니다. 물체는 이 각도보다 작게 회전하지 않습니다.
Max	회전의 최대각을 지정합니다. 물체는 이 각도보다 크게 회전하지 않습니다.
Min Bounce	물체가 최소각에 이르렀을 때 부여할 반동력을 결정합니다. 1이 최대값입니다.
Break Force	지정된 힘보다 큰 힘이 가해지면 조인트가 제거되고, 제거될 때의 힘으로 물리 효과가 발생합니다.
Break Torque	지정된 회전력보다 더 큰 회전력이 가해지면 조인트를 제거합니다.

16)Scripts/Flipper.cs (c# : cs)	17) Flipper(Script) - Left Shift를 눌렀을 때 플리퍼가 접히게 끔 하는 스크립트
17)FlipperL 오브젝트에 FlipperTouch 스크립트 추가		18) FlipperTouch(Script)
19)Icon Inspector	20)Cursor Inspector			21)Android Build
22)Android Player Setting 해주고 나서			1) D:\JavaDevelop\workspaceUnity\PinBallGame 이렇게 디렉토리 만들어준다. 2) Export 할 때 위의 PinBallGame 폴더를 선택한다. 3) Player Settings...를 눌러주어 세팅을 한다.

		23) 회사이름, 프로젝트 이름, Icon, Cursor, package, Mininum API Level(설치된 버전은 2.1부터... 될 수 있으면 2.1로 해주고), Device Filter는 ARM으로, Graphics Level은 OpenGL ES 1.x로 2.x로 설정되어있을 가능성이 큼...
usb 드라이버(삼성,팬택,LG)가 PC에 깔린 경우, 안드로이드 스마트폰을 usb에 꽂을 경우 정상적으로 작동한다.				갤럭시s2 lte 디바이스와 옵티머스GK의 드라이버가 잡힌 모습이다.
	adb 명령어를 수행하기 위해서는... ANDROID_SDK_HOME=D:\JavaDevelop\Android\android-sdks path에 ; 추가해주고 %ANDROID_SDK_HOME%\tools ; 추가해주고 %ANDROID_SDK_HOME%\platform-tools
			한 가지 주의사항... 64비트 자바와 64비트 이클립스를 사용할 경우 상당히 까다로운 설정들이 들어간다. [Unity 안드로이드 Build Error : Win32Exception] C:\Windows\System32 안에 있는 아래 세 파일. java.exe javaw.exe javaws.exe 를 복사 해서, C:\Windows\SysWOW64 안에 넣어 주면 해결됩니다~~

23)FlipperL을 복사 후 이름 변경(Rename)	FlipperR의 Inspector 뷰 설정 Transform Position 3.92, -0.19, -4.6 Rotation 0, 315, 0 Scale 1.8 1, 0.4	HingeJoint Anchor 0.5, 0, 0 Flipper(Script) Press Pos 70 Power 80 KeyCode RightShift	FlipperTouch(Script) Touch Rect X 0.5 Touch Rect Y 0 Touch Rect W 0.5 Touch Rect H 0.5
24)Plunger 제작 Cube 생성
25)Plunger에 Spring Joint 컴포넌트 추가
26)Plunger 스크립트 추가 Plunger.cs c# 스크립트를 Plunger에 추가		Script Plunger.cs Pull Power 1.5 Slash
양이 많아서 전체 소스를 제공하도록 하겠습니다.

[1] 이장주, 사이버문화의 이해 교재, 1강 「스마트혁명, 세상을 바꾸다」, 2013.03

[2] 윤형중 기자, 매경이코노미 제1590호, 스마트폰·태블릿PC에 우는 기업들 - 팅크웨어·코원·아이리버 ‘나 떨고 있니’, 2011.01.19. 링크 : http://news.mk.co.kr/v2/economy/view.php?year=2011&no=32347

[3] 크라이브™, 루니웹 wii/wiiu게시판, 닌텐도 하드웨어 전세계 판매실적 (2013년 4월~6월), 2013.07.31

http://bbs2.ruliweb.daum.net/gaia/do/ruliweb/default/159/read?bbsId=G003&articleId=1156907&itemId=494

[4] 박철현 기자, 미디어잇(mediait), 닌텐도 3DS 북미에서 '잘나가네~!' 판매량 1위, 2013.08.16.

링크 : http://www.it.co.kr/news/mediaitNewsView.php?nSeq=2426777

[5] Pokemon Korea, 포켓몬스터 X ·포켓몬스터 Y 한국어 공식사이트, 「포켓몬스터 X·Y」에서는 원하는 언어를

선택하고 모험을 시작할 수 있다!, 2013.07.11.

링크: http://pokemonxy.pokemonkorea.co.kr/gamesystem_02_1.html

[6] Unity3dkorea, 10가지의 이상의 글로벌 플랫폼으로 당신의 게임을 손쉽게 가져가세요, 2013.09.23 현재

링크 : http://korea.unity3d.com/content/content.php?cont=multiplatform

[7] EjongHyuck, EjongHyuck's 잡다한 세상, 유니티 모바일 라이센스에 관하여 무료 정책 발표, 2013.07.25

링크: http://blog.ejonghyuck.net/140193879876

[8] 위키백과, 핀볼, 2013.03.20 링크 : http://ko.wikipedia.org/wiki/핀볼

[9] 따라하면서 배우는 Unity3d 입문, 위키북스, 서울시내에서 서울도서관(서울시청), 남산도서관, 노원평생학습관, 송파도서관, 용산도서관, 종로도서관에서 빌릴 수 있음... 신간이라 물량이 부족해서 보급이 안된 것은 사실임...