Unity에 LoadScene에서 Fade in/out
조회수 2605회
제가 하는 프로젝트는 VR 모바일 앱을 유니티로 만드는 것입니다.
문제는 LoadScene에서 Fade in/out효과를 넣고 싶은데 온라인 강좌마다 다 다르고 대부분 2D화면들이라 제가 하는 것과는 다른 부분이 많아 구현하는데 어려움을 겪고 있습니다. 스크립트 (LoadSceneOnClick)참조 부탁드립니다.
처음 시작부분에서 Fade in과 out 효과는 넣었는데 다음씬으로 넘어가질 않습니다. Fade in/out의 시간조절이라든지 다음씬으로 넘어가는 부분을 숙지하고 앞으로도 잘 활용하고 싶습니다. 도와주세요!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class LoadSceneOnClick : MonoBehaviour
{
public int index;
public string levelName;
public GUITexture black;
public Animator anim;
public void LoadByIndex(int sceneIndex)
{
StartCoroutine(Fading());
}
IEnumerator Fading()
{
anim.SetBool("Fade", true);
yield return new WaitUntil(() => black.color.a == 1);
SceneManager.LoadScene("1_EarthMenu");
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
color의 a값은 float라서 발생하는 문제인것 같습니다. float에서
==
연산은 사용하지 않는것이 좋은데요. 둘 다 1의 값을 가지고 있더라도 서로 같지 않은 경우가 있습니다.아래 코드를 실행해 보면 b는 0.9부터 0.01씩 증가하면서 1.1까지 증가합니다. 코드를 실행하다 보면(코드 아래 실행하기 버튼 눌러보세요) b는 반드시 1인 순간이 한 번은 있을것 같지만
b==1
이 출력되지 않을거에요.using System; public class Hello1 { public static void Main() { float b = 0.9f; System.Console.WriteLine("b: "+b); for(int i=0;i<20;i++){ if(b==1){ System.Console.WriteLine("b==1"); } if(Math.Abs(1-b)<0.001f){ System.Console.WriteLine("b는 거의 1"); } b+=0.01f; } System.Console.WriteLine("b: "+b); } }
이는 이진수로 실수를 표현하는 방식인 부동소수점(floating point)에서 발생하는 문제입니다. 자세한 내용이 궁금하시면 여기를 참고하시면 됩니다.
자세한 내용까지는 이해가 안되더라도 실수(float, double)에 대해서는 같은지 비교를
==
연산을 이용하는 것이 아니라 범위로 해야 한다(예: 차이가 0.001 미만) 정도로 알고 계시면 좋겠네요.적용하시려면 코드 제일 위에
using System;
을 적으신다음black.color.a == 1
를Math.Abs(black.color.a - 1)<0.001f
와 같이 바꿔 보세요. -
예제 설명 감사합니다. 솔직히 말씀드리자면 기초가 부족해서 설명해주신 내용이 이해가 어렵네요.
혹시 제 스크립트에서 어떻게 적용해야 할지 말씀해주실 수 있을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력