유니티 5.1버전에서 플래피 버드만들기 튜토리얼 자료입니다.
아래의 제 자료는 4.3 버전 소스이며 유니티 버전 업그레이드로 인해 소스코드가 다소 수정되었습니다.
하나하나 따라하면서 플래피 버드 게임을 만들 수 있습니다.
http://ivis.cwnu.ac.kr/tc/dongupak/263
6. 리소스 받기
• 유니티 버전 5.1 기준
• 유니티 Project 만들기
• FlappyBird라는 이름의 프로젝트를 만들자
• http://ivis.cwnu.ac.kr/tc/dongupak/263
• 홈페이지에 올려 놓은 Resource 파일을 받아 Project 창에 Import한다
• 리소스에는 게임 텍스쳐. 사운드, 애니메이션, iTween이라는 Tweening
script가 있다.
6
10. 배경화면 만들기
리소스 파일의 Assets/Textures/ForLoop에서
bg_2파일을 bgBack에, Ground 파일을 bgGround
에 각각 맵핑을 합니다
Position: 위치
Rotation:회전각
Scale:크기
Unlit/Transparent:하얀색으로 덮힌 부분을 투명
처리해 줌
Tilling: 축의 방향으로 이미지의 갯수를 생성
Offset:축의 방향으로 위치를 잡아 해당 지점의 위
치부터 보여줌10
11. 배경화면 만들기
리소스 파일의 Assets/Textures/ForLoop에서
Ground 파일을 BG_ground에
각각 맵핑을 합니다
11
15. 배경화면 만들기(ScrollMove)
Project 창에
Create-> C# Script 생성 *ScrollMove.cs
//targetOffset 은 시간에 따라
속력을 곱하므로 시간에 따라
Offset 값이 바뀜
ScrollMove.cs를
bgBack,bgGround
오브젝트에 연결시켜줌
15
19. 선인장 만들기
Create -> Create Empty로
Hierarchy에 GameObject를 생성
Project창에 Sprite 폴더의 cactus 파일을
GameObject의 하위객체로 총 3개를 넣는다
19
20. 선인장 만들기
GameObject의 이름을 CACTUS로 변경
2개 객체는 Cactus로,
1개는 Goal로 바꾸고
위아래 Cactus를 2개
중간 Goal을 1개 생성한다
Cactus 객체는 게임상에서 충돌을 피해야할 장애물이며 Goal은 통
과해야할 지점의 객체이다
20
21. 선인장 만들기
Goal 의 Sprite Renderer 체크 해제하여
게임창에 이미지가 보이지않도록한다.
Position을 설정하고 난 후
게임화면에 나타나는 Cactus와 Goal의 모습,
Goal은 게임객체로는 존재하나 화면에는 보
이지(rendering) 않는다
21
22. 선인장 만들기(CactusMove)
//선인장 장애물의 속도
//왼쪽으로 속도값 만큼 움직임
//y축은 랜덤값을 주어서
높낮이가 랜덤으로 생성됨
오브젝트포지션이(x축) -6을 넘어설때 객체는 사
라짐
OnEnable() : Start() 함수보다 먼저 선언되는
메서드 객체를 초기화 시켜주는 메서드
22
31. Bird.cs 스크립트
//점프 파워
//새 이미지
// 마우스를 클릭했을 경우 점프
// Awake함수는스크립트객체의라이프타임동안단한번만호출게임이
시작할때객체를초기화시키는기능
// 새가점프했을경우새의LookDirection을변화시켜Y축으로회전시켜주는기능
주의 : GetComponents가 아님
31
37. GameManager?
• 게임의 전반적인 동작을 로직하고 관리하는 게임구동의 핵
심적인 역할
• 게임의 준비, 종료, 시작을 모두 처리함.
• 게임이 준비상태인지, 게임중인지, 종료되었는지를 체크하
는 상태변수를 이용하여 각 상태에 따른 화면의 제어와 객체
의 제어를 수행한다
37
49. 테스트
• Collider의 Is Trigger속성
• Is Trigger 속성이 On 되어 있으면 솔리드 객체처럼 행동
하지 않는다
• Is Trigger가 On으로 되어 있으면 바닥과의 충돌시
Trggering은 되지만 물리적으로 뚫고 지나가는 것을 막지
는 못함
• Is Trigger 속성이 Off로 되어 있으면 Bird 객체는 바닥을
뚫고 지나가지 못함
49
54. OnTriggerEnter
• Collider 객체의 Is Trigger 가 On 되었을 시 충돌을 감지함
• 충돌이 감지되면 OnTriggerEnter 메소드가 충돌 이벤트
를 처리함
• 매개변수 Collider는 충돌한 객체임
• Collider 객체의 Is Trigger 가 Off되면 객체를 뚫고 지나지
못함
54
56. 충돌반응(게임시작,종료)
마우스 클릭이 발생하고 ready가 true일때
UseGravity가 활성화되어 게임이 시작된다
GameManger.cs
게임의 종료를 알려주는 변수
게임을 종료시키는
GameOver() 메서드에서는
MakcCactus 메서드의 Invoke를 중지시켜 더 이
상 선인장이 화면에 나타나지 않게한다
56
60. 충돌반응(게임시작,종료)
Cactus와 충돌되었을 때 GameManager의
GameOver() 메서드를 호출한다.
호출
Bird.cs GameManager.cs
Game
Play
Game
End
ready = false
end = false
ready = false
end = true
60
73. GUI 객체 생성
• 점수, 사용자 정보등을 알리기 위한 그래픽 사용자 인터페이
스 설계
73
74. Score에 Text Mesh추가
Score에서 Add Component를
눌러서 Text Mesh를 추가시킴
Empty GameObject를 생성하
여 이름을 Score로 바꿈
GUI의 하위객체로 지정
Empty GameObject를 생성하여
이름을 GUI로 바꿈
74
104. PlayerPrefs 클래스
• PlayerPrefs 클래스는 게임세션중에 필요한 정보를 저장하
고 읽어오는 클래스이다
• 각 운영체제마다 게임정보를 저장하는 디렉토리는 다를
수 있다.
• 여기서는 게임점수를 정수값으로 저장하고 읽어오는 역할을
한다
104
105. 점수관리
FinalScore는 Final Score Text로
BestScore는 Best Score Text로
ImageNew는 Image New로 연결시킨다
이제 GameManage.cs 스크립트의 Final Score Text는
FinalScorer 객체를 참조하게 된다
105
106. GameOver()의 중복호출
Tag 값 : Cactus
Tag 값 : Cactus
충돌시 GameOver() 호출
충돌시 GameOver() 호출
선인장과 부딛혀 GameOver()가 호출
되고 바닥에 닿을때 또 GameOver()가
호출되는 것을 방지하여야 함106
109. 추가구현
• Cactus 가 두 묶음, 세 묶음씩 랜덤하게 나타나도록 코드를
수정하시오
• 각 묶음에 따라 점수가 다르게 올라가도록 하시오
• Cactus가 랜덤하게 아래위로 요동치도록 기능을 구현하시오
• 랜덤하게 Gold 아이템이 Goal에 나타나도록 프로그램을 수
정하시오.
• Gold 아이템 획득시 보너스 점수 5점 추가
109
110. Q & A
자료의 잘못된 부분은 dongupak@gmail.com으로 알려주세요
110