Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Port polio게임소개

298 views

Published on

DiceWarz 2D 게임 소개

Published in: Software
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

Port polio게임소개

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

×