유니티 C# 스크립팅 마스터하기 책 요약정리 자료입니다.
내용 참고 하시기 바랍니다.
1. 유니티 C# 스크립팅 마스터하기 책 요약정리 - 작성자: 황대영 - 수정일자: 2016.06.05
2. 목차 • 저자 • 역자 • 책 소개 • 요약정리 기준
3. 목차 • 1. 유니티 C# 복습 • 2. 디버깅 (생략) • 3. 싱글턴과 정적 멤버, 게임오브젝트와 월드 • 4. 이벤트 주도적 프로그래밍 • 5. 카메라, 렌더링, 씬 • 6. 모노를 이용한 개발
4. 목차 • 7. 인공지능 (생략) • 8. 유니티 에디터 사용자화 (생략) • 9. 텍스처, 모델, 2D를 이용한 구현 (생략) • 10. 소스 관리 및 유용한 팁 (생략)
5. 저자 – 엘론 쏜 • 런던에 살고 있는 13년 이상의 업계 경력을 가진 게임 개발자 겸 프리랜서 프로그래머이자 저술가다. • 2010년에 왁스 리리컬 게임즈(Wax Lyrical Games)를 설립했고 수상 경력에 빛나는 〈바론 위타드: 네메시스 오브 라그나로크(Baron Wittard: Nemesis of Ranarok)〉를 만들었다. • 열 개의 동영상 교육 과정을 만들었고, 『Unity 4 Fundamentals: Get Started at Making Games with Unity』(포컬 프레스), 『UDK Game Development』(에이프레스), 『Pro Unity Game Development with C#』(에이프레스) 등 11권의 게임 개발 서적을 저술했다.
6. 저자 – 엘론 쏜 • 또한 영국 국립영화학교(National Film and Television School)에서 게임 디자인 및 개발 과정의 객원 강사로 활동 중이다. • 게임과 시뮬레이터, 키오스크, 기능성 게임, 게임 스튜디오나 박물관, 전 세계의 테마파크 등지에 필요한 증강현실 소프트웨어 등 500개 이상의 프로젝트 개발에도 프리랜서로 참여했다. • 현재는 데스크톱과 모바일용으로 곧 출시되는 어드벤처 게임인 〈메가 배드 코드(Mega Bad Code)〉를 개발하고 있다.
7. 역자 - 장석현 • 2002년부터 넥슨, 네오위즈 등의 회사에서 다수의 온라인 게임을 만든 게임 개발자다. • 2011년부터 유니티 엔진을 이용한 멀티플랫폼 게임 개발 프로젝트들에서 일했다. • 에이콘출판사가 펴낸 『Unity로 하는 2D 게임 개발』(2014년), 『유니티 2D 게임 만들기』(2015년)를 번역했다.
8. 책 소개 • 책 제목: 유니티 C# 스크립팅 마스터하기 : 고급 C# 팁과 기법을 통해 배우는 프로 게임 개발 • 원제: Mastering Unity Scripting • 출판사: 에이콘출판사 • 출간일: 2016년 01월 27일 • 책은 꼭 사서 봅시다! • http://www.yes24.com/24/goods/24027404?scode=032&OzSrank=1
9. 요약정리 기준 • 정보 전달에 왜곡이 없도록 중요하다고 생각하는 문장 그대로 가져온다. • 제가 이미 알고 있고 상대적으로 중요도가 떨어지는 부분은 생략하였다.
10. 1. 유니티 C# 복습 • C#을 선택하는 이유 • 기존에 만들어진 자료 대부분에 가장 손쉽게 접근할 수 있기 때문이다. • 유니티에서 가장 널리 사용되며 지원받는 언어 • 게임 개발 분야에 큰 영향력을 지닌 C++와 가장 닮아있다. • 스크립트 인스턴스화 • 인스턴스화 – 특정 오브젝트에 스크립트를 컴포넌트로서 추가해 숨을 불어넣는 과정
11. 1. 유니티 C# 복습 • 변수 표시 • 클래스 안의 모든 public과 private 변수를 다 보길 원할 때 오브젝트 인스펙터에서 Debug 모드를 켤 수 있다. • Private 변수를 선언할 때 [SerializedField] 특성을 함께 선언한다.
12. 3. 싱글턴과 정적 멤버, 게임오브젝트와 월드 • 게임오브젝트 • 자식인 게임오브젝트는 항상 부모에 상대적인 위치와 변환을 가지게 된다. • 오브젝트에 부모가 없다면 월드 원점인 (0, 0, 0)에서부터 시작된다.
13. 3. 싱글턴과 정적 멤버, 게임오브젝트와 월드 • 게임오브젝트 찾기 • GameObject.FindObjectWithTag – 성능 상의 이유로 거의 대부분 선호되는 편 • 일치하는 오브젝트를 찾기 위해 문자열 비교를 수행하기 때문에 이 방법은 느리고 부담스럽다. • GameObject.Find는 느리게 동작하는 함수다. • 그러므로 이 함수는 Awake나 Start처럼 일회성 이벤트 안에서만 사용하자.
14. 3. 싱글턴과 정적 멤버, 게임오브젝트와 월드 • Object.FindObjectsOfType 함수를 호출하면 오브젝트가 비활성화되지 않은 이상, 씬 안에서 지정한 오브젝트의 모든 인스턴스 리스트를 얻을 수 있다.
15. 3. 싱글턴과 정적 멤버, 게임오브젝트와 월드 • 월드/시간과 업데이트 • Update: Update 이벤트가 모든 컴포넌트에 매 프레임마다 불려지는 것이 보장되지는 않는다. • FixedUpdate: 각각의 호출은 고정된 시간 간격을 기반으로 규칙적으로 표준화되어 일어난다. • LateUpdate: 언제나 Update와 FixedUpdate가 호출된 이후에 호출된다.
16. 3. 싱글턴과 정적 멤버, 게임오브젝트와 월드 • 규칙1: 프레임은 소중한 것이다. • 이벤트 주도적 프로그래밍을 고려하는 것이 Update 함수 안에 들어가는 부하를 크게 줄이는 데 도움이 될 것이다. • 규칙2: 움직임은 시간과 비례해야 한다. • ‘거리 = 속력 x 시간'이므로 매 프레임마다 속력에 deltaTime을 곱함으로써 얼마나 오브젝트를 움직여야 하는지 알아낼 수 있다.
17. 3. 싱글턴과 정적 멤버, 게임오브젝트와 월드 • 소멸되지 않는 오브젝트 • DontDestroyOnLoad 함수를 이용해서 계속 유지되는 오브젝트를 쉽게 만들 수 있다. • 싱글턴 오브젝트와 정적 멤버 • 유일한 독립체로 존재하며 여러 기능을 통합해 하나로 묶는 역할을 한다. • 하나의 클래스 인스턴스만 유일하게 존재하게 되며 절대 그보다 많은 인스턴스를 만들진 않는다. => 싱글턴singleton
18. 4. 이벤트 주도적 프로그래밍 • 이벤트 • 이벤트의 개념은 정해진 시간에 일어나는 것뿐만 아니라 특정 시간에 발생하는 특정 이벤트를 포함하는 것이다. • 이벤트 주도적인 설계를 함으로써 성능 최적화 및 청결한 코드 유지가 가능해진다. • 이벤트 관리 • C# 프로퍼티 값의 변경을 알아내서 값이 적절한 경우 이벤트를 발생시킨다.
19. 4. 이벤트 주도적 프로그래밍 • 이벤트 리스너 EventListener: 자신이 발생시킨 이벤트를 포함한 어떤 이벤트가 발생하면 알기를 원하는 모든 오브젝트를 리스너listener라고 부른다. • 이벤트 포스터 EventPoster: 리스너와 반대로 오브젝트가 이벤트 발생을 알아차린 경우, 이 오브젝트는 다른 모든 리스너가 알 수 있게 이벤트에 대해 알려야 한다. • 이벤트 매니저 EventManager: 리스너를 포스터에게 실질적으로 연결하는 역할을 한다.
20. 4. 이벤트 주도적 프로그래밍 • 인터페이스를 통해 이벤트 관리 • 인터페이스는 클래스처럼 메소드와 함수를 하나의 템플릿과 같은 단위의 집합으로 한데 모으는 역할을 한다. • 클래스와는 달리, 인터페이스는 함수의 이름, 반환 형식, 파라미터와 같은 함수 원형을 선언하는 것만 허용된다. • 딕셔너리의 장점으로 동적 배열에 버금가는 (상대적으로) 빠른 접근 속도와 오브젝트 형식이나 첨자(subscript) 연산자를 이용할 수 있다는 점을 꼽을 수 있다.
21. 4. 이벤트 주도적 프로그래밍 • 델리게이트를 이용한 대안 • 델리게이트를 이용하면 함수의 참조를 저장했다가 나중에 이 변수를 이용해 함수를 부를 수 있게 된다. • 코루틴은 메인 게임 루프에서 병렬이나 비동기로 실행되는 것처럼 보이는 측면을 고려할 때 스레드(thread)처럼 동작한다고 할 수 있다.
22. 5. 카메라, 렌더링, 씬 • 보이기 • 오브젝트가 보이지 않을 때, 처리 부하를 줄이기 위해 멈출 수 있는 동작이나 계산이 많기 때문이다. • 프러스텀은 카메라 렌즈의 바깥쪽 방향으로 뻗어나가는 사다리꼴의 체적으로서 시야와 절단면 거리 속성으로 정의된 영역을 포함한다. • 오브젝트 가시성 감지 • OnBecameVisible과 OnBecameInvisible은 MeshRenderer나 SkinnedMeshRender와 같은 렌더러 컴포넌트를 가지는 모든 오브젝트에서 자동으로 호출된다.
23. 5. 카메라, 렌더링, 씬 • OnBecameVisible이나 OnBecameInvisible 이벤트가 쓸모 없어지는 경우에 대해 몇 가지 중요한 경고를 해 본다. • 첫 번째로, 여기서 알려주는 가시성은 단지 오브젝트가 카메라 프러스텀 내에 들어왔다는 의미이므로 다른 더 가까운 오브젝트 등에 의해 차단되어 실제로는 보이지 않을 수 있다. • 두 번째로, 이벤트는 특정 카메라에 속하는 것이 아니라 전체 카메라에 대해 발생하는 것이다.
24. 5. 카메라, 렌더링, 씬 • 오브젝트 가시성에 대해 좀 더 살펴보기 • OnWillRenderObject 이벤트는 오브젝트가 카메라에 보이는 동안 각각의 카메라에서 매 프레임 한 번씩 계속해서 호출된다. • 프러스텀 검사: 렌더러 • AABB(Axially Align Bounding Box 축 정렬된 경계 상자)는 프러스텀 안에 메시 렌더러가 존재하는지를 감지하기 위한 충돌 경계
25. 5. 카메라, 렌더링, 씬 • 프러스텀 검사: 점 • 파티클이나 권총 표적 위치와 같은 오브젝트가 실제로 보이는지 알고 싶을 때 • 화면 공간(카메라에 의해 렌더링된다)에 보이는지 알길 원할 때 • 프러스텀 검사: 오클루전 • TODO • 카메라 시야: 앞뒤 판별
26. 6. 모노를 이용한 개발 • 리스트와 컬렉션 • 정렬되지 않은 상태로 하나의 데이터 형식을 가지는 연속적인 항목들의 목록이 필요할 때, 이 목록이 저장된 데이터의 크기에 맞게 늘어나거나 줄어드는 것을 원한다면 List 클래스 • 아이템을 추가/삭제하고 저장된 모든 항목들을 순차적으로 순회해야 할 필요가 있을 때 특히 적합
27. 6. 모노를 이용한 개발 • Dictionary 클래스 • 키 값에 따른 특정 원소를 검색해 즉시 접근해야 할 때는 Dictionary 클래스가 필수다. • 딕셔너리 클래스 안에 방대한 데이터를 매우 적은 비용만으로 저장/검색
28. 6. 모노를 이용한 개발 • Stack 클래스 • 후입선출LIFO 모델에 기반한 특별한 종류의 리스트다. • 항목을 리스트에 집어넣고Push 수직의 탑에서 다른 항목 위에 항목을 쌓아 올려 가장 최근에 집어넣은 항목이 항상 최상단에 위치하게 된다. 그런 후, 스택 맨 위의 항목을 하나씩 꺼내Pop 수 있다.
29. 6. 모노를 이용한 개발 • 문자열과 정규식 • 문자열 비교 • 같은 두 문자열의 동일성을 비교하는 빠르고 일반적인 다른 방법은 문자열 해시 Hash를 이용하는 것이다. • 문자열 생성 • string MyString = string.Empty;
30. 6. 모노를 이용한 개발 • 통합 언어 쿼리 • Enumy[] FilteredData = (from EnemyChar in Enemies where EnemyChar.Health <= 50 && EnemyChar.Defense < 5 select EnemyChar).ToArray();
31. 감사합니다 • 책은 꼭 사서 봅시다! • http://www.yes24.com/24/goods/24027404?scode=032&OzSrank=1
'정보공유' 카테고리의 다른 글
[정보] 입사지원서류 작성법_이력서 (0) | 2018.03.27 |
---|---|
[정보] 성공을 향한 첫 걸음 (0) | 2018.03.27 |
[정보] GCP 신기술 동향 소개 구글코리아 김종대 엔지니어 (0) | 2018.03.23 |
[정보] 1시간만에 만드는 음성인식 인공지능 챗봇 구글코리아 정명훈 SA (0) | 2018.03.23 |
[정보] 좋은 회사를 선택하는 지혜 (0) | 2018.03.23 |
[정보] 새내기들을 위한 IT직장이야기 (0) | 2018.03.23 |
[정보] 아무도 알려주지 않는 팀으로 일하는 법 (0) | 2018.03.23 |
[정보] 세계 선도 IT사 및 게임사 벤치마킹 & 인사이트 보고서 (4부) (0) | 2018.03.22 |