Button 입력 받는 방법

inputAction 변수를 선언하고

InputAction

OnEnable()과 OnDisable()에서 활성화와 비활성화를 해주고

활성화 비활성화

Button Type으로 정하고 원하는 키에 바인딩한 뒤 (여긴 Space)

Space
Button

Update문에서 IsPressed()로 눌러졌을 때 사용하면 된다.

IsPressed()

* 추가로 GetButtonDown처럼 효과를 주고싶으면 wasPressedThisFrame을 사용하고

GetButtonUp처럼 효과를 주고싶으면 wasReleasedThisFrame을 사용하면 된다.

wasPressedThisFrame
wasReleasedThisFrame

 

결과

* 이후에 바인딩 하는 버튼을 Left Button (Mouse)로 바꿨다

실행 결과

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

헤더와 툴팁 속성  (0) 2022.08.29
배열과 foreach문  (0) 2022.08.29
중첩 프리펩  (0) 2022.08.26
레이저 총알 파티클  (0) 2022.08.26
게임 플레이 조율하기  (0) 2022.08.26

중첩 프리펩

Cyclic nesting detected 에러

프리펩은 자기 자신의 자식이 되지 못한다. 

- 인스턴스에서는 가능하지만 프리펩에서 하면 연결점들이 다 고장나서 불가능하게 되어있음 (자기 자신 아래에 자기 자신이 있어야하고 그 아래에 자기자신이 있어야하고.....)

에러

 

부모 프리펩의 스케일이 1이 아닐 때

프리펩의 부모 오브젝트에서 가능하다면 스케일을 모두 1로 고정하는 게 좋다. 왜냐

부모 프리펩 스케일이 1이 아닐 때

자식 프리펩을 회전하면 깨지기 때문이다. 부모 스케일을 1로 어떻게 만들까?

자식을 회전

월드에 Empty Object를 생성하여(스케일 1,1,1) 그 자식으로 Cube와 Capsule을 놓으면 된다.

부모 스케일이 1이니 깨지지 않고 회전할 수 있다.

* 프리펩 월드로 갔을 때 Context : Normal을 선택하면 기본 씬에 있는 것처럼 보이게 된다.

Context : Normal

 

모든 프리펩의 속성을 수정하고 싶을 때

부모에 있는 자식 캡슐에 그냥 색을 입히고 Override 하더라도 독립적인 원본 프리펩에는 그 정보가 적용되지 않는다.

프리펩의 전체를 수정할 때는 해당 오브젝트의 프리펩 모드로 들어가 수정하는 게 좋다.

프리펩 전체 수정하기
수정 후

 

기존 프리펩으로 새 프리펩 만들기

캡슐을 변형하고 프로젝트 창으로 드래그 앤 드롭을 하여 Original Prefab을 만들었을 때 이전에 있던 원본 프리펩을 삭제해도 원본 인스턴스는 씬에 남아있다.

Capsule 1 생성 후 Capsule 삭제
프리펩이 아닌 인스턴스로 남아있음

이 게임 오브젝트를 프로젝트 창에 드래그 앤 드롭하면 다시 프리펩으로 만들 수 있음

다시 프리펩화하기

씬에 있는 프리펩을 Unpack을 하면 이 해당 오브젝트는 인스턴스가 되고 프로젝트 창에 프리펩은 남아있음 

해당 오브젝트만 인스턴스화 하는 것임

Unpack
인스턴스화

 

복습

프리펩 인스턴스에서 많은 걸 바꾸고 부모에서 Override 하더라도 프로젝트 창 기존 프리펩에는 연동이 안 될 경우 인스턴스를 Original Prefab으로 만들고 이것을 기준으로 다른 프리펩도 설정해준 뒤 (왼쪽 프리펩이라면 오른쪽 프리펩도 Original Prefab으로 만든 걸로 복사해줘야함) 기존에 있던 프로젝트 창의 프리펩은 제거해준다. => 옛것을 버리고 최근거를 원본 프리펩으로 만드는 것 

