Unity 특강 내용정리

권태형·2023년 9월 14일
1

Unity

목록 보기
5/9
post-thumbnail

유니티 공인 인증강사 "홍 동희" 강사님 강의내용

인증시험의 문제는 unity 버전을 2017을 대상으로 만들어진 문제이나, 이미 너무 오래된 툴이고, 2022버전으로 공부하여도 큰 무리는 없다고 한다.

유니티 허브

기본적으로 항상 유니티 프로젝트를 만들기 위해 사용하는 하이브리드 앱이다.
이 유니티 허브는 여러가지 플렛폼에서 사용할 수 있기위해서 일렉트론, JS 을 사용해 만들었다.

여러가지 코어를 선택해서 프로젝트를 만들 수 있다. 3번째 사용되는 2D (URP)는 보통 저사향 기기에서도 동작할 수 있도록 하기 위한 코어이다. 그래픽 랜더링 할때의 과정을 간소화하여 좀 더 가볍다. 반대로 (HDRP)의 경우는 초고화질을 지원하는 코어이다.

Unity의 장점이기도 하고 단점이기도 한 이러한 특징은 여러 상황에 대해서 코어를 나누어 사용화면 그 상황에 맞게 적용할 수 있으나, 서로의 코어끼리의 호환성이 떨어져서 여러가지 코어에 대해서 같은 로직을 다른 구현으로 만들어야한다. URP로 만든 프로젝트를 HDRP로 옮기게 되면 화질이 모두 깨져버린다.

유니티 에디터

메인메뉴의 구성은 아래와 같다.

에디터 스크립트라고 하는 별도의 C#파일을 이용해 메뉴를 추가할 수 있다.

  • 창의 개편은 어떻게하는게 가장 편한가??
    window메뉴에서 패키지 매니저를 띄운다.

Hierarchy 창

계층구조를 타나내는 말로, 유니티 에디터에서 가장 중요한 창이라고 생각할 수 있다.
이 창은 유니티 Scene에 존재하는 모든 오브젝트를 표시한다.(기본 오브젝트, 텍스트, 게임메니저 등)

Scnene은 유니티 엔진에서 사용되는 개념으로 카메라, 라이트, 그 밖에 다양한 오브젝트를 조합하여 화면에 렌더링 되는 그룹을 의미힌다.

씬은 실질적으로 1개만 보여질수 밖에 없지만, 플레이 화면에서는 여러개의 씬을 띄울 수 있다. 씬 내에 있는 것들은 모두 gameObject라 칭하며 Scnene 은 게임오브젝트의 집합이라 한다.

Inspector

오브젝트를 선택하면 오브젝트의 속성들이 Inspector탭에 나타난다.

모든 gameObject는 아무리 빈 오브젝트라도 Tranform을 반드시 가지고 있다. 이런 Transform이나 Light와 같은 속성을 Component라고하며 이 컴포넌트는 Unity에서 만든 하나의 Class(라이브러리)라고 볼 수 있다.

Mesh나 sprite와 같은 컴포넌트는 추가하면 Lenderer와 같이 추가된다. 이러한 Lenderer를 비활성하면 실질적으로 존재는 하나 화면에서 보이지 않게 된다.

Hierarchy창 내에 존재하는 오브젝트는 메모리에 올라와 있는 오브젝트이다. 비활성 해서 화면에 없어지더라도, Hierarchy창에 존재하기 때문에 실질적으로는 메모리에 계속 남아 있다.

노랑 : 활성 비활성을 위한 클릭박스
초록 : 오브젝트 구분을 위한 메뉴들. 이름, 태그, 레이어
빨강 : 기본 트랜스폼에 존재하는 3D 애니매이션의 3요소 여기서 쓰는 회전은 디그리 방식을 사용하고, 삼각함수를 써야할때 라디안 방식도 같이 사용하게 된다.

✨180도 라디안과 360도 디그리방식(오일러 방식)

Project

이 프로젝트 창은 내 프로젝트내의 모든 폴더구조를 보여준다.
Assets 폴더를 이용하여 사용자가 생성한 각종 리소스(그래픽 리소스, 사운드, 스크립트)의 배치가 가능하다.

실질적으로 Assets 폴더에서 필요한 추가적인 디렉토리를 추가하는 경우는 내부 리소스를 정리하기 위해서 만든다.

Hierarchy의 오브젝트를 끌어다 Project창의 Assets창에 놓으면 Prefab을 생성할 수 있다.

Console

콘솔창은 스크립팅 및 디버깅에 필요한 상태 정보를 표시하고 Log를 보기 위한 창이다.

Play/Pause 버튼

퍼즈버튼은 디버깅 할때 잠시 멈추기 위해서 사용

Scene

씬에서 에디팅 모드에서 화면을 구성하는데 필요한 다양한 게임 오브젝트를 배치할 수 있다.

  • 오브젝트의 선택, 선택된 오브젝트의 이동, 회전, 크기조절이 가능하다.

레벨 디자이너 - Scnen을 정말 잘 꾸미는 사람 - 디테일하게 만들어진 모델을 적절하게 배치
모델 디자이너 - 요소 하나를 디테일하게


