본문 바로가기
Tech Review : Unity & C#

3. Project Boost 31~43

by dalgoxx 2023. 11. 2.

Udemy 강좌 'Complete C# Unity Game Developer 3D' 리뷰 및 기술 기록지입니다. 

Project Boost : 31.Section Intro - Project Boost ~ 43.Play AudioSource SFX

 

[31.Section Intro - Project Boost ~ 33.Onion Design]

Project Boost 개요 및 기능 소개


[34.Unity Units]

본격적 프로젝트 시작, 기본 틀 제작(지형, 로켓)

 

[35.Introducing Classes]

C#의 class에 대한 기본 지식을 배운다.

 

- class는 코드를 정리하는 데 사용한다.

- class는 유사한 것들을 그룹화할 수 있게 해주는 변수와 방법에 대한 'Containers'이다.

- 새 스크랩트를 생성할 때마다 새로운 클래스를 생성하고, 해당 스크랩트가 한 가지를 담당하게 한다.

 

class를 사용함으로써 1. 코드 읽기가 편해짐 2. 문제 해결에 용이 3. 한 프로젝트에 다수가 작업 가능

 

Unity에는 이미 만들어진 class가 존재함으로 접근해 사용할 수 있다.

ex) Classname.MethodName()

 

[36.Basic Input Binding]

C#의 Input class에 대한 기본 지식을 배운다.

 

Input class : 사용자 입력을 감지하는 메서드를 모아둔 집합.

Input.GetKey(KeyCode key) : 키보드의 식별자의 Keycode 타입으로 입력 받는다.

W키를 입력받았을 때 실행되는 코드

 

[37.Using AddRelativeFroce()]

C#의 Rigidbody에 대한 기본 지식을 배운다.

 

Rigidbody : GameObject가 물리 제어로 동작하게 한다.

Rigidbody=rd 지정

 

GetComponent<Type>() : 게임 오브젝트의 컴포넌트를 가져오는 함수이다.  type은 가져올 컴포넌트의 타입이다.

Rigidbody 타입의 컴포넌트를 가져와 rd에 대입

 

AddRelativeForce() : Rigidbody에 힘을 전달하는 메서드

W키를 누르면 위로 힘을 전달한다.

 

[38.Variable For Thrusting]

위로 가해지는 프레임 속도를 독립적으로 만든다.

 

 

mainThrust : 위로 향하는 추진력 변수

Time.deltaTime : 프레임률 영향을 받지 않도록 하는 변수

 

SerializeField : private 변수지만 inspector에 접근 가능하다.

Inspector 창

 

Rigidbody의 특성 정리(Unity 출처)

Mass 오브젝트의 질량입니다(디폴트값은 킬로그램).
Drag 오브젝트가 힘에 의해 움직일 때 공기 저항이 영향을 미치는 정도를 나타냅니다. 0이면 공기 저항이 없으며 무한대라면 오브젝트가 즉시 정지합니다.
Angular Drag 오브젝트가 토크로 회전할 때 공기 저항이 영향을 미치는 정도를 나타냅니다. 0이면 공기 저항이 없습니다. 앵글 드래그를 무한대로 설정한다고 해서 오브젝트의 회전이 멈추지는 않으니 주의해야 합니다.
Use Gravity 활성화되면 오브젝트는 중력의 영향을 받습니다.
Is Kinematic 활성화되면 오브젝트는 물리 엔진으로 제어되지 않고 오로지 Transform 으로만 조작됩니다. 플랫폼을 옮기는 경우나 HingeJoint 가 추가된 리지드바디를 애니메이션화하는 경우에 유용합니다.
Interpolate 리지드바디의 움직임이 어색해 보일 경우 다음 옵션 중에서 하나를 시도해보아야 합니다.
None 보간이 적용되지 않습니다.
Interpolate 이전 프레임의 트랜스폼에 맞게 움직임을 부드럽게 처리합니다.
Extrapolate 다음 프레임의 트랜스폼을 추정해 움직임을 부드럽게 처리합니다.
Collision Detection 빠르게 움직이는 오브젝트가 충돌의 감지 없이 다른 오브젝트를 지나쳐가는 것을 방지합니다.
Discrete 씬에서 다른 모든 콜라이더에 대해 불연속 충돌 검사를 사용합니다. 다른 콜라이더는 충돌 테스트에 불연속 충돌 검사를 사용합니다. 일반적인 충돌에 활용됩니다(기본값).
Continuous Speculative 리지드바디와 콜라이더에 추측성 연속 충돌 검사를 사용합니다. 키네마틱 바디를 설정할 수 있는 유일한 CCD 모드입니다. 이 메서드는 스위핑 기반 연속 충돌 검사보다 리소스를 덜 소모합니다.
Constraints 리지드바디의 움직임에 대한 제약사항입니다.-
Freeze Position 월드 좌표계의 X, Y, Z 축에서 이동하는 리지드바디를 선택적으로 중지시킵니다.
Freeze Rotation 로컬 좌표계의 X, Y, Z 축에서 회전하는 리지드바디를 선택적으로 중지시킵니다.

 

[39.Transform.Rotate() Our Rocket]

회전 변수 추가, 회전 속도를 독립적으로 설정한다.

함수를 작성하여 반복되는 코드를 대체한다.

 

회전 변수 추가
키보드 입력에 따라 회전
함수를 작성해 기존 코드 대치

 

[40.Rigidbody Constraints]

오브젝트 수정, 코드 정리

 

freezeRotation : 객체의 회전을 변경할지 여부를 제어한다. 활성화되면 물리 시뮬레이션에 의해 회전이 수정되지 않는다. 

 

[41.Our Source Control Repo]

Source Control에 대한 기본 지식

 

Source Control : 코드 및 프로젝트 변경사항을 추적하고 관리하는 시스템

Git : 파일의 변경 사랑을 추적하는 버전 제어 시스템

Gitlab(Gitlab, Github) : 저장소 호스팅 서비스

Repository(Repo) : 프로젝트의 디렉터리

 

>> Reason Using  Source Control : 이전 버전으로 돌아갈 수 있음을 알고, 프로젝트를 안전하게 변경할 수 있도록 허용.

 

[42.Unity Audio Introduction]

Unity Audio에 대한 기본 지식

 

Inspector에 Audio Source Section 추가.

 

[43.Play AudioSource SFX]

 

AudioSource에 대한 기본 지식

 

AudioSource : 오디오 소스를 3D로 표현한 것. AudioSource는 3D 환경에서 사운드를 재생하기 위해 GameObject에 연결된다. 3D 사운드를 재생하려면 AudioListener 도 있어야 한다.

 

audioSource.Play() : 오디오 재생.

!audioSource.isPlaying : 플레이하고 있지 않은 경우에만 플레이하도록 설정.

audioSource.Stop() : 오디오 중지.

 

AudioSource 타입의 컴포넌트를 가져와 대입
조건문 설정