구버전 프리펩 교체

프리펩에서 컬러 변경시 같이 바뀜

교체 완료

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

배열과 foreach문  (0) 2022.08.29
발사 Input System  (0) 2022.08.26
레이저 총알 파티클  (0) 2022.08.26
게임 플레이 조율하기  (0) 2022.08.26
플레이어 회전  (0) 2022.08.26

총알 파티클

Particle System

- Duration : 쏘는 시간(몇 초 동안 쏠 지)

- Looping : 반복할 지 말지

- Start Lifetime : 생성되고 난 후 수명(얼마동안 존재할 지)

- Start Speed : 속도

-Simulateion Space : Local이면 상대위치, World면 절대위치

Emission

- Rate over Time : 초당 얼마나 생성 될 지

ex) lifeTime 1초동안 Speed 20이니까 20만큼 움직인다.

Particle System

발사된 레이저 파티클이 함선을 따라다니는데 레이저 파티클은 따로 있게 하려면 Simulation Space를 Local에서 World로 바꿔주면 된다.

파티클이 부모 위치를 따라감
파티클이 월드 기준으로 움직임

Trails 모듈은 파티클이 지나간 자리에 자국이 남음

Trails

핑크색은 보통 null 값을 사용할 때 뜸

핑크색 레이저

Trail Material을 수정하면 해결된다.

Trail Material

레이저처럼 보이기위해 Size Affects Width를 끄고

Size Affects Width

Start Size를 0으로 만들어줬다.

Start Size

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

발사 Input System  (0) 2022.08.26
중첩 프리펩  (0) 2022.08.26
게임 플레이 조율하기  (0) 2022.08.26
플레이어 회전  (0) 2022.08.26
플레이어 이동하기  (0) 2022.08.25

게임 플레이 조율하기

언제 게임 플레이를 조율하는가?

요소 추가 -> 버그 발생 -> 게임 플레이 조율 <-이 사이 반복-> 플레이 테스트 -> 요소 추가

 

타임라인 조정하기

타임라인을 설정했을 때 회전이 돌아갈 때가 있는데 이 때는 키프레임을 수동으로 조정하여 바꿔줘야한다. 

타임라인 조절

Camera의 Field of View 값을 늘리면 카메라 시점이 멀어지지만 더 빨라보이는 효과가 있다.

Field of View

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

중첩 프리펩  (0) 2022.08.26
레이저 총알 파티클  (0) 2022.08.26
플레이어 회전  (0) 2022.08.26
플레이어 이동하기  (0) 2022.08.25
Input Manager와 Input System  (0) 2022.08.25

플레이어 회전

비행기의 회전 요소

Roll

씬 창의 Z축

Pitch

씬 창의 X축

Yaw

씬 창의 Y축

 

회전 영향

Pitch -> Yaw 순으로 조절하니까 모든 Yaw를 조정할 때 모든 축이 영향을 받는다.

Pitch -> Yaw

Yaw -> Pitch 순으로 조절하니까 다른 축에 영향 없이 깔끔하게 회전이 된다.

Yaw- > Pitch

Yaw - Pitch - Roll 순으로 조절하니까 다른 축에 영향 없이 잘 움직인다. (Y축 -> X축 -> Z축)

* Pitch - Roll만 따로 움직여도 영향 없이 잘 움직인다. => 순서가 중요하다.

Yaw -> Pitch -> Roll

 

회전 스크립트

월드에 대한 회전인 transform.rotation 대신 transform.localRotation을 사용하는 이유는
Player Rig(월드 기준 오브젝트)의 회전을 조절하면 카메라까지 회전되어 어지러워져서 그렇다. (의도에 따른 방법)

localRotation

왜 localPosition.y에 factor를 곱하느냐? => 현재 위치(높이)에 따른 각도를 조절해줘야 하기 때문에 위치에서 값을 불러온다.

