• 따라 하면서 배우는 NGUI 유니티 2D 게임 프로그래밍

  • 송요창 지음

  • 게임 개발 시리즈_012
  • ISBN: 9788998139704
  • 45,000원 | 2014년 11월 14일 발행 | 600쪽



유니티는 현재 가장 인기 있는 게임 개발 도구다. 이 책에서는 유니티의 사용법과 유니티용 GUI 플러그인인 NGUI의 장점 및 2D 게임 제작을 지원하기 위해 유니티 4.3부터 추가된 유니티 2D 기능 등을 소개한다.

독자는 두 가지 게임을 직접 제작하는 과정을 통해 C# 프로그래밍, PHP와 MariaDB를 활용한 간단한 네트워크 작업, 안드로이드 네이티브 환경과의 연계, 페이스북 API를 활용한 소셜 기능 구현까지 배울 수 있다. 구체적인 예제와 함께 게임 플레이와 소셜 요소 등 게임 개발의 모든 사항을 다루고 있어 처음 게임 개발을 시작하려는 분들에게 이 책은 좋은 안내자가 될 것이다.

★ 이 책에서 다루는 내용 ★

  • NGUI를 활용한 두더지 게임 제작
  • 유니티 2D 기능과 NGUI를 활용한 디펜스 게임 제작
  • 안드로이드 네이티브 연계와 PHP를 활용한 네트워크 작업

★ 저자의 유니티 동영상 강좌 사이트 ★

 

<책 속으로>

유니티를 통해 게임을 만드는 일이 쉬워졌습니다. 만들어진 게임을 아이폰이나 안드로이드 등의 다양한 플랫폼으로 손쉽게 배포할 수도 있고, 어도비 플래시나 애프터 이펙트를 다루듯 손쉽게 제작할 수 있기 때문입니다. 그렇지만 GUI 제작만큼은 불편했습니다. 반드시 별도의 프로그램을 이용해 GUI를 구성해야 했고, 이를 확인하기 위해서는 번거롭게 게임을 플레이해 봐야만 했습니다. 하지만 NGUI가 출시되면서 프로그램 없이 GUI 구성이 가능하고, 에디터를 통해 제작된 모습이 그대로 게임 화면에 출력됩니다.

이 책은 유니티와 유니티용 GUI 플러그인인 NGUI의 장점 및 사용법과 함께 실제 게임 제작의 흐름을 배울 수 있게 구성했습니다. 1장에서는 유니티에 관한 기본적인 내용을 설명하고, 2장에서는 기초적인 2D 두더지 게임을 제작하면서 NGUI의 장점을 설명합니다. 3장에서는 2D 디펜스 게임을 제작하면서 C# 프로그램, NGUI를 통한 GUI 구성, PHP와 MariaDB를 활용한 간단한 네트워크 작업, 안드로이드 네이티브 환경과의 연계, 페이스북 API를 활용한 소셜 기능 구현 등 NGUI의 구체적인 기능을 자세히 설명했습니다.

이 책은 새롭게 게임을 제작하려는 분들에게 게임 플레이 외에도 게임 제작에 필요한 요소들이 무엇인지 간단하게나마 설명하려는 노력의 산물입니다.

-- 서문 중에서

 

상세 이미지

본문 상세 이미지

 

"3장 심화과정- 디펜스 게임 만들기"에 대한 동영상 강좌

독자분들의 학습에 도움을 드리기 위해서 3장 디펜스 게임 만들기에 대한 동영상 강좌를 제공해드리고 있습니다.

동영상 강의는 순차적으로 올라갈 예정이며, 또한, 과정 학습에 도움을 드리기 위해 도서 내의 예제 소스를 깃북으로 제공해드리고 있습니다.

제공해 드리는 예제 소스는 지금까지 확인된 오탈자 사항이 반영된 최신 소스입니다.

송요창

