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

3. Project Boost : Add cheat / Debug Keys ~ Wrap Up (6)

by 지수_숙 2023. 11. 3.

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

Project Boost : 54.Add cheat / Debug Keys ~ 63.Wrap Up

 

54. Add cheat / Debug Keys

어떠한 동작이 이어지도록 디버그 키를 설정해보자.

'L' = load the next level

'C' = disable collisions

bool collisionDisable = false;

void Update()
{
	RespondToDebugKeys();
}

void RespondToDebugKeys()
{
	//키 L을 누르면
	if (Input.GetKeyDown(KeyCode.L)) 
    {
    	LoadNextLevel();
    }
    
    //키 C를 누르면
    else if (Input.GetKeyDown(KeyCode.C))
    {
    	collisionDisable = !collisionDisable; // toggle collision
    }
}

 

이러한 디버그 키는 내가 만들고 싶을 때마다 추가할 수 있고,

키에 따른 수행 동작을 쉽게 바꿀 수 있다.(if문 안에만 바꾸면 됨)

 

55. Make Environment From Cubes

아래의 사진은 디자인 요소를 하나도 적용하지 않은 초기 상태이다.

요소를 추가하고 색을 변경하여 시각적으로 풍부하게 만들어보자.

#1 배경 추가

- Assets > Materials > Create > Material > Rename : Skybox

- Lighting tab > Envitronment > Skybox Material > Skybox

- Inspector > Skybox > Procedural 설정 값 조절

 

#2 사물 추가(Prefab)

- Assets > Prefabs > Obstacle 추가 

결과

보이는 것과 같이 배경과 사물을 추가하고 질감 및 색 표현을 바꾸면

시각적으로 더 풍부해 보이는 효과를 얻을 수 있다.

 

56. How To Add Lights In Unity

유니티에는 Main Driectional Light(Sun)이 기본값으로 존재한다.

이번엔 오브젝트에  Spotlight 효과를 적용해 빛을 낼 수 있도록 만들어보자.

 

일반적으로 우리가 생각하는 전구를 만들 때는 Point Light를 추가하면 된다.

- Hierarchy > Light > Point Light

 

전구를 Prefab에서 추가하게 되면, 오브젝트가 내는 빛처럼 보이게 만들 수 있다.

- Prefab '>' > Light > Point Light(x, y, z)  = (0, 0, 0)

 

57. Move Obstacle With Code & 58. Mathf.Sin() For Oscillation

이때까지 오브젝트의 좌표 (x, y, z)를 직접 조정하여 움직였다.

코드를 작성하여 오브젝트를 움직여보자.

 

예를 들어  (0, 0, 0)에서 (10, 0, 0)으로 이동하는 것의 MF(Movement Factor)가 1이면,

(5, 0, 0)으로 이동하는 것은 MF가 0.5이다.

 

- Assets > Scripts > Create > C# > Rename : Oscillator >>> drag >>> Obstacle Inspector

- Code : Oscillator

Vector3 startingPosition;
[SerializeField] Vector3 movementVector;
[SerializeField] [Range(0, 1)] float movementFactor;
//움직임 범위가 0부터 1까지만 허용
[SerializeField] float period = 2f;

void Start()
{
	startingPosition = transform.position;
    //Debug.Log(startingPosition);
}

void Update()
{
	//주기
	float cycles = Time.time / period; // continually growing over time
	const float tau = Mathf.PI * 2;	// constant value of 6.283
    float rawSinWave = Mathf.Sin(cycles * tau) // in radians, going from -1 to 1
    
    //Debug.Log(rawSinWave);
    
    movementFactor = (rawSinWave + 1f) / 2f; // 0 or 2 / 2 = 0 or 1
    
	Vector3 offset = movementVector * movementFactor;
    transform.position = startingPosition + offset;
}

*const = constant variable, 고정값

*주기 설정에 sin 그래프 참고

사인 그래프

 

59. Protect Against NaN Error

57강과 58강에서 작성한 코드를 그대로 적용한다면 에러가 발생할 것이다.

그 이유는 16줄에서 Time.time을 0인 period로 나누었기 때문이다.

우리가 흔히 쓰는 계산기에서도 예를 들어 10 나누기 0을 하면 0으로 나눌 수 없다는 문구가 뜬다.

 

이 에러를 해결하기 위해서 다음 코드를 나누기 전에 추가해주면 된다.

//if (period == 0) { return; }
if (period <= Mathf.Epsilon) { return; }

 

60. Designing Level Moments

게임에 단계(Level)을 추가해보자.

 

+ 게임 디자인 시 참고할 내용 

 

61. Quit Application

게임을 종료(exit)할 수 있도록 디버그 키를 추가해보자.

- Assets > Scripts > Create > C# > Rename : QuitApplication >>> drag >>> Rocket Inspector

- Code : QuitApplication

void Update()
{
	if (Input.GetKeyDown(KeyCode.Escape))
    {
    	Debug.log("we pushed escape");
    	Application.Quit();
    }
}

 

62. How To Build & Publish A Game

http://sharemygame.com

 

ShareMyGame.com by GameDev.tv

Upload your Unity games today!

sharemygame.com

 

63. Wrap Up - Project Boost

End Project.