그리고 pitch(x축) 회전이므로 factor 값을 음수로 넣어줘야 위치가 +가 될 때 x축으로 - 회전인 위로 향하게 된다.  

localPosition.y
pitch
x축 회전이 된 모습

x축 -> 화면 양옆 이동으로 Pitch Rotation이 연동, 컨트롤 할 때 함선 앞쪽의 기울기와 연동

y축 -> 화면 위아래 이동으로 Yaw Rotation과 연동

z축 -> 컨트롤 할 때 함선 양 옆의 기울기와 연동

C#과 Unity로 3D 게임 개발하기

회전 연동

 

나머지 회전들

YawDueToPosition도 위와 같은 이유인 position과 연동되기 때문에 localPosition.x을 사용하였고(양 옆 이동)

Yaw Factor 값을 양수로 설정해준 이유는 음수로 설정하면 바로 아래 사진처럼 가운데만 쏠 수 있게 되고

양수로 설정하면 정면을 쏠 수 있어서 그렇다.

YawFactor 음수
YawFactor 양수

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

레이저 총알 파티클  (0) 2022.08.26
게임 플레이 조율하기  (0) 2022.08.26
플레이어 이동하기  (0) 2022.08.25
Input Manager와 Input System  (0) 2022.08.25
Timeline  (0) 2022.08.25

플레이어 이동하기

 

애니메이션과 이동 오브젝트를 구분만 잘해주면 되는데 만약 부모와 자식 오브젝트의 피봇이 다를 때 동시에 회전하는 경우라면 애니메이션 이동을 자식에서, 트랜스폼 이동을 부모에서 처리하는 경우가 많이 생긴다.

로컬 포지션 이동

1. Time.deltaTime을 곱해줘서 프레임마다 이동하게 만들어줬고

2. controlSpeed라는 변수를 통해 속도 값을 조정해줬고

3. Mathf.Clamp를 사용하여 비행선이 움직일 수 있는 범위를 지정해줬다.

비행선 움직임

미리 비행선을 이동시켜놓더라도 Clamp가 상대적으로 더하는 게 아니라 Player Ship의 position 값에 제한을 둔 것이어서 대신 카메라를 이동시키는 방식을 선택했다.  

Clamp
카메라 조정

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

게임 플레이 조율하기  (0) 2022.08.26
플레이어 회전  (0) 2022.08.26
Input Manager와 Input System  (0) 2022.08.25
Timeline  (0) 2022.08.25
Terrain Texture, Tree  (0) 2022.08.25

Input Manager

Input Manager는 입력에 관한 것들을 다루는 매니저이다.

이동에 GetAxis()를 사용할 건데 -1부터 1까지의 값을 반환하는 함수이다. -> Horizontal 수평 Vertical 수직

- Type에 따라 입력 받는 원천이 달라진다. (조이스틱, 데스크탑 등)

- Dead : 데드존 - 값이 올라가게 하려면 얼마나 밀어야 하는지를 뜻한다.

- Sensitivity : 끝 값(-1이나 1)까지 가는데의 속도 -> 높을수록 빠름

Input Manager

 

 

Input System

Window - Pakage Manager - Input System을 설치한다.

Input System

문제가있다면 Edit - Project Settings - Player - Configuration - Active Input Handling의 Input Manager(old)를 선택하면 된다.

- using UnityEngine.InputSystem;을 하고

- Input Action이라는 변수를 SerializedField로 선언한다.

- 이후에 + 버튼을 누르면 여러 Action 중에서 선택할 수 있다.

Input Action
Input Action Inspector

- 더블클릭하여 바인딩할 Path를 정해줄 수 있다.

Binding

Path에서 Listen을 클릭해서 키보드를 누르면 해당 키를 불러와준다.

Listen

이후에 서브 키도 설정이 가능하다.

Subkey

