1. 개요
프로그램 실행 중에 Sky Box를 변경한다.
2. 수작업으로 변경하는 방법
프로젝트 Asset 폴더에 360도 파노라마 사진을 준비한다.
마우스 우측버튼으로 Create> Material을 생성하고, 적절한 이름을 부여한다.(예: PanoramaSkybox).
생성한 Material을 선택하고, Inspector 창에서 Shader를 Skybox > Panoramic으로 변경합니다.
Main Texture 슬롯에 파노라마 이미지를 드래그 앤 드롭한다.
이제 생성한 Skybox Material을 현재 Scene에 적용합니다.
Window > Rendering > Lighting을 선택하여 Lighting 창을 엽니다.
Environment 탭에서 Skybox Material 항목을 찾습니다.
Skybox Material 슬롯에 생성한 Material (PanoramaSkybox)을 드래그 앤 드롭하여 할당합니다.
3. 로컬파일에서 읽어서 프로그램에서 변경하기
Assets/images/panorama.jpg로 skybox를 변경하는 예제 코드이다.
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
public class ChangeSkyBox : MonoBehaviour
{
public string imagePath = "Assets/Images/panorama.jpg";
public Material skyboxMaterial;
void Start()
{
// 에디터에서만 동작하는 코드
#if UNITY_EDITOR
Texture2D panoramaTexture = AssetDatabase.LoadAssetAtPath<Texture2D>(imagePath);
if (panoramaTexture != null)
{
Material skyboxMaterial = new Material(Shader.Find("Skybox/Panoramic"));
skyboxMaterial.SetTexture("_MainTex", panoramaTexture);
RenderSettings.skybox = skyboxMaterial;
DynamicGI.UpdateEnvironment();
}
else
{
Debug.LogError("Failed to load texture from path: " + imagePath);
}
#endif
}
}
4. 서버에서 읽어서 변경하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class ChangeSkyBox2 : MonoBehaviour
{
public string imageUrl = "https://server_url/Notre-Dame01.jpg";
public Material skyboxMaterial;
void Start()
{
skyboxMaterial = new Material(Shader.Find("Skybox/Panoramic"));
StartCoroutine(DownloadAndSetSkybox());
}
IEnumerator DownloadAndSetSkybox()
{
using (UnityWebRequest webRequest = UnityWebRequestTexture.GetTexture(imageUrl))
{
// 요청을 보내고 응답을 기다림
yield return webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ConnectionError || webRequest.result == UnityWebRequest.Result.ProtocolError)
{
Debug.LogError("Error downloading image: " + webRequest.error);
}
else
{
// 성공적으로 다운로드된 텍스처를 Skybox에 적용
Texture2D panoramaTexture = ((DownloadHandlerTexture)webRequest.downloadHandler).texture;
skyboxMaterial.SetTexture("_MainTex", panoramaTexture);
RenderSettings.skybox = skyboxMaterial;
DynamicGI.UpdateEnvironment();
}
}
}
}
반응형