Top

[C# 실전 예제로 배우는]
유니티3D 게임 스크립트

  • 원서명Unity Game Development Scripting (ISBN 9781783553631)
  • 지은이카일 다우스트(Kyle D’Aoust)
  • 옮긴이김홍중
  • ISBN : 9788960777040
  • 24,000원
  • 2015년 05월 29일 펴냄
  • 페이퍼백 | 232쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 게임 개발 프로그래밍

책 소개

요약

요즘 단연 첫손에 꼽히는 모바일 게임 개발 툴인 유니티3D로 게임을 개발할 때 필요한 스크립트 작성 방법을 알려주는 책이다. 다양한 예제를 통해 사용자의 입력 처리, GUI, 아이템, 인벤토리, 인공지능, 통계, 세이브, 소리, 설정 등 2D, 3D를 막론하고 게임을 만들 때 꼭 필요한 기본적인 요소를 만드는 방법과 테스트하는 방법을 소개한다.

이 책에서 다루는 내용

■ 키보드, 마우스와 게임패드의 입력 처리
■ 세 종류의 확장 가능한 아이템 생성
■ 단축키 시스템을 포함한 인벤토리 구현
■ 게임의 비디오, 오디오 설정 최적화
■ 버튼, 체력 바, 피해량 알림을 GUI HUD로 구현하는 방법
■ 복합적인 인공지능 시스템 구현
■ 다양한 방식으로 게임 데이터를 세이브하는 방법
■ 플레이어의 통계와 점수를 추적하는 방법

이 책의 대상 독자

이 책은 프로그래밍과 스크립트 작성에 관한 지식을 어느 정도 갖추고 있으며 유니티3D를 사용해서 게임 개발을 시작하려는 독자를 대상으로 한다. 이미 유니티3D를 사용하고 있더라도 게임 플레이 요소를 모듈화하는 방법을 다루는 이 책은 여전히 유용할 수 있다.

이 책의 구성

1장, ‘입력’에서는 Xbox 360 컨트롤러용 컨트롤과 마우스, 키보드용 컨트롤을 생성하는 방법을 상세하게 살펴본다. 또 플레이어가 원하는 방식으로 게임을 플레이할 수 있게 커스터마이징이 가능한 컨트롤 프로파일도 만들어본다.

2장, ‘GUI’는 2D와 3D GUI 요소를 만드는 방법을 소개한다. 체력 바, 플레이어 정보, 3D 체력 바, 3D 피해량 알림, 적 이름표 등을 만들어본다.

3장, ‘확장 가능한 아이템 클래스’는 셀프 아이템, 근접 아이템, 발사 아이템에 사용할 아이템 클래스를 만드는 방법을 알려준다. 그런 다음, 이런 아이템을 역할에 따라 체계적으로 분류해본다.

4장, ‘인벤토리’는 게임의 인벤토리 시스템을 만드는 방법을 가르쳐준다. 아이템 추가, 아이템 제거, 퀵 아이템 등 기본적인 인벤토리의 구성 요소를 만들어본다. 마지막으로 GUI에 인벤토리를 표시하는 방법도 소개한다.

5장, ‘인공지능’에서는 살아 움직이는 듯한 인공지능을 만드는 방법을 보여준다. 유한 상태 머신과 행동 트리를 소개하고 이런 인공지능 시스템을 사용해서 행동, 효과, 애니메이션, 길 찾기, 경유지 시스템 등을 처리한다.

6장, ‘점수와 통계’에서는 플레이어에게 필요한 통계를 생성하고, 추적하고, 저장하는 방법을 소개한다. 또 통계와 연계해서 업적 시스템도 만들어본다.

7장, ‘세이브와 로드’에서는 플랫 파일과 XML 파일을 사용해서 데이터를 세이브, 로드하는 시스템을 만드는 방법을 소개한다. 그런 다음에 이런 시스템을 사용해서 체크 포인트를 기준으로 하는 세이브 시스템과 언제 어디서든 세이브할 수 있는 시스템을 구현해본다.

8장, ‘소리’에서는 배경음악, 주변 소리, 음향 효과를 처리하는 시스템을 만드는 방법을 소개한다. 플레이 리스트 시스템, 임의 재생 시스템, 이벤트 기반 시스템이 여기에 속한다.

9장, ‘게임 설정’에서는 오디오, 비디오 설정을 입맛에 맞게 바꾸는 방법을 소개한다. 또 PlayerPrefs를 사용해서 설정을 저장하고 로드하는 기능을 만들어본다.

10장, ‘실전 게임 프로젝트’에서는 앞서 배운 거의 모든 내용을 작은 게임으로 취합한다. 앞서 소개한 다양한 요소를 사용해서 간단한 1인칭 액션 RPG 게임을 만들어본다.

저자/역자 소개

저자 서문

직관적이고 강력한 유니티 게임 엔진은 가장 널리 쓰이며 큰 사랑을 받고 있는 게임 개발용 패키지 중 하나다. 유니티 스크립트 작성은 매우 중요한 작업이지만 필요한 게임 요소를 입맛에 맞게 만드는 수준까지 도달하긴 쉽지 않다. 스크립트를 모듈화하는 방법을 배우면 스크립트를 다른 프로젝트에 사용할 때 다시 작성할 코드의 양을 최소화할 수 있고 또 전보다 훨씬 쉽고 빠르며, 더 효율적으로 작업할 수 있다.

이 책은 각 장마다 새로운 게임 요소의 스크립트를 작성하는 방법을 소개한다. 키보드와 마우스, Xbox 360 컨트롤러에 사용할 독자적인 컨트롤 제작을 시작으로, 인벤토리, 데이터 저장, 인공지능처럼 복잡한 시스템에도 대처한다. 이런 요소를 만들면서 스크립트를 더욱 간단하고 사용하기 쉽게 만드는 방법도 배운다. 즉 프로그래머가 아니어도 드래그앤드롭만으로 바로 사용할 수 있는 스크립트를 만들어보려 한다. 마지막으로 새로 배운 모든 기법을 총망라해서 온전한 실전 게임 프로젝트를 만들어본다.

저자 소개

카일 다우스트(Kyle D’Aoust)

약 10년의 프로그래밍 경력을 지니고 있다. 14살이었던 2004년에 독학으로 C++ 언어를 깨쳤고, 고등학교를 마칠 무렵에는 비주얼 베이직과 자바스크립트도 습득했다. 대학에서 게임 제작을 전공했으며 C#을 사용하는 유니티 엔진 전문가다. 대학을 졸업한 뒤 소프트웨어 게임화로 경력을 쌓기 시작했다. 지금은 퀴큰 론즈(Quicken Loans)에서 기능성 게임(Serious Game) 개발자로 일하면서 교육용 자재로 쓰이는 게임을 개발하고 있다.

옮긴이의 말

2009년 즈음 마주한 유니티3D의 첫인상은 솔직히 썩 좋지 않았다. 유니티가 원래 게임 엔진으로 만들어진 툴도 아니었고, 유니티로 개발했다고 광고하던 게임이 하나같이 조악했던 탓도 있었겠지만, 단순히 낮은 품질의 3D 게임을 빨리 찍어낼 수 있는 툴 정도라고 생각했기 때문이다. 하지만 섣부른 판단으로 한쪽 눈을 감고 있던 사이에 점점 게임 엔진의 기능을 갖추며 성능을 개선해온 유니티는 어느새 모바일 게임 개발에 가장 널리 쓰이는 개발 툴의 자리를 차지했다.

쉽게 배우고 빠르게 개발할 수 있으며 다양한 플랫폼을 지원한다는 장점과 더불어 전 세계의 개발자와 리소스를 공유할 수 있는 에셋 스토어 역시 빼놓을 수 없는 유니티만의 장점이다. 아직 다소 빈약한 2D 지원과 대규모 게임을 개발하기에는 부족한 기능 등 넘어야 할 산이 있긴 하지만, 유니티는 한동안 모바일 게임 개발 툴 왕좌의 자리를 내주지 않을 것이라고 생각한다.

이 책은 유니티3D로 게임을 개발하는 과정 중에서도 순수하게 프로그래밍의 영역에 해당하는 C# 스크립트 작성 방법을 소개한다. 책이 안내하는 대로 사용자의 입력 처리, GUI, 아이템, 인벤토리, 인공지능, 통계, 세이브, 소리, 설정 등의 다양한 기능을 스크립트로 만들고 또 테스트하다 보면 자신의 게임에 꼭 필요한 스크립트 작성 방법을 찾게 될 것이다. 스크립트 작성이 게임 개발의 전부는 아니므로 게임을 완성하려면 아직 가야 할 길이 많이 남아있겠지만, 언젠가 모바일 앱 마켓이라는 망망대해 어디선가 여러분을 만나게 되길 기대한다.

옮긴이 소개

김홍중

중앙대학교 컴퓨터공학과를 졸업했다. 재학 중에 삼성소프트웨어 멤버십 회원으로 활동하다 삼성전자에 입사했고, DM 연구소, VD 사업부에 근무하면서 윈도우CE, 임베디드 리눅스 환경에서 PDA, 셋톱박스, DTV 등 다양한 기기에 들어가는 애플리케이션을 개발했다.

2007년, 답답한 삶을 털어내고 훌쩍 미국으로 날아가 한껏 여유를 즐기다가 빈손으로 돌아왔다. 이후 웹 호스팅사, 게임 개발사를 거치며 다양한 iOS 앱을 개발해왔으며 요즘은 번역가, 프리랜서로 연명하면서 독립 개발자로 진정한 ‘독립’을 꿈꾸고 있다.

에이콘출판사에서 출간한 『iOS 5 게임 프로그래밍』(2012), 『Beginning Windows Phone 7 Development 한국어판』(2011), 『아이폰 UI 디자인 프로젝트』(2010), 『The iPhone Developer’s Cookbook (Second Edition) 한국어판』(2010) 등을 번역했다.

목차

목차
  • 1장 입력
    • 컨트롤 선택
      • 필요한 컨트롤 매핑
      • 입력 관리자 확인
      • Xbox 360 컨트롤러의 입력 확인
      • 컨트롤러 입력 추가
      • 시작 버튼과 트리거 입력 추가
      • 방향 패드 입력 추가
      • PC 컨트롤 입력 추가
    • 컨트롤 스크립트 작성
      • 스크립트를 생성하고 이름 변경
      • 스크립트 초기화
    • 장치 인식 기능 구현
      • 필요한 변수 추가
      • 장치 인식 함수 생성
      • 식별 함수 생성
    • 준비한 걸 보여주지!
      • 각 컨트롤이 사용할 변수 추가
      • 변수를 표시하는 함수 추가
    • 바꿔!
      • 컨트롤 프로파일 생성
      • 프로파일 전환 함수 추가
      • GUI와 상호작용할 함수 추가
    • 커스터마이징이 핵심이다
      • 컨트롤 스킴 전환
      • GUI에 컨트롤 스킴 전환 버튼 추가
      • 컨트롤 입력을 돌려가면서 사용
      • GUI에 컨트롤 팝업 추가
      • 컨트롤 리셋
      • 리셋 함수 추가
      • 리셋 입력 추가
    • 플레이 테스트
    • 요약

  • 2장 GUI
    • 전통적인 2D UI
      • 신 설정
      • 2D UI 스크립트 작성
      • GUI 버튼 생성
      • 체력 바 생성
      • 레벨 표시
      • 경험치 바 생성
    • 3D UI 스크립트 작성
      • 3D 체력 바 생성
      • 3D 피해량 알림 생성
      • 업데이트 함수 수정
      • 피해량 알림 마무리
      • 3D 이름표 생성
      • 플레이 테스트
    • 요약

  • 3장 확장 가능한 아이템 클래스
    • 셀프 아이템 클래스
      • 필요한 변수 추가
      • 능력치 변경 함수
        • 체력 변경 함수
        • 방어력 변경 함수
        • 아이템 효과 발동 함수
    • 근접 아이템 클래스
      • 필요한 변수 추가
      • 능력치 변경 함수
        • 체력 변경 함수
        • 주위 오브젝트와 상호작용
        • 트리거 감지
    • 발사 아이템 클래스
      • 필요한 변수 추가
        • 능력치 변경 함수
        • 체력 변경 함수
        • 움직임 추가
        • 트리거 감지
    • 플레이 테스트
    • 요약

  • 4장 인벤토리
    • 인벤토리의 특징
      • 인벤토리의 허용치
      • 인벤토리의 사용법
      • 인벤토리 정리 방법
    • 아이템의 수량 변화
      • 아이템 거래
      • 아이템을 줍거나 버린다
      • 아이템의 파괴와 사용
    • 인벤토리 표시
    • 인벤토리 스크립트 생성
      • 스크립트를 만들고 이름 변경
      • 필요한 변수 추가
      • 인벤토리 초기화
      • 초기화 함수 생성
    • 아이템 추가
      • 기능 구상
      • 아이템 추가 함수 생성
    • 아이템 제거
      • 기능 구상
      • 아이템 제거 함수
    • 퀵 아이템 설정
      • 간단한 퀵 아이템 설정
      • 인벤토리 표시
      • 인벤토리 전용 입력
      • GUI 표시
      • GUI 구현
    • 플레이 테스트
      • 테스트 신 생성
      • 아이템 추가 테스트
      • 아이템 제거 테스트
    • 기타 테스트 방법
    • 요약

  • 5장 인공지능
    • AI 기법
      • 유한 상태 머신
      • 행동 트리 형태의 AI 시스템
        • AI 기법의 결합
        • 스크립트 작성
    • 내부 효과와 외부 효과
      • 외부 효과
      • 내부 효과
      • 효과 스크립트 작성
    • 길 찾기
      • 경유지를 사용해서 경로 생성
      • 유니티의 NavMesh 시스템
      • 테스트 환경 설정
        • NavMesh 생성
        • 변수 추가
        • 길 찾기를 적용할 함수의 스크립트 작성
    • 캐릭터 애니메이션
      • 모델 메시 추가
      • 애니메이션 스크립트 작성
    • AI 패키지 제작
      • 코드 마무리
      • 인스펙터 마무리
    • 플레이 테스트
    • 요약

  • 6장 점수와 통계
    • 통계 프로토타이핑
      • 플레이어에게 통계 부여
    • 통계 추적 기능
      • 통곗값 설정
      • 통계 리셋
      • PlayerPrefs 리셋
      • PlayerPrefs 저장
      • PlayerPrefs 설정
      • PlayerPrefs의 특정 값 리셋
      • 화면에 통계 표시
    • 업적 시스템
      • 업적 프로토타이핑
      • 업적에 필요한 변수 추가
      • 업적 리셋
    • 업적 추적 기능
      • 적을 죽인 횟수 추적
      • 상금 총액 추적
      • 소비한 돈 추적
      • 플레이어의 레벨 추적
      • 승리한 라운드 수 추적
      • 플레이한 시간 추적
    • 업적 확인
      • 특정 업적 확인
      • 모든 업적 확인
    • 업적을 화면에 표시
      • GUI 함수 추가
    • 플레이 테스트
    • 요약

  • 7장 세이브와 로드
    • 플랫 파일에 데이터 저장
      • 필요한 변수 추가
      • 플랫 파일 저장
    • 플랫 파일 삭제
    • 플랫 파일 로드
      • 파일 로드
    • XML 저장 시스템
      • XML 파일 생성
    • XML을 사용해서 데이터 저장
      • 필요한 변수 추가
      • 플레이어의 데이터 저장
      • 적 데이터 저장
    • XML을 사용해서 데이터 로드
      • 플레이어 데이터 로드
      • 적 데이터 로드
    • SaveHandler 스크립트 생성
      • 체크포인트 세이브 시스템
      • 항시 세이브 시스템
    • 플레이 테스트
    • 요약

  • 8장 소리
    • 배경음악
      • 임의 재생 시스템 생성
      • 플레이리스트 재생 시스템 추가
      • 배경음악 재생 시스템 마무리
    • 주변 소리
      • 스크립트와 변수 생성
      • 변수 초기화
      • 주변 소리 재생
    • 음향 효과
      • 스크립트와 변수 생성
    • 플레이 테스트
    • 요약

  • 9장 게임 설정
    • 최적화할 설정 검토
    • 비디오 설정 생성
      • 기본값 설정
      • 그림자 변경
      • 시야각 설정
      • 해상도 설정
      • 앤티에일리어싱 속성 변경
      • 수직 동기화 설정
      • 기본 품질 설정 변경
      • 설정 로드
    • 오디오 설정 생성
      • 기본값 설정
      • 볼륨 설정
      • 스피커 모드 설정
    • 설정 메뉴 생성
      • 준비 작업
      • GUI 생성
      • 모든 설정 값 저장
      • 모든 설정 값 로드
    • 플레이 테스트
    • 요약

  • 10장 실전 게임 프로젝트
    • 레벨 생성
      • 메인 메뉴
      • 게임 플레이에 사용할 레벨
    • 플레이어 상호작용 생성
      • 사격과 일시 정지
      • 물약 획득
    • 사운드 추가
      • 배경음악 재생
      • 주변 소리 추가
    • GUI 구현
      • 스크립트 추가
    • 통계 추적
      • 스크립트 추가
    • 세이브와 로드
      • 스크립트 추가
    • 마무리 작업
      • 승리 조건 추가
      • AI 적용
      • 아이템 마무리
      • 레벨 추가
    • 플레이 테스트
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안