그냥 바인딩 1개를 추가하여 한 방향만 등록해놓으면 다른 방향도 알아서 적용해준다.

바인딩2

이후 코드에서 인스펙터에서 바인딩한 movement를 가져올 때 Vector2타입이니 축에따라 값을 넣어주면 된다.

Binding한 값 넣어주기

 

OnEnable()

Play버튼을 눌렀을 때 Awake() 콜백이 발생하는데 그 다음으로 호출되는 함수가 OnEnable()이다.

- 유니티가 플레이 버튼이 눌렸을 때 Awake에서 찾을 수 있는 모든 스크립트에 일어나라고 명령하고 그 다음에 OnEnable이 호출되어 안에 들어있는 것들을 활성화 시킨다. ** OnDisable도 써줘야함 (비활성화를 위해)

유니티 라이프사이클

유니티 라이프사이클 일부분
Onable(), Disable()

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

플레이어 회전  (0) 2022.08.26
플레이어 이동하기  (0) 2022.08.25
Timeline  (0) 2022.08.25
Terrain Texture, Tree  (0) 2022.08.25
Terrain Tools  (0) 2022.08.25

Timeline

게임 안에서 무엇인가를 애니메이션으로 만들 수 있게 해주는 툴이다.

ex) 컷씬, 시네마틱 시퀀스 = 월드에서 적의 움직임을 애니메이션으로 만들거나 월드에서 무언가가 떨어지게 만들 수 있고 플레이어가 돌아다니다가 타임라인 이벤트를 발생시킬 수도 있다 ==> 애니메이션의 한 방법인데 특정 타이밍, 타임라인을 토대로 만들어진 애니메이션이라 언제 실행될 지 알 수 있다.

Window - Sequencing - Timeline으로 Timeline을 불러올 수 있다.

Timeline

Window - Animation - Animation의 Animation과 같이 이용했다.

Animation

 

타임라인 생성하고 적용하기

새 게임 오브젝트에 Create를 눌러 타임라인을 생성했다.

타임라인 생성

타임라인의 단위를 정할 수도 있다.

* 추가로 씬의 화면을 클릭했을 때 타임라인 창이 꺼져서 불편한 경우가 있는데 이 때는 잠금 버튼으로 고정하자

타임라인 단위

먼저 타임라인 이벤트 오브젝트의 위치를 정하고 좌측 상단의 +를 눌러 애니메이션 트랙을 생성해준다.

애니메이션 트랙

이후 애니메이터 부분에 타임라인 이벤트 오브젝트를 드래그앤 드롭하여 애니메이터를 생성한다.

드래그 앤 드롭

이후 해당 오브젝트에 애니메이터가 추가되고 녹화버튼을 눌러 애니메이션 녹화를 시작한다.

씬에서 화면 구도를 잡은 후 게임 오브젝트를 선택하고 GameObject - Align With View를 하면 이 특정 위치, 각도, 뷰로 스냅해준다.

* 팁으로 마우스 우클릭 + Q나 E를 누르면 씬 카메라를 위 아래로 움직일 수 있다

뷰 맞추기

얼마나 이동해야 하는지 감이 안잡힌다면 Edit - Preferences - Colors - Grid의 색을 조정하여 정하면 된다.

Grid Color

맘에 안 들면 우클릭 후 Edit In Animation Window에서 수정할 수 있다.

Edit Animation

키프레임 양 끝에 바 같은 걸 드래그해서 프레임을 늘리거나 줄일 수 있다.

프레임 늘리거나 줄이기

Curve를 선택해 애니메이션의 진행을 부드럽거나 극적으로 진행할 수도 있음

Timeline Curve

회전 같은 걸 조정한 후 물체가 부딪힐 것 같을 때 우클릭하여 Add Key를 한 뒤 위치 등을 조정하면 된다.

Curve Add Key

Curve의 Handle을 조정해 키프레임 앞 뒤의 기울기를 정할 수 있다.