3D 오브젝트 추가

3D 오브젝트를 만드는 방법은 아래와 같다

3D 오브젝트의 종류는 Cube, Sphere, Capsule, Cylinder, Plane, Quad 가 있다.

  • 쿼드와 플레인의 차이
    쿼드는 2개의 삼각형으로 이루어진 구조
    플레인은 여러개 삼각형으로 이루어진 구조 (랜더링에 필요한 요소가 많기 때문에 무겁다.)

택스터의 개수가 많으면 많을수록 속도가 비약적으로 느려진다.

  • 상하(부모, 자식) 계층관계 생성

상위(부모) 오브젝트의 이동 회전 크기변화에 모든 자식들에게 영향이 있음, 하위(자식) 오브젝트의 변경은 상위 오브젝트에 변화가 없음

  • 오브젝트 이동

화살표를 마우스로 끌어서 축별로 이동하거나, transform 컴포넌트의 포지션을 변경한다.

  • 씬 뷰의 이동 및 회전

이동은 키보드 방향키나, 마우스 중앙클릭으로 눌러서 이동한다.

회전의 경우 마우스 우클릭의 경우 자전, art 좌클릭은 공전한다.

씬 화면의 줌을 하기 위해서는 art 우클릭 또는 마우스 휠 업을 이용한다.

특수 씬 화면 핫 키
f 오브젝트 줌 포커싱, z 피봇 변경?


Unity를 이용한 게임개발 업무

  • 게임을 개발하는 경우 대부분 다음 절차를 거친다.

    • 기초적인 게임의 기획을 통한 기획서 마련
    • 기획서에 근거한 그래픽 에셋의 제작, 프로그래밍, 사운드의 제작
    • 기획에 의거한 별도의 백엔드 작업, 서버 프로그래밍, Dev Ops
    • 통합 및 테스트, 디버깅
    • 출시 및 라이브 서비스 돌입
  • 게임 개발 업무관련 용어

    • 게임 디자인 - 일반적으로 말하는 게임 기획
    • 아트 디자인 - 게임에 사용되는 여러가지 그래픽 리소스를 만든다.
    • 테크니컬 아티스트(T/A) - 데임의 성능 및 기술 특화된 아티스트를 말한다.
    • 아트 디렉터 - 게임의 전반적인 아트 스타일을 방향성을 제시하고 책임지는 직종이다.
    • 프로그래머, 소프트웨어 엔지니어 - 프로그래밍 업무를 담당,
      클라이언트를 담당하면 프론트 엔드, 서버를 담당하면 백엔드 개발자로 볼 수 있다.
    • QA(퀄리티 어슈어런스) - 게임의 품질을 담당하는 직종, 주로 버그를 찾고 기획서와의 차이점 등을 찾는다.
    • 프로젝트 매니저(PM) - 게임개발 업무의 조율을 맡거나 각 팀의 운영을 총괄
  • 게임 메카닉

    • 코어 메카닉 - 게임 플레이를 진행하는 핵심 게임 룰(ex 쿠키런 - 달리기)
    • 턴 방식, 리얼 타임, 액션, 플랫포머, 핵 앤 슬래시, 슈팅, FPS, RTS, 타워디펜스 등 다양한 게임의 진행방식이 존재함.
    • 이러한 게임 메카닉을 만드는 사람을 게임 기획자라고 합니다.
  • Look & Feel

    • 게임의 분위기를 말한다.
    • 게임에 따라 밝은 분위기, 파스텔 톤, 다크 톤, 호러, 중세, 서향, 애니 등 다양한
      스타일로 게임만의 독특한 분위기를 구현하는 것을 말한다.
  • 게임 경제

    • 게임에서 굉장히 중요한 요소로 유저의 보상에 관한 내용을 말한다.
    • 게임내 경제 시스템이 잘 만들어지지 않으면 성공하기 어렵다.
    • 게임내 머니를 소비할 수 있는 요소를 머니 드레인이라고 한다.
  • 게임 개발 진행 방법론

    • 게임을 개발할 때 많은 업무를 나누어 진행하는 방법
    • 워터폴/캐스캐이드 - 폭포라는 의미, 전제적인 일의 진행을 선후관계를 따져 먼저 작업해야 할 것을 우선 진행한 뒤, 나중에 이후 작업하는 진행 방식
    • 애자일 - 전제 업무를 작은 개별 업무로 분류한 뒤 작업자들의 능력 및 상황에 따라 자율적으로 우선순위를 정해 처리하는 방식.
  • 그래픽 에셋의 생성

    • 일반적으로 게임을 개발할 때 가장 많은 인원과 비용을 사용하는 부분이다.
    • 2D 에셋과 3D 에셋, 애니메이션, FX, 레벨 에디팅 등으로 구분 할 수 있다.
    • 2D 에셋
      • 원화, 스프라이트, 배경, UI 등과 같은 2D 이미지 위주의 에셋
    • 3D 에셋
      • 모델링, UV 텍스쳐(텍스처의 x,y좌표), 노멀 맵(에셋 스토어에 노멀 맵이 있는 에셋을 가져옴, 일반적으로 블랜더 같은걸로 만들어서 임포트 해옴) 작업
    • 애니메이션 (맥스, 마야 블랜더)
      • 2D 스프라이트 또는 3D 모델링에 SKELETON 작업을 통해 뼈대를 구성한 뒤, 키 프레임 애니메이션을 제작하는 작업
    • FX
      • 2D 또는 3D 특수효과를 제작하는 작업
    • 레벨 에디팅
      - 2D 또는 3D 게임 스테이지를 구성하는 작업

  • 게임과 관련된 계약

    • NDA : Non-Disclosure Agreement
      • 협력사 또는 직원과의 맺는 비밀유지 계약
    • EULA : End User Licenese Agreement
      • 최종사용자 계약, 소프트웨어 제공자와 사용자간 계약

