나 개발자 진짜 되냐?

[ Unity 3D 서바이벌 게임 만들기 4 ] 낮과 밤 구현 본문

유니티를 공부해봐요!/중급이에요!

[ Unity 3D 서바이벌 게임 만들기 4 ] 낮과 밤 구현

Snow Rabbit 2024. 10. 28. 03:02

 

낮과 밤을 구현해 보자

 

Light

 

게임 또는 3D 랜더링에 광원을 추가하는 데 사용한다.

 

종류로는

1. 점 광원 ( Point Light )

모든 방향으로 균등하게 빛을 발산하는 광원

 

2. 방향성 라이트 ( Directional Light)

무한히 멀리 위치하여 한 방향으로만 빛을 발산하는 광원

 

3. 스포트라이트 ( Spot Light )

말 그대로 스포트라이트

씬의 한 점에 위치하여 원뿔 모양으로 빛을 발산하는 광원

 

4. 면 광원 ( Area Light )

표면 영역 전체에 걸쳐 균등하게 모든 방향으로 빛을 방출,

사각형의 한쪽 면에서만 빛을 방출하는 광원

 

 

속성에는

위치, 방향, 강도, 색상, 범위, 각도

가 있고

 

이 친구들은 속성에 영향을 많이 미치게 때문에

최적화를 위해서 최대한 야무지게 써줘야 한다.

 

실제 환경의 빛을 조절해 주는

Lighting Intensity Multiplier

 

실제 오브젝트에 반사되는 정도를 조절하는

Reflecting Intensity Multiplier

 

두 개를 기억하자!

 


 

자 먼저

유니티에서 해의 위치를 보자

 

90도 일 때

 

 

 

180도 일 때

 

 

270도 일 때

 

해를 계속 돌려주면 된다.

 

혹시 해가 안 돌아간다! 하는 분들

해를 돌리게끔 하는 방법은

window > Rendering > Lighting

 에 들어가면

 

 

SunSource에 자동으로

Directional Light라는 옵젝이 추가되어 있다.

 

이 옵젝을 추가해 준 덕분에

해가 뱅글뱅글 돌아가게끔 된다.

 

따로 분류해 두자.

 

 

빈 오브젝트 추가해서

Day 넣고,

Directional Light 옵젝이름을 Sun으로 만들고

하나 고대로 복사해서 Moon으로 만들어준다.

 

Color은 0 0 255 255로 파란색으로 맞춰준다.

 

moon은 잠시 안 보이게 꺼두자

 

DayNightCycle.cs 작성!

 

 

 

주석에도 써놨지만

Range를 통해 범위를 지정해 주고

변수를 적어준다

하루 24시간을 0부터 1까지 정하고

그 안에서 움직이게 한다.

 

 

해와 달에게도 변수를 적어준다

그라데이션과 빛의 강도를 조절해 주는 변수를 추가해 주었다.

 

 

그리고 추가적인 빛은

아까 중요하다고 말했던 친구들이 들어간다.

 

실제 환경의 빛을 조절해 주는

Lighting Intensity Multiplier

 

실제 오브젝트에 반사되는 정도를 조절하는

Reflecting Intensity Multiplier

 

 

start 에는 

시작값을 넣어주고,

시간을 백분위로 나눈 느낌이라고 생각해 주면 된다.

 

자 다음에 중요한 부분인

시간 업데이트 문이다.

저 긴 계산식은 뭐냐...

설명해 보면!

time이 0.5면 정오인데

이때는 각도가 90도여야 한다.

 

근데 시간은 0.5면 12시고

각도는 0.5면 180도이다.

 

각도는 360중에 90이면 0.25인 셈이라서

시간 0.5에서 0.25를 더 빼줘서

90도로 만들어줘야 한다.

 

그리고 달은

해의 위치와 정반대기 때문에

해에서 0.5 더해진

0.75를 빼주는 연산을 넣어준다.

 

여기에 정오의 각도를 곱해준다.

 

즉 식을 다시 보면

time이 정오일 때

0.5 -0.25 해서 

0.25가 나오면 이 값을

noon 정오값과 곱해주면 된다.

근데 0.25랑 90 해주면 90이 안 나오기 때문에

*4를 해줘서 1을 만든 후에 90을 곱해주면

시간 계산해 주는 친구가 된다.

 

 

이 부분은

최적화 느낌도 조금 있는데

해가 떠 있을 때

굳이, 달을 켜놓을 필요가 없다.

 

그래서

밝기가 0이고 

Hierarchy창에 active 되어있다면

꺼주자!

그렇지 않다면?

켜주자!

 

그다음에 지속적으로 업데이트해줘야 하니까 update에 넣어준다.

 

밑에 두줄은 아까 보라고했던 친구들이다.

 

넣어줄 땐

RenderSettings로 넣어줘야한다.

문법이니까

..음.. 

외우기까지는 말고..ㅎ

눈에 익혀두자!

 

 

자 유니티로 가서 설정해주자

먼저 값을 적어준다.

30 /  0.4  / 90

 

그라데이션을 어떻게 넣냐! 먼저 

좌우에 원하는 색을 넣 어주고

가운데에 더블클릭하면

세모만 친구가 생기는데 여기를 하얀색으로 바꿔주면 된다.

나는,

255 255 0 으로 좌우를 맞췄고

가운데는 255 255 255 으로 맞췄다.

 

달은

아까 해주었던 파란색으로 해준다.

0 0 255 로 좌우를 맞추고

30에서 70을

0 0 0 으로 검정으로 맞춰준다.

 

다음에 밑에 Intensity는

눌러주면 빈공간이 뜬다

 

밑에 아무 줄을 누른다음에

값을 설정해준다.

 

키값 바꾸는 건

점 눌러서 edit Key해주고

추가는 선에다가 add key해주고

만약에 선이 곡선이다 싶으면 

flat 해주면 된다.

Sun

(0.25, 0) - (0.5, 1) - (0.75, 0)

Moon

(0, 0.2) - (0.3, 0) - (0.7, 0) - (1, 0.2)

 

LightingIntensityMultiplier

ReflectionIntensityMultiplier

(0, 0) - (0.4, 1) - (0.8, 1) - (1, 0)

 

해주면 끝!

 

 

이렇게 해주었다면

해와 달이 뱅글뱅글 잘 돌아가는 모습을 볼 수 있다!

 

다음에는 아이템을 상호작용 해보는 시간을 가지도록 하자!