Curve Hadle

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

플레이어 이동하기  (0) 2022.08.25
Input Manager와 Input System  (0) 2022.08.25
Terrain Texture, Tree  (0) 2022.08.25
Terrain Tools  (0) 2022.08.25
Terrain  (0) 2022.08.25

Terrain Texture

Painit Texture라는 항목에서 아래쪽의 Layer 부분의 Add Layer를 통해 레이어가 있다면 레이어를 추가할 수 있다.

Create New Layer를 한다면 Texture를 통해 Layer를 생성할 수 있다.

Paint Texture
Terrain Layer

레이어를 생성하면 Duffuse Map, NormalMap, Height Map이 합쳐져서 레이어를 표현한다.

- Bump Map : 2D Map으로부터 얻은 3D 정보 혹은 3D 비주얼에 대한 레이어의 분류를 뜻하는 용어이다, Nomal Map과 Height Map은 Bump Map의 하위 용어이다. => 2D를 3D처럼 보이게 할 수 있도록 빛이 모양을 잡는 방식에 대한 정보를 가진 텍스처이다.

- Height Map : 흑백 스케일을 사용해서 높이를 보여준다. 터레인에도 높이 정보인 Height 맵이 포함되어있어 Export가 가능하다.

- Normal Map : 픽셀마다 다른 색은 빛이 어떻게 표현되어야 하는지 나타낸다 -> RGB 값을 사용, 각 픽셀의 (x,y,z) 값이 향하는 방향을 나타낸다.

 

Diffuse, Normal Map, Mask Map

여러 레이어를 추가한 모습

Terrain Layer

 

트리 추가하기

Paint Trees에서 Edit Trees - Add Tree로 트리 프리펩을 선택해 꾸밀 수 있다.

마우스 좌클릭을 통해 생성할 수 있고 Shift + 좌클릭으로 삭제할 수 있다.

Paint Trees

트리가 생성될 범위, 밀도, 높이 랜덤 등 여러가지를 정할 수 있다.

Tree Settings

나무를 심은 모습

나무 심기

** 이전에 Set Height로 설정하고 기준이되는 높이를 Ctrl + 좌클릭으로 한 번 지정해준뒤 (월드에 있는 타겟 지형) 다시 좌클릭만 눌러주면 그 높이로 맞춰진다.

Set Height

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

Input Manager와 Input System  (0) 2022.08.25
Timeline  (0) 2022.08.25
Terrain Tools  (0) 2022.08.25
Terrain  (0) 2022.08.25
아르곤 침공 게임 디자인  (0) 2022.08.25

Terrain Tools

Pakage Manager - Unity Registry - Terrain Tools를 검색하면 다운로드 할 수 있다.

단축키

- A : 속도

- S : 사이즈

- D : 회전

Terrain Tools

Sculpt : Ctrl + 좌클릭으로 시작 지점 다른 편에 좌클릭으로 수행

- Bridge - 다리

Bridge
Bridge 2

- Colne - 지형 복사

Clone

- Noise : 울퉁불퉁하게 만듬

Erosion

- Wind : 바람이 쓸고 지나간듯이 지형을 깎음

아래의 Stroke에서 Jitter는 무작위성을 나타낸다.

Jitter

Smooth

- Height : 평평해짐

Smooth Height

Transform

- Pinch : 뽀족하게 만듬

Transform Pinch

- Smudge : 옆으로 밀어버림

Smudge

- Twist : 회오리바람 모양이 생김

Twist

Paint Holes : 구멍 생김 - 동굴, 터널 만들기

Paint Holes

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

Input Manager와 Input System  (0) 2022.08.25
Timeline  (0) 2022.08.25
Terrain Texture, Tree  (0) 2022.08.25
Terrain  (0) 2022.08.25
아르곤 침공 게임 디자인  (0) 2022.08.25

+ Recent posts