Unity C# 스크립트의 개요

  • 유니티 게임엔진은 C#을 기본 프로그래밍 언어로 사용
  • C#은 C++와 유사한 형태의 언어로
  • 유니티의 C# 스크립트는 게임 오브젝트에 컴포넌트 형태로 결합해 사용
  • C# 스크립트용 에디터로는 주로 VSC VS 등을 사용한다.
  • 스크립터 에디터의 지정은 유니티 에디터의 Preference에서 지정이 가능하다.

스크립트 생성방법

  • 에셋메뉴에서 생성 / 에셋 폴더에서 우클릭 생성

    • 반드시 C#파일이름과 스크립트 내부 클래스 이름이 같아야한다. 다르면 오류가 발생한다.
    • 기본적으로 유니티 스크립트는 전부 MonoBehaviour클래스를 상속한다.
  • 항상 기본으로 start와 update 메소드를 가지고 있다.

    • start와 update는 유니티가 제공하는 게임엔진의 기본클래스(MonoBehaviour)를 상속하면 사용할 수 있다.
    • start 는 초기화에 사용된다.
    • update는 게임 실행시, 매 프레임마다 실행된다.

C# 기본지식

  • C#은 객체지향(OOP)언어이다.
    • 따라서 프로그래밍시 클래스 개념을 사용한다
    • 클래스는 기능적 요소인 함수 즉 메소드와 데이터요소인 즉 프로퍼티를 포함한다.
    • 객체지향의 속성인 상속을 지원하나 다중 상속은 지원하지 않는다.
    • 모든 명령어 체계는 C++와 흡사하다.
  • C# 클래스의 각 구성요소는 private, public, protected(상황에 따라서, 파생클래스?)의 속성을 가진다.
    • 클래스 블럭에 바로 들어간 변수 - 전역변수 , 함수 블럭 등 더 안쪽 블럭에 들어간 변수 - 지역변수
    • 또한 각 구성성분에 static 요소(메모리에 올리지 않아도 존재함, 하나만 존재함?)를 추가할 수 있다.
  • 이미 만들어진 라이브러리를 포함시킬 수 있다.
    • using 문을 사용하여 사용할 라이브러리를 포함할 수 있다.
  • C++ 보다 쉽게 공부하여 사용할 수 있다.
    • 복잡한 개념인 포인터를 배제하였다.
    • switch에서 문자열의 사용이 가능하다.
    • 풍부한 라이브러리를 지원한다.
    • 최신 플그래밍 언어의 트렌드를 따라간다.(지속적인 버전업)
  • C#은 C++와 비슷한 문법체계를 가진다.
    • 문장의 마지막에 세미콜론(;)을 사용한다. 세미콜론은 터미네이터(종결자)라고도 한다.
    • 하나 이상의 문장을 {}로 묶은 블록을 만들 수 있다.
    • 객체지향의 속성인 상속을 지원하나 다중상속은 지원하지 않는다.
    • 포인터는 배제되고 다른 개념으로 접근한다.
    • 변수와 함수의 선언이 가능하다.
    • 내부 클래스의 선언이 가능하다.
    • 조건문 및 연산자가 거의 동일하다.

C# 구조체

  • 구조체란?
    • 클래스와 마찬가지로 데이터 및 함수를 가지는 그룹
    • Vector3는 3D 프로그래밍에 자주 사용되는 C# 구조체이다.
    • 변수를 특정 값으로 초기화 시키는 경우 아래와 같이 처리한다
      • Vector3 Rotation = new Vector3(3,4,5)
    • 미리 지정된 상수값을 넣는 경우는 new를 사용하지 않는다
      • Vector33 Rotation = Vector3.zero

C# 프로그래밍 용어

명령어, 알고리즘, 싱글톤(개념적으로 하나만 있어야 되는 것)클래스, 싱글톤 오브젝트, 디자인 패턴(28가지?), 상속, 가상함수, 오버라이딩, 클래스, 인터페이스, 인스턴스, 수, 상수, 변수, 구조체, 배열, 연산자, 조건식, 함수, 파라미터 전달, 지역변수, 전역변수, 정적변수, 컨테이너(List, Dictionary, Queue, Stack), 동적할당, 재귀호출, 이벤트 핸들러

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글