지원자 : 서영훈
개발 기간 : 2015/06/17 ~ 2015/08/17
DICE OF WAR 게임 소개
게임 유투브 영상 : HTTPS://WWW.YOUTUBE.COM/WATCH?V=UNMEWAGD3ZA
• 만드는 이유
• 어떤 게임
• 지금까지 한 것
• 개발하면서 공부하게 된 부분
• 어려웠던 부분
만드는 이유
• 게임 개발 프로젝트를 참여해서 프로젝트 목표는 달성
했으나 내가 목표로 한 부분에서는 제대로 완성 해
본 이력이 없어 시도함
• 유니티 실무 경험이 없어 대신 경험 삼아
직접 포트폴리오용으로 만듦
• 유니티 예제같은...
어떤 게임을?
주사위 잔영 (개발사 : 소프트맥스[2001])을
그대로 한번 만들어 보자!! 에서 시작
포트폴리오로 어떤 게임을 만들어 볼까 고민 중…
[가칭]DiceOfWar
• 장르 : 2D 주사위 보드게임
• 개발환경 : Unity5.1.1f1, VisualStudio2010
• 사용에셋 : DicePackLight 1.3(이동주사위),
NGUI Next-Gen ...
• 게임 시스템 소개 :
캐릭터 – 이동(주사위갯수)만큼 주사위를 굴력 이동,
공격(주사위갯수)만큼 이동 중 적과 조우 시 전투 주사위를
생성,
방어(주사위갯수)만큼 이동하는 적과 조우 시 전투 주사위
를 생성,
지력(...
• 게임 시스템 소개 :
타일 – 3or4칸 이동, 감옥, 아이템 획득, 전투,
도착하면 임의의 타일로 교체
다음 턴 낮은 수 이동 주사위, 다음 턴 높은 수 이동 주사위,
시작, 골인,
도착시 현재 전역 속성이 타일의...
• 게임 시스템 소개 :
적 – 맵의 타일에 각각 배치되어 있고 직접 싸움을 걸지 않고
플레이어가 걸면 전투를 함, 플레이어가 전투에서 이기면
사라지고, 적이 이기면 플레이어 캐릭터는
이동 전의 타일 로 돌아감
• 게임 UI 소개(1) :
팀 색, 유저 닉네임, 선택한
캐릭터의 코스트
맨 왼쪽의 X버튼 유저 슬롯 열
기/닫기
캐릭터 이름, 코스트가 표시되어 있고
선택할 수 있는 버튼
좌우 버튼으로 맵 선택
선택한 캐릭터 능력치...
• 게임 UI 소개(2) :
현재 속성 (무속성 NONE부터
시작) 턴 수
미니
맵
파티 시 현재 캐릭터 위치 이동, 현재
캐릭터 파티 탈퇴
이동 주사위 굴
리는 버튼
이동할 캐릭터를 선택하는 버튼
지금까지 한 것
Character
Manager
대기방
요 클래스 구조 소개
MapLoader MapLoader MovingObjInfo UserInfo MapInfo
…
…
본인이 작성한 클래스 위주로 구조를 나타내었음
Character
Manager
GameManagerMapManager BattleManager UIManager
인게임 주요 클래스 구조 소개
RaceManager
Tile
MapLoader
Tile
BasicMana...
• CSVParser : FileInfo, TextReader클래스를 이용해 특정 위치에 있
는 csv파일 읽어오게 해 데이터를 읽어오는 클래스,
모든 Loader클래스들이 이 클래스를 상속받음
• CharacterLo...
• BasicManager : 모든 Manager클래스의 부모 클래스,
이 클래스를 상속 받은 모든 Manager클래스에 싱글톤 패턴이 적용되
게 함
• GameManager : User의 InGame, 캐릭터 정보를 ...
• MovingObjInfo : CharacterPiece, Enemy오브젝트의 공통으로
가지고 있을 정보(인덱스, 팀, 능력치)를 가짐
• MovingObject : CharacterPiece, Enemy오브젝트의 공...
• CameraControl : 현재 차례에 선택된 캐릭터를 따라 다니게
하는 카메라 이동 로직
• Dice2D : 전투 페이즈 때 쓰는 스크립트, Sprite 이미지와 Animator를
이용해 주사위를 나타냄
• UI...
• 중요 기능을 우선 개발 [구현]
이동 & 전투 시스템 : 플레이어가 굴려서 나온 주사위 눈만큼
이동, 전투를 하는 시스템
파티 시스템 : 2~3개의 캐릭터가 같은 Tile에 있을 경우
파티를 맺어 같이 이동/전투를 ...
• 그 외 부가 기능 [미구현]
Tile 속성 부여 : 감옥이나 주사위 확률 조정, 아이템 획득 같은
이벤트를 발생시키는 Tile 제작
스킬 & 아이템 : 사용 시 캐릭터 능력치나 이동, 전투 상황이
변화하는 기능 추가
개발하면서 공부하게 된
부분
• 유니티 C# 환경에서의 싱글톤
각 Manager클래스마다 유일한 인스턴스들을 가질 수 있고
어디서든지 그 인스턴스를 접근하기 위해서 쓰였음
Class BasicManager
{
private static BasicM...
• 유니티 타이머 Invoke()
일반적인 Timer()대신 MonoBehaviour가 지원하는
Invoke()함수가 있다.
Invoke( string methodName, float time )
- methodName...
• Coroutine()
특정한 일을 단계적으로 발생하게 하거나 시간에 흐름에
따라 발생하거나 다른 연산이 완료될 때까지 기다리는
루틴을 작성할때 사용
yield return null
- Update구문의 완료될때까지
...
• NGUI 버튼 이벤트 동적 할당 방법 - 1
SetUIButtonEvent함수로 버튼객체에 이벤트를 전달
게임플레이를 하면 동적으로 할당한 이벤트함수가
옆에 OnClick아래 Notify에 들어간걸 확인할 수 있다....
• NGUI 버튼 이벤트 동적 할당 방법 - 2
연결한 이벤트 함수인 OnClickRollButtonInBattleZone함수,
전 슬라이드에서 나온 함수 SetUIButtonEvent에서 설정한 것과
같이 매개변수 개...
• 모든 데이터들을 외부 csv파일에서 읽어오기 - 1
맵에 배치하는 캐릭터, 적, Tile들을 하드코딩으로 배치하기
보다는 외부 csv파일에서 정해진 데이터를 가지고 배치하는
로직만 돌려주면 데이터를 컨트롤하는데 수월...
• 모든 데이터들을 외부 csv파일에서 읽어오기 - 2
모바일 환경에서 게임을 구동하려면
FileInfo대신 Resources.Load();를 사용해야 한다.
• Excel에서 데이터 작성 후 csv형식으로 저장 그리고 적용 결과
• 월드좌표에서 NGUI좌표로 변환
UI_ArrowButton.cs
주의! NGUI Camera오브젝트의 CullingMask로 NGUI오브젝트들의 Layer만 보여지게
• [NGUI] Panel과 Depth 개념
Panel : UI Layer라고 생각하면 된다.
Depth : 깊이, 0에 가까울수록 먼저 그리고 값이 클수록 나중에
그린다.
다른 UI오브젝트의 Depth보다 Panel의...
• [NGUI] UI오브젝트 동적 생성 - 1
아래의 코드를 참고하여 프로젝트에 맞게 코드를 수정함
• [NGUI] UI오브젝트 동적 생성 - 2
csv파일에 읽어 들인 캐릭터들의 개수 만큼
NGUI 버튼 오브젝트를 동적 생성하도록 함
어려웠던 부분
• 이동 로직
처음에는 위 그림처럼 상하좌우 Raycast를 쏘아 Ray와 충돌하는 Tile를 검사
하지만 단점이 많음
주위 Tile이 몇 개 있는지…
이미 지나온 Tile에 대한 예외 처리
다음 Tile이 위치한 방향...
• 전투 페이즈의 주사위 이벤트
GameObject SquareDice에 Aniamtor적용 후
StateMachine에 따라 애니메이션 동작을 시작하게 하고
Rolling상태가 되었다가 아무런 애니메이션도 없는 Rea...
• 스크립트 초기화 순서 문제
UIManager스크립트를 NGUI오브젝트인 UIRoot오브젝트에
붙여서 게임 실행했을 당시에는 잘되는데 유니티 재시작 후
다시 게임 실행해보면 다른 스크립트에서 UIManager의
ins...
• 스크립트 초기화 순서 문제
스크립트 호출 순서가
문제가 있는지 의심이 되어
스크립트 선택 후 Inspector창에 있는
Execution Order버튼 클릭
UIManager스크립트 드래그 해서
나타난 리스트에 추가...
• 참고 사이트
NGUI Tutorials :
https://www.youtube.com/user/ArenMookR5/playlists
Unity 2D Tutorial :
https://www.youtube.com/wa...
Port polio게임소개
of 41

Port polio게임소개

DiceWarz 2D 게임 소개
Published on: Mar 4, 2016
Published in: Software      
Source: www.slideshare.net


Transcripts - Port polio게임소개

  • 1. 지원자 : 서영훈 개발 기간 : 2015/06/17 ~ 2015/08/17 DICE OF WAR 게임 소개 게임 유투브 영상 : HTTPS://WWW.YOUTUBE.COM/WATCH?V=UNMEWAGD3ZA
  • 2. • 만드는 이유 • 어떤 게임 • 지금까지 한 것 • 개발하면서 공부하게 된 부분 • 어려웠던 부분
  • 3. 만드는 이유
  • 4. • 게임 개발 프로젝트를 참여해서 프로젝트 목표는 달성 했으나 내가 목표로 한 부분에서는 제대로 완성 해 본 이력이 없어 시도함 • 유니티 실무 경험이 없어 대신 경험 삼아 직접 포트폴리오용으로 만듦 • 유니티 예제같은 것을 보고 배우는 것은 한계가 있어 직접 개발해 보며 작게 나마 경험을 쌓기 위해
  • 5. 어떤 게임을?
  • 6. 주사위 잔영 (개발사 : 소프트맥스[2001])을 그대로 한번 만들어 보자!! 에서 시작 포트폴리오로 어떤 게임을 만들어 볼까 고민 중…
  • 7. [가칭]DiceOfWar • 장르 : 2D 주사위 보드게임 • 개발환경 : Unity5.1.1f1, VisualStudio2010 • 사용에셋 : DicePackLight 1.3(이동주사위), NGUI Next-Gen UI 3.9.0b(UI), Colorable FantasyUI(UI Atlas) • 사용 스프라이트 : 주사위 잔영, 라그나로크 온라인
  • 8. • 게임 시스템 소개 : 캐릭터 – 이동(주사위갯수)만큼 주사위를 굴력 이동, 공격(주사위갯수)만큼 이동 중 적과 조우 시 전투 주사위를 생성, 방어(주사위갯수)만큼 이동하는 적과 조우 시 전투 주사위 를 생성, 지력(수치)만큼 전투시 도움을 준다. 그런 능력치들를 이용해 장애물을 넘어 골인지점까지 가야한다. 파티 – 같은 팀 캐릭터와 첫 발판을 제외한 같은 발판에 있게되면 파티를 할 수 있다. (오른쪽에서 2~3번째 캐릭터 가 전투시 지력으로 지원을 하고 마지막 캐릭터가 방어 시 방어 주사위 개수로 방어를 함)
  • 9. • 게임 시스템 소개 : 타일 – 3or4칸 이동, 감옥, 아이템 획득, 전투, 도착하면 임의의 타일로 교체 다음 턴 낮은 수 이동 주사위, 다음 턴 높은 수 이동 주사위, 시작, 골인, 도착시 현재 전역 속성이 타일의 각 속성으로 교체되는 타일 [Sword(공격+2,지력-2), Cup(지력+2,공격-2), Disk(이동+2, 방어-2), Wand(방어+2, 이동-2) ] ( * 현재 버전에서는 타일 이벤트가 아직 미구현입니다.)
  • 10. • 게임 시스템 소개 : 적 – 맵의 타일에 각각 배치되어 있고 직접 싸움을 걸지 않고 플레이어가 걸면 전투를 함, 플레이어가 전투에서 이기면 사라지고, 적이 이기면 플레이어 캐릭터는 이동 전의 타일 로 돌아감
  • 11. • 게임 UI 소개(1) : 팀 색, 유저 닉네임, 선택한 캐릭터의 코스트 맨 왼쪽의 X버튼 유저 슬롯 열 기/닫기 캐릭터 이름, 코스트가 표시되어 있고 선택할 수 있는 버튼 좌우 버튼으로 맵 선택 선택한 캐릭터 능력치 표시 게임 시작 버튼
  • 12. • 게임 UI 소개(2) : 현재 속성 (무속성 NONE부터 시작) 턴 수 미니 맵 파티 시 현재 캐릭터 위치 이동, 현재 캐릭터 파티 탈퇴 이동 주사위 굴 리는 버튼 이동할 캐릭터를 선택하는 버튼
  • 13. 지금까지 한 것
  • 14. Character Manager 대기방 요 클래스 구조 소개 MapLoader MapLoader MovingObjInfo UserInfo MapInfo … … 본인이 작성한 클래스 위주로 구조를 나타내었음
  • 15. Character Manager GameManagerMapManager BattleManager UIManager 인게임 주요 클래스 구조 소개 RaceManager Tile MapLoader Tile BasicManager MovingObjInfo … …… CharacterPiece MovingObject … Dice2D … UserCharInfo … CameraControl UI_ArrowButton UI_SlotButton본인이 작성한 클래스 위주로 구조를 나타내었음
  • 16. • CSVParser : FileInfo, TextReader클래스를 이용해 특정 위치에 있 는 csv파일 읽어오게 해 데이터를 읽어오는 클래스, 모든 Loader클래스들이 이 클래스를 상속받음 • CharacterLoader : 캐릭터 정보를 읽어오는Loader, 읽어온 정보를 MovingObjInfo타입으로 저장하고 특정 캐릭터 enum값을 넘겨받으면 그 캐릭터에 정보를 반환하는 기능 있음 • MapLoader : 맵에 배치될 Tile들의 속성, 위치를 읽어오는 Loader, 읽어온 정보를 TileInfo타입으로 저장하고 MapManager에게 넘겨 준다. • MapListLoader : 맵들의 정보(인덱스, 이름, 제한 캐릭터 Cost)를 읽어오는 Loader, MapInfo타입으로 저장하고 watingRoomManager에 넘겨준다.
  • 17. • BasicManager : 모든 Manager클래스의 부모 클래스, 이 클래스를 상속 받은 모든 Manager클래스에 싱글톤 패턴이 적용되 게 함 • GameManager : User의 InGame, 캐릭터 정보를 관리 • MapManager : Tile, Enemy, Character 오브젝트를 배치, Tile타입에 따라 Sprite교체 • RaceManager : 주사위 오브젝트를 생성, 주사위 눈 값 얻기, 캐릭터 이동관련 이벤트, 턴 이벤트 • BattleManager : 전투를 벌일 두 오브젝트 생성 및 애니메이션 제 어, 전투 관련 주사위 생성, 전투 관련 이벤트 • UIManager : NGUI오브젝트들을 제어, UI관련 정보 입출력 • CharacterManager : 이전 Scene에서 받아온 캐릭터, 적 오브젝트들을 생성 및 관리
  • 18. • MovingObjInfo : CharacterPiece, Enemy오브젝트의 공통으로 가지고 있을 정보(인덱스, 팀, 능력치)를 가짐 • MovingObject : CharacterPiece, Enemy오브젝트의 공통으로 가지고 있을 이동, 애니메이션관련 함수를 가짐 • CharacterPiece : Tile 이동, 충돌된 오브젝트(Tile, Enemy)에 따른 이 벤트(파티or전투) 로직 • Enemy : 현재 밟고 있는 타일 반환 • UserCharInfo : User가 플레이하는 캐릭터에 대한 정보와 InGame 에서 필요로 하는 User정보를 관리 • Tile : Tile의 속성(특수타일, 적 타일, 이전 타일, 이후 타일 등)을 가짐
  • 19. • CameraControl : 현재 차례에 선택된 캐릭터를 따라 다니게 하는 카메라 이동 로직 • Dice2D : 전투 페이즈 때 쓰는 스크립트, Sprite 이미지와 Animator를 이용해 주사위를 나타냄 • UI_ArrowButton : 현재 움직이는 캐릭터가 갈림길을 만났을 때 나오는 화살표 UI 오브젝트의 스크립트, 캐릭터 오브젝트 좌 표를 이용해 NGUI좌표로 변환 후 화살표 UI 오브젝트 좌표 수정, 클릭한 방향으로 이동하게 하는 로직 • UI_SlotButton : 좌측 하단의 캐릭터 슬롯의 스크립트, 슬롯에 대 한 캐릭터 인덱스를 반환 • UI_MiniMap : 우측 하단의 맵의 Tile, 캐릭터, 적의 현재 위치를 표시 하는 UI 스크립트
  • 20. • 중요 기능을 우선 개발 [구현] 이동 & 전투 시스템 : 플레이어가 굴려서 나온 주사위 눈만큼 이동, 전투를 하는 시스템 파티 시스템 : 2~3개의 캐릭터가 같은 Tile에 있을 경우 파티를 맺어 같이 이동/전투를 하는 시스템 턴 시스템 : 조작할 수 있는 플레이어 외에 플레이 AI를 추가하고 AI에게 턴을 넘기는 기능 구현 PvP 전투 : 맵에 배치된 적이 아닌 캐릭터들간의 전투 구현과 전투 애니메이션 완성 UI : 팀 표시, 미니 맵, 파티 안내 메시지, 턴 표시, 승리 표시, 인게임 외의 Scene UI 구성 Camera 제어 : 현재 이동하려는 캐릭터를 따라 이동하는 로직을 구현
  • 21. • 그 외 부가 기능 [미구현] Tile 속성 부여 : 감옥이나 주사위 확률 조정, 아이템 획득 같은 이벤트를 발생시키는 Tile 제작 스킬 & 아이템 : 사용 시 캐릭터 능력치나 이동, 전투 상황이 변화하는 기능 추가
  • 22. 개발하면서 공부하게 된 부분
  • 23. • 유니티 C# 환경에서의 싱글톤 각 Manager클래스마다 유일한 인스턴스들을 가질 수 있고 어디서든지 그 인스턴스를 접근하기 위해서 쓰였음 Class BasicManager { private static BasicManager instance; private static GameObject container; public static BasicManager GetInstance(){ if( !instance ) { container = new GameObject(); container.name = “BasicManager”; instance = container.AddComponent( typeof(BasicManager)) as BasicManager; } return instance; } }
  • 24. • 유니티 타이머 Invoke() 일반적인 Timer()대신 MonoBehaviour가 지원하는 Invoke()함수가 있다. Invoke( string methodName, float time ) - methodName 메소드를 time 초 후에 호출 InvokeRepeating( string methodName, float time, float repeatRate ) - methodName 메소드를 time 초 후에 호출 후에 repeatRate 초 마다 반복 호출 CancelInvoke() - 이 함수가 쓰여진 스크립트에 있는 모든 Invoke를 취소 CancelInvoke( string methodName ) - 이 함수가 쓰여진 스크립트에 있는 methodName를 호출하는 모든 Invoke를 취소
  • 25. • Coroutine() 특정한 일을 단계적으로 발생하게 하거나 시간에 흐름에 따라 발생하거나 다른 연산이 완료될 때까지 기다리는 루틴을 작성할때 사용 yield return null - Update구문의 완료될때까지 대기 yield return WaitForEndOfFrame - 현재 프레임의 렌더링 작업 이 끝날때 까지 대기 yield return WaitForFixedUpdate - FixedUpdate구문이 완료될때 까지 대기 Yield return www - 웹에서 데이터 전송이 완료될때 까지 대기
  • 26. • NGUI 버튼 이벤트 동적 할당 방법 - 1 SetUIButtonEvent함수로 버튼객체에 이벤트를 전달 게임플레이를 하면 동적으로 할당한 이벤트함수가 옆에 OnClick아래 Notify에 들어간걸 확인할 수 있다. UIManager.cs Battle Manager.cs
  • 27. • NGUI 버튼 이벤트 동적 할당 방법 - 2 연결한 이벤트 함수인 OnClickRollButtonInBattleZone함수, 전 슬라이드에서 나온 함수 SetUIButtonEvent에서 설정한 것과 같이 매개변수 개수와 타입이 같은 걸 볼 수 있음 Battle Manager.cs
  • 28. • 모든 데이터들을 외부 csv파일에서 읽어오기 - 1 맵에 배치하는 캐릭터, 적, Tile들을 하드코딩으로 배치하기 보다는 외부 csv파일에서 정해진 데이터를 가지고 배치하는 로직만 돌려주면 데이터를 컨트롤하는데 수월할 것 같아 적용해보기로 함
  • 29. • 모든 데이터들을 외부 csv파일에서 읽어오기 - 2 모바일 환경에서 게임을 구동하려면 FileInfo대신 Resources.Load();를 사용해야 한다.
  • 30. • Excel에서 데이터 작성 후 csv형식으로 저장 그리고 적용 결과
  • 31. • 월드좌표에서 NGUI좌표로 변환 UI_ArrowButton.cs 주의! NGUI Camera오브젝트의 CullingMask로 NGUI오브젝트들의 Layer만 보여지게
  • 32. • [NGUI] Panel과 Depth 개념 Panel : UI Layer라고 생각하면 된다. Depth : 깊이, 0에 가까울수록 먼저 그리고 값이 클수록 나중에 그린다. 다른 UI오브젝트의 Depth보다 Panel의 Depth가 최우선 시 됨
  • 33. • [NGUI] UI오브젝트 동적 생성 - 1 아래의 코드를 참고하여 프로젝트에 맞게 코드를 수정함
  • 34. • [NGUI] UI오브젝트 동적 생성 - 2 csv파일에 읽어 들인 캐릭터들의 개수 만큼 NGUI 버튼 오브젝트를 동적 생성하도록 함
  • 35. 어려웠던 부분
  • 36. • 이동 로직 처음에는 위 그림처럼 상하좌우 Raycast를 쏘아 Ray와 충돌하는 Tile를 검사 하지만 단점이 많음 주위 Tile이 몇 개 있는지… 이미 지나온 Tile에 대한 예외 처리 다음 Tile이 위치한 방향이 현재 Ray방향과 맞지 않다면? 그래서 해결책으로 현재 밟고 있는 Tile에 이전 Tile과 다음 Tile들 정보를 가
  • 37. • 전투 페이즈의 주사위 이벤트 GameObject SquareDice에 Aniamtor적용 후 StateMachine에 따라 애니메이션 동작을 시작하게 하고 Rolling상태가 되었다가 아무런 애니메이션도 없는 Ready상태로 바꾸게 했음 그때 SpriteRenderer에서 Sprite을 바꿔도 적용되지 않는 문제가 생김 해결방안으로 Animator를 Enable을 false한 후 Sprite교체
  • 38. • 스크립트 초기화 순서 문제 UIManager스크립트를 NGUI오브젝트인 UIRoot오브젝트에 붙여서 게임 실행했을 당시에는 잘되는데 유니티 재시작 후 다시 게임 실행해보면 다른 스크립트에서 UIManager의 instance를 사용하려 할때 UIManager의 instance가 생성되지 않았다고 에러 메세지가 나옴
  • 39. • 스크립트 초기화 순서 문제 스크립트 호출 순서가 문제가 있는지 의심이 되어 스크립트 선택 후 Inspector창에 있는 Execution Order버튼 클릭 UIManager스크립트 드래그 해서 나타난 리스트에 추가 실행 순서 설정 값이 작을 수록 먼저 실행됨
  • 40. • 참고 사이트 NGUI Tutorials : https://www.youtube.com/user/ArenMookR5/playlists Unity 2D Tutorial : https://www.youtube.com/watch?v=Fdcnt2-Jf 4w&list=PLX2vGYjWbI0SKsNH5Rkpxvxr1dPE0Lw8F Unity 개발 팁 : http://unityindepth.tistory.com/

Related Documents