숭실대 미디어 학부를 졸업하고 꿈을 찾아 모션 디자이너에서 게임 개발자가 되었다. 현재 모바일 게임 제작을 하고 있으며, 인디 개발자를 위한 커뮤니티 레벨제로 카페의 부 운영자로 활동하면서 게임을 개발하면서 느낀 점과 노하우를 공유하고 있다.

  • ▣ 01장: 유니티 개발 환경 구성
    • 유니티 설치
      • 유니티 설치 파일 내려받기
      • 윈도우에서 유니티 설치
      • 윈도우에서 유니티 실행
      • 맥에서 유니티 설치
      • 맥에서 유니티 시작
      • 유니티 인증
      • 유니티 구성 요소
    • UI 뷰
      • 프로젝트 브라우저
      • 하이어라키
      • 인스펙터
      • 씬 뷰와 게임 뷰
      • 툴 바
    • 기본 구성 요소
      • 게임 오브젝트와 컴포넌트
      • 스크립트
      • 프리팹
    • Hello, Unity!
      • 새로운 프로젝트 생성
      • 새로운 씬 생성
      • 게임 오브젝트 생성
    • 스크립트 생성
      • 스크립트 편집기 실행
      • 스크립트 구조 살펴보기
      • 스크립트 작성
      • 게임 오브젝트에 GuiScript 스크립트 추가
      • 실행 및 씬 저장
  •  
  • ▣ 02장: 기초과정 - NGUI로 두더지 게임 만들기
    • 게임 제작 준비
    • NGUI
    • 아틀라스 제작
      • 새로운 프로젝트 생성
      • 이미지 추가
    • NGUI 추가
    • 아틀라스 생성
      • 스프라이트 추가
    • 이미지 폰트 제작
      • Bmfont 설치
      • 폰트 설정
      • 사용할 글자 선택
      • 출력 옵션 설정
      • 출력
      • 확장자 변경
      • 폰트 생성
    • 다이나믹 폰트 추가
      • TTF 파일 추가
    • 배경 유저 인터페이스 구성
    • 기본 배경 구성
      • 씬 작성
      • 레이어 등록
    • UI 생성
      • 배경 구성
      • 타임바 구성
      • 두더지 배경 추가
      • 타임바 위치 수정
      • 점수 라벨 추가
      • 준비 메시지 스프라이트 추가
    • 게임 매니저 스크립트 프로그래밍
      • 게임 매니저 스크립트 생성
      • 게임 스테이트 선언
      • 멤버 필드 등록
      • 준비 메시지 처리
      • 타임바와 타임 텍스트 처리
    • 두더지 만들기
    • 두더지 구성
      • 패널 추가
      • 두더지 스프라이트 구성
      • Tween 기능 활용
      • 충돌 처리
    • 두더지 스크립트 작성
      • 두더지 스크립트 생성
      • 스테이트 선언
      • 멤버 필드 등록
      • TweenPosition 초기 설정
      • 두더지 움직임 처리
      • 터치 입력 처리
      • 타이머 처리
    • 두더지 활용
      • 두더지 배치
      • 게임 매니저 스크립트 멤버 필드 추가
      • 게임 매니저 스크립트 메서드 추가
      • 두더지 게임 오브젝트 등록 및 출현 비율 입력
    • 두더지 게임 마무리
    • 효과음 처리
      • 배경음 및 효과음 등록
      • 배경음 재생
      • 효과음 재생
    • 결과 처리
      • 스프라이트 추가
      • 결과창 구성
      • 다시하기 버튼 추가
      • 결과창 작동 처리
    • 두더지 게임 난이도 조절
    • 두더지 대기 시간 조절
      • 멤버 필드 추가
      • 게임 매니저 스크립트 변경
      • 대기 시간 입력
    • 점수 처리
      • 점수 증가 메서드
      • 게임 매니저 스크립트 접근 처리
      • 두더지 스크립트 수정
    • 두더지 출현 빈도 조절
      • 멤버 필드 추가
      • 게임 매니저 스크립트 변경
      • 출현 시간 입력
    • 두더지 동시 출현 조절
      • 멤버 필드 추가
      • 게임 매니저 스크립트 변경
      • 두더지 동시 출현 입력
    • 콤보와 피버 추가
      • 콤보와 피버 유저 인터페이스 추가
      • 멤버 필드 추가
      • 게임 매니저 스크립트 수정
      • 콤보와 피버 적용
    • 두더지 게임 정리
      • 게임 매니저 스크립트
      • 두더지 스크립트
  •  
  • ▣ 03장: 심화과정 - 디펜스 게임 만들기
    • 유니티 2D기능
    • 유니티 2D 기능 소개
    • 테스트 캐릭터 구성
      • 스프라이트 추가
      • 캐릭터 구성
    • 애니메이션 제작
      • 캐릭터 애니메이션 제작
    • 메카님 애니메이션 시스템
      • 메카님 상태 구성
      • 상태 전이 구성
      • 상태 전이 조건 추가
      • 애니메이션 컨트롤러 적용
      • 캐릭터 제어 스크립트 작성
      • 캐릭터 제어 스크립트 적용
      • 지면 추가
    • 디펜스 게임 프로토타입 제작
    • 준비 작업
      • 패키지 추가
      • 화면 비율 설정
    • 게임 구성
      • 배경 구성
      • 캐릭터 추가
    • 새총 발사
      • 스크립트 추가
      • 멤버 필드 추가
      • 발사 방향 계산
      • 새총 발사 확인
      • 새총 발사 애니메이션 연결
      • 애니메이션 이벤트
    • 적 캐릭터 제작
      • 멤버 필드 추가
      • 적 캐릭터 적용
      • 이동 처리
      • 공격 애니메이션 처리
      • 충돌 처리
    • 게임 플레이 매니저
      • 게임 데이터 스크립트 생성
      • 게임 플레이 매니저 스크립트 생성
      • 농장 HP 및 점수 처리
      • 게임 데이터 스크립트와 연결
      • 게임 오브젝트 풀(Pool)
      • 적 캐릭터 생성 데이터 로드
      • 적 캐릭터 생성
    • 새로운 적 캐릭터 추가
      • 새로운 적 캐릭터 설정
      • 새로운 적 스크립트 생성
    • 애니메이션 수정
    • 디펜스 게임 유저 인터페이스 구성
    • 게임 플레이 UI 구성
      • 농장 체력 표시
      • 점수 표시
      • 적 웨이브 표시
      • 일시 정지, 배속 변경 버튼 추가
      • 일시 정지 화면 구성
      • 적 캐릭터 체력 표시
    • 게임 플레이 UI 연결
      • 농장 체력, 점수, 적 웨이브 표시 연결
      • 일시 정지 버튼과 배속 버튼 처리
      • 적 캐릭터 체력 표시 연동
    • 게임 플레이 추가 작업
      • 코인 표시
      • 적 보스 캐릭터 등장 표시
      • 결과창 제작
      • 코인 제작
      • 코인 스크립트 제작 및 적용
      • 결과창 연결
      • 발사 게임 오브젝트 수정
      • 게임 준비와 홈 이동 버튼 연동
    • 네트워크 작업
    • 서버 구성
      • WPN-XM 설치
      • 관계형 데이터베이스와 SQL
      • 사용자 정보 파악
      • phpMyAdmin 접속 및 패스워드 변경
      • 테이블 생성
    • 사용자 기본 데이터 연동
      • 씬 추가
      • 가입 요청 처리
      • 가입 처리 서버 프로그래밍
      • 데이터 구조 만들기
    • 로비 씬 작업
      • 기본 데이터 표시
      • 순위 표시 프리팹 생성
      • 순위 처리 작동
      • 경고창 처리
      • 게임 친구 추가
      • 메시지 창 처리
      • 상점 처리
      • 게임 준비 창
      • 게임 플레이와 데이터 연결
      • 효과 추가
    • 결제
    • 준비 작업
      • 자바 개발 킷(JDK) 설치
      • 안드로이드 SDK 설치
      • IDE 설치
      • 안드로이드 프로젝트 생성
      • 안드로이드 애플리케이션 생성
      • 구글 플레이 스토어 가입
      • 애플리케이션 등록
      • 결제 상품 등록
    • 결제 진행
      • 결제 진행 과정 이해
      • 클라이언트 측 구현
      • 결제 아이템 제작 및 초기화
      • 인 앱 결제 처리가 포함된 안드로이드 애플리케이션 생성
      • 안드로이드 프로그래밍
      • 인 앱 결제 흐름
    • 결제 테스트
      • 네트워크 구성
      • 안드로이드 애플리케이션 생성
      • 테스트 결제 준비
      • 테스트 결제 확인
      • 유의 사항
    • 페이스북 활용
    • 준비 사항
      • 페이스북 SDK 내려받기
      • 안드로이드 키 해쉬(Key Hash) 생성
      • 페이스북 앱 등록
      • 페이스북 SDK 초기화
    • 페이스북을 이용한 간편 로그인
      • 로그인 과정
      • 페이스북 SDK 초기화
      • 페이스북 SDK 사용
      • 데이터베이스 작업
      • 데이터 처리
      • 페이스북 로그인 처리
    • 프로필 이미지 사용
      • 친구 데이터 변경
      • 프로필 이미지 로딩
    • 안드로이드 빌드
      • 페이스북 모듈 추가 방식
      • 안드로이드 프로젝트 가져오기 방식
    • 디펜스 게임 정리
  •  
  • ▣ 부록
    • 마이크로소프트 오피스 엑셀에서 XML 파일 손쉽게 제작하기
      • XML 매핑 파일 제작
      • 엑셀 개발 도구 리본 설정
      • XML 맵핑 설정
      • XML 파일 저장
  • 106쪽, <예제 2-10> 뒷부분의 TweenPostion을 초기화하는 부분을 아래와 같이 변경해야 합니다.

    molyTweenPos.Reset(); -> molyTweenPos.ResetToBeginning();

  • 107쪽, <예제2-12> MolyUnit.cs 코드 내용 중간에 switch문의 case를 아래와 같이 각각 변경합니다.

    case true: -> case SpriteType.Ppo:

    case false: -> case SpriteType.Ppu:

  • 110쪽, case MolyState.hit: --> case MolyState.hited:

  • 113쪽, <예제2-18> MolyUnit.cs 내의 molySprite.spriteName이 잘못 들어가 있습니다.

    molySprite.spriteName = "ppo_surprised"; -> molySprite.spriteName = "ppo_hit";

    molySprite.spriteName = "ppu_suprised"; -> molySprite.spriteName = "ppu_hit";

  • 132쪽, 표 2-24의 Text 행

    Text 0 --> Text 다시하기

  • 149쪽, 예제 2-38

    bool haveFeverMode = false; --> public bool haveFeverMode = false;

  • 168쪽

    Transform 컴포넌트의 Position을 설정합니다. -> Transform 컴포넌트를 설정합니다.

  • 169쪽

    표 3-4를 다음과 같이 변경

    게임 오브젝트 이름 Transform 컴포넌트 Position
    Char_Body 0, -0.02, 0
    게임 오브젝트 이름 Transform 컴포넌트 Rotation
    Char_ArmL 0, 0, 307.4
    Char_ArmR 0, 0, 56.18
    Char_ThighL 0, 0, 16
    Char_FootL 0, 0, -32
    Char_ThighR 0, 0, 16
    Char_ThighL 0, 0, -32
  • 196쪽, GameOvject tempObj; 아래에 다음 코드를 추가

    Animator animator;
    
    void Awake()
    {
        animator = GetComponent<Animator>();
    }
    
  • 205쪽, 예제 3-12의 멤버 필드 중 RaycastHit2D는 초기화 없이도 사용 가능합니다.

    protected RaycastHit2D isObstacle = false; -> protected RaycastHit2D isObstacle;

  • 205쪽, 예제 3-12 수정

    EnemyState currentState = EnemyState.none; --> public EnemyState currentState = EnemyState.none;

  • 215쪽, 예제 3-22의 마지막 부분인 217쪽에 Attack 메서드를 추가.

    public void Attack()
    {
        //농장에 피해를 가한다.
        RaycastHit2D findObstacle = Physics2D.Linecast(
            transform.position, frontPosition.position,
            1 << LayerMask.NameToLayer("Obstacle"));
    
        if (findObstacle)
        {
            IDamageable damageTarget =
                (IDamageable)findObstacle.transform.GetComponent(typeof(IDamageable));
    
            damageTarget.Damage(attackPower);
        }
    }
    
  • 229쪽, LoadEnemyWaveDataFromXML() 메서드는 해당 페이지에서 아직 생성 전입니다.

    472쪽의 예제 3-160에서 추가되나 원활한 진행을 위해 233쪽의 예제 3-38에 --(전략)-- 이후에 아래 내용을 추가합니다.

    void OnEnable()
    {
        InitGameObjectPools();
        LoadEnemyWaveDataFromXML();
    }
    --(중략)--
    

    위와같이 LoadEnemyWaveDataFromXML() 메서드를 호출하면 에러가 처리될 것 입니다.

  • 229쪽, 예제 3-24에서 게임 오브젝트 풀을 사용하는 부분을 아래와 같이 수정합니다.

    GameObjectPool tempGameObjectPool = 
        new GameObjectPool(gameObjectPoolPosition.transform.position.x); 
    

    ->

    GameObjectPool tempGameObjectPool = 
        new GameObjectPool(gameObjectPoolPosition.transform.position.x, spawnEnemyObjs[i]); 
    
  • 247쪽, 예제 3-45에 아래 코드를 추가합니다.

    // shot gameobject pool
    GameObjectPool objPool;
    
  • 254쪽, 마지막 줄에 아래와 같은 내용 추가

    EnemyShotObject가 나타나지 않는다면 프로젝트 브라우저/Prefab/EnemyShotObject 의 enemyShotObj 게임 오브젝트를 확인하여 Sprite Renderer 컴포넌트의 Sorting Layer를 Charactors로 변경합니다.

  • 258쪽, 표 3-20

    Filled -> Tiled

  • 262쪽, 표 3-24의 내용은 화면 설정이 다를 경우 달라질 수 있습니다.

  • 273쪽, 첫 단락 아래(표 3-40 위)에 아래 내용을 추가합니다.

    Transform 컴포넌트의 Position을 0, -50, 0으로 설정해 buttonTitle 게임 오브젝트를 아래쪽에 위치시킵니다.

  • 274쪽, 맨 아래 단락

    PauseButton -> PlayButton

  • 278쪽, 맨 윗줄

    HPBar -> EnemyHPBar

  • 295쪽, 예제 3-70

    CreateGameObject(enemyHPBar, 20, enemyHPBarRoot, Vector3.one); --> CreateGameObject(spawnEnemyObjs[i], 20, gameObjectPoolPosition);

  • 300쪽, 표 3-49 수정

    Target: Panel 게임 오브젝트 --> CoinBar 게임 오브젝트

  • 304쪽, 표 3-51 수정

    Color Tint : 255, 227, 167, 25 -> 255, 227, 167, 225

  • 316쪽, 내용 추가(코인 제작 위쪽에 아래 내용 추가)

    하이어라키에서 @GM 게임 오브젝트를 선택하고 아래 표를 참조하여 게임 플레이 매니저 스크립트에 필요한 오브젝트를 선택해 각각 끌어다 놓습니다.

    GamePlayManager 인스펙터 값 이름 게임 오브젝트 이름
    Result Window ResultWindow
    Result High Score Lb HighScoreLabel
    Result Now Score Lb CurrentScoreLabel
    Result Wave Lb WaveResultLabel
    Result Dead Enemys Lb EnemyLabel
    Result Get Coins Lb 4_CoinSectionBG의 자식 게임오브젝트 CoinLabel
  • 336쪽, 예제 3-91의 ohter.compareTag("invisibleArea")에 관한 설명

    그리고 else if로 게임 플레이 화면 외부로 진입했을 때 --> 그리고 발사 게임 오브젝트가 게임 플레이 화면 외부로 진입했을 때 else if문을 통해서 invisibleArea 태그가 할당된 게임 오브젝트와 충돌하면
    
  • 466페이지 예제 3-155: GamePlayManager.Button.cs -> LobbyGM.Ready.cs

  • 400쪽,

    form.AddField("userKeyNo", userKeyNo);
    

    줄 아래에 아래와 같은 내용을 추가합니다.

    form.AddField("userID", GameData.Instance.userdata.name);
    
  • 437쪽,

    아래와 같은 내용을

    int key = System.Convert.ToInt32(nodeList[i][node]);
    

    다음과 같이 수정합니다.

    int key = System.Convert.ToInt32(nodeList[i].SelectSingleNode(noNode).InnerText);
    

예제코드 관련 깃허브 페이지

유의사항

두더지 게임과 디펜스 게임은 반드시 NGUI 플러그인이 필요한 프로젝트입니다. 하지만 유료 플러그인이므로 완성된 소스코드에는 NGUI 플러그인이 포함되어있지 않습니다. NGUI 3.7.1 이상 버전의 NGUI 플러그인을 구매하셔서 해당 프로젝트 폴더 Asset - NGUI 폴더로 추가하신 후 진행해야만 올바른 결과를 얻을 수 있습니다.

보충수업(동영상 강의)


엮인 글

엮인 글 주소: http://wikibook.co.kr/unity-ngui/trackback/