[유니티] UNITY 게임화면 하늘의 구름이 흘러가게 하려면 어떻게 해야 할까요?
안녕하세요. 오늘도 평화로운 가을 느낌의 바람이 살짝쿵 불어오려다 마는 8월의 오전입니다.
게임을 만들다가 보면 하늘의 구름이 그냥 고정되어 있으면, 뭔가 아쉬운 생각이 듭니다. 그땐 무조건 하늘의 구름이 옆으로 흘러가는 효과를 넣어야 합니다.
이때 하늘을 표현하기 위해서 사용하는 것이 SkyBox 입니다.
skybox에 대한 쉐이더(shader)에는 텍스쳐를 사용하는 3가지(6 sided / Cubemap / Panoramic)와 텍스쳐를 사용하지 않는 1가지(Procedural)가 있습니다. 주로 텍스쳐를 이용한 쉐이더를 사용합니다.
How??? 어떻게 사용하는지 알아보겠습니다.
1. skybox의 쉐이더(shader)의 속성 중에서 rotation(회전)속성에 변화를 주면 조금씩 하늘이 회전하면서 구름도 함께 흘러가는 효과를 표현할 수 있습니다.

; 스크립터를 사용해서 Rotation 값을 조금씩 증가시키면 고정된 구름이 흘러가는 효과를 줄 수 있습니다.
아래의 예를 통해서 알아보겠습니다.
[예제1] 무료 에셋을 통해 구름있는 하늘 구성하고 구름 흐르게 하기
-. 먼저 유니티에 구름이 있는 하늘을 설치하겠습니다. 먼저 많이들 쓰고 계시는 Fantasy skybox를 사용하겠습니다.
Asset Store / Search online에서 fantasy skybox 를 검색해서 Free 버전을 다운로드합니다.


Window / Package Manager 를 클릭해서 창을 열고 ' Packages: My Assets ' 선택후에 Fantasy Skybox를 선택하고 Import 합니다.

저는 예제 상 필요한 ' FS000_Day_01 ' 만 Import 하겠습니다.

Import 하고 난 뒤에 Project / Assets 에 Fantsy Skybox FREE 폴더가 생성된 것을 확인 할 수 있습니다.
Window / Rendering / Lighting 를 클릭해서 Lighting 창을 엽니다.

Environment / SkyBox Material 을 클릭하고 나서 아래와 같이 화면이 나오면 방금 전에 받은 FS000_Day_01을 선택합니다.


이렇게 하면 아래와 같이 하늘이 변경된 것을 확인 할 수 있습니다. 저는 Plane으로 땅을 만들고 , 큐브를 추가로 하나 생성하였습니다. 멋지죠? ^^

-. 이제 구름이 흘러 가도록 스크립터를 생성하겠습니다.
빈 오브젝트를 Hierarchy 에 생성한 다음 이름을 Sky로 하겠습니다.
그리고, ' Flowcloud ' 라는 이름으로 아래와 같이 스크립터를 생성하겠습니다.
using System.Collections;
using UnityEngine;
public class Flowcloud : MonoBehaviour
{
private float flowTime; //회전값 변수 선언
private void Start()
{
StartCoroutine("FlowSky"); //코루틴 시작
}
IEnumerator FlowSky() //코루틴 함수
{
while (true)
{
flowTime += Time.deltaTime ; //회전값 변수가 시간이 흐름에 따라서 값이 증가 하게 함
RenderSettings.skybox.SetFloat("_Rotation", flowTime); //스카이 박스의 회전속성값을 변경함
yield return null;
}
}
}
스크립터를 Sky에 적용시키고 나서 플레이하면 아래와 같이 구름이 조금씩 움직이는 것을 확인 할 수 있습니다.

참고)
Lighting / Environment 에서 Environment Lighting 의 Source 를 보면 ( Skybox / Gradient / Color ) 중에서 선택할 수 있는데 Skybox 색상의 영향을 없도록 Color로 선택해서 작업하였습니다.

그럼 오늘도 즐유!(즐거운 유니티) ^^
'유니티 프로그램' 카테고리의 다른 글
| [유니티] UNITY string형 값으로 전달받은 자료를 어떻게 int형으로 바꿔야 할까요? (1) | 2022.08.29 |
|---|---|
| [유니티] UNITY 게임오브젝트 여러개를 동시에 안보이게 하려면 어떻게 해야 할까요? (0) | 2022.08.23 |
| [유니티] UNITY 플레이시간(타이머)을 다음 씬(SCENE)까지 끊김없이 흐르게 하려면 어떻게 해야 할까요? (0) | 2022.08.09 |
| [유니티] UNITY GameObject의 위치를 랜덤(random)하게 생성하려면 어떻게 하나요? (0) | 2022.08.01 |
| [유니티] UNITY 싱글톤패턴(Singleton Pattern)은 어떻게 쓰나요 (0) | 2022.07.26 |