using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class LoadingSceneController : MonoBehaviour { static string nextScene; [SerializeField] //Image progressBar; public static void LoadScene(string sceneName) { nextScene = sceneName; SceneManager.LoadScene("LoadingScene"); }
참고로 Awake로 Coroutine 불러와서 allowSceneActivation = false 하면 제대로 안 먹힙니다. Start 나 Update로 실행하여야 한다고 합니다. (저는 Awake로 되어 있어서 한참 왜 안되지 찾아보다가 위와 같이 찾아내어 Start에서 호출하는 것으로 바꾸었습니다.)
정확히 똑같이 작성했는데, 왜 저는 로딩바가 차오르는 순간이 안보이고 로딩씬이 0.5초만 보이고 다음 씬으로 넘어가버릴까요? 심지어 베르님은 로드할 오브젝트들도 굉장히적은 반면 저는 게임이 완성단계라 로드할것이 훨씬 많을텐데도 로딩씬이 너무 휙 지나가버리네요 방법이있나요?
Time 클래스를 보면 timeScale이라는 항목이 있을 겁니다. 시간의 크기라는 뜻인데요, 유니티엔진에서는 게임 속의 시간을 두 가지로 분류합니다. 이 timeScale의 영향을 받는 시간과 영향을 받지 않는 시간. deltaTime은 이 타임 스케일에 영향을 받는 시간이고 unscaledDeltaTime은 영향을 받지않는 시간입니다. 그래서 타임 스케일이 0.5가 되면 deltaTime은 절반의 속도로 흐르고 unscaledDeltaTime은 현실 시간의 속도대로 흐르는 거죠. 보통 게임에서 슬로우 모션을 구현하는데 사용됩니다.
로딩씬을 하나만 만들고 여러개의 스테이지가 클리어 될때마다 로딩씬을 거치고 다음 스테이지로 이동되게 하는거는 어떻게 구현하면 될까요?ㅠ 예를 들어 스테이지 1 클리어 후 로딩씬으로 변경후 로딩후 스테이지 2 그리고 또 클리오시 로딩씬으로 거친후 스테이지3 이런식으로요 저혼자 스크립트로 만들어 봤는데도 에러나고 나와있는곳도 없어서 힘드네요ㅠ
NullReferenceException: Object reference not set to an instance of an object LoadingSceneController+d__4.MoveNext () (at Assets/Scripts/LoadingSceneController.cs:30) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at :0) UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator) LoadingSceneController:Start() (at Assets/Scripts/LoadingSceneController.cs:21) 이렇게 뜨면서 멈춰버립니다 ㅠㅠ 저 30줄에는 op.allowSceneActivation = false;가 있는데 뭐가문제 일까요? 답변부탁드립니다 ㅠㅠ
전체코드입니다 public class LoadingSceneController : MonoBehaviour { static string nextScene; [SerializeField] Image progressbar; public static void LoadScene(string SceneName) { nextScene = SceneName; SceneManager.LoadScene("LoadingScene"); } // Start is called before the first frame update void Start() {
@@소환사자리비움 NullReferenceException이라는 오류는 사용하려는 오브젝트가 null, 즉 존재하지 않을 때 발생하는 오류입니다. 그리고 at Assets/Scripts/LoadingSceneController.cs:30, 코드의 30번째 줄에서 오류가 났다고 표시하고 있네요. 보여주신 코드로는 30번째 줄이 정확히 어디인지 찾기가 어렵긴하지만 대강 흐름을 유추해보면 progressbar.fillAmount = op.progress;에서 난 오류가 아닐까 싶습니다. 앞에서 op를 사용하는 부분은 무사히 지나갔으니 op 오브젝트 쪽은 아닐테고 progressbar 오브젝트 문제겠네요. 에디터의 하이어라키 뷰에서 progressbar 프로퍼티가 비어있지 않은지 확인해주세요.
@@소환사자리비움 음 그럼 SceneManager.LoadSceneAsync(nextScene) 함수에서 op를 제대로 반환하지 않았다는 뜻이네요. 매개변수로 전달해주는 nextScene에 씬 이름이 제대로 들어갔는지, 오타는 없는지 확인해보시고 여기에 문제가 없다면, 빌드 세팅 창을 열어서 씬을 등록했는지 확인해봐야 할 것 같아요!
프로그레스 바가 안보인다는 뜻은 정확히 어떤 의미인가요? 1. 프로그레스 바 이미지가 안보인다. 2. 로딩으로 프로그레스 바가 차오르는 모습이 안보이고 멈췄다가 바로 다음 씬으로 넘어가 버린다. 3. 기타 어떤 방식으로 안보이는 건지 설명해주시면 좀 더 자세한 설명이 가능할 것 같아요!
@@Yesline-700 인스펙터 뷰에서 보이는 Progress Bar 프로퍼티가 안보이신다는 거군요! 여기에는 여러가지 원인이 있을 수 있습니다. 1. 코드에 에러가 있으면 코드가 수정되기 전까지 수정한 프로퍼티가 바로 보이지 않습니다. 콘솔창에 빨간 느낌표로 표시된 에러가 있나요? 있다면 코드의 에러를 제거해야 합니다. 2. Image progressBar 변수를 private으로 설정한 경우입니다. private Image progressBar; 와 같이 변수를 private으로 선언하면 컴포넌트의 변수는 인스펙터 뷰에서 보이지 않게 됩니다. 그럴 때는 두 가지 방법이 있는데 public Image progressBar; 처럼 변수를 public으로 선언하는 방법이 첫 번째고 [SerializedField] private Image progressBar; 처럼 변수 앞에서 SerializedField 어트리뷰트를 추가해주는 것입니다. SerializedField 어트리뷰트를 사용하면 변수를 private으로 유지한 채로 인스펙터 뷰에서 보이게 할 수 있습니다.
allowSceneActivation = false;를 하면 씬 로딩을 90%까지만 진행합니다. 그렇기 때문에 조건문에서 if(op.progress < 0.9) -> 0.9f 진행 상태가 0.9보다 작은 동안에는 progress 값으로 로딩 바 이미지의 fillAmount를 채우는 작업을 진행하고 90%가 되는 순간부터 아래 else 구문이 동작하도록 되어있습니다. 직접 작성한 코드를 알려주시면 분석해볼 수 있겠네요!
이것이 1년 전 영상인 것은 알지만 그럼에도 한 가지 여쭙고 싶은 것이 있습니다. 이 로딩 씬을 활용하여 게임 첫 실행 시 불러오기 하면서 무결성 검사하는 씬을 만들 수 있습니까? 제가 구현하고 싶은 것은 게임 첫 실행 시 게임이 손상되거나 불법 변조 되지 않았는지 무결성 검사를 실행한 뒤 문제가 없으면 게임을 로딩하여 다음 씬으로 넘어가도록 하는 것입니다. 이것은 참고 이미지입니다. drive.google.com/file/d/1b4nqdUxfP9NvG1POSA0DFFE1WJZldp0o/view?usp=sharing 저는 이 씬에서 좀 더 그럴 듯하게 보이기 위해 한 캔버스에 두 개의 로딩 바를 만들었으며, 하나는 현재 작업에 대한 진행도, 다른 하나는 전체 작업 진행도를 나타냅니다.
Unscaled Delta Time은 단어 그대로 크기가 조정되지 않은 델타 타임입니다. 유니티에서는 Time Scale이라는 요소가 있는데 이 time scale을 조절하면 1일 때는 현실과 같은 속도로, 1보다 작으면 현실보다 느리게, 1보다 크면 현실보다 빠르게 시간이 흐르게 됩니다. 이 Time scale에 DeltaTime이 영향을 받아서 시간이 느리거나 빠르게 흘러가는 효과를 줄 수 있습니다. 하지만 이 time scale에 영향을 받지 않고 움직여야 하는 요소 역시 게임에 존재할 수 있는데 이때 그 영향을 받지 않는 값이 Unscaled Delta Time 입니다.
참.. 고마운 분이시네..
자세한 설명 까지 해주고..
초보라서 전부 이해는 못하지만
그래도 영상을보고 따라하면 만들 수 있고..
나중에 실력이 늘면 이 강좌과 얼마나 유익했는지 알 수 있을 것 같다.
베르님 영상 올려주셔서 고맙습니다.
강의 설명도 자세하고 일일이 댓글에 답변까지...감동입니다
설명이 친절하시네용 이런 컨텐츠는 이용빈도가 적다는 게 아쉽습니다 ㅠㅠㅠ 구독박아요!
언젠간.... 언젠가는 많아지지 않겠습니까?
좋은 설명 정말 감사드립니다! 항상 보고 열심히 공부하고 있습니다!!
핵심내용만 쏙쏙 해주셔서 정말 감사할따름입니다 !
항상 좋은 강의 감사합니다.~ 엄지 척!👍👍👍
좋은 정보 감사합니다.
도움이 되셨으면 좋겠네요!
와 이 영상을 보고 로딩씬을 만들었어요
강의 감사합니다!!!!!!!
감사합니다. 잘보구 가요~^^
넵! 다른 영상에서도 또 뵐 수 있으면 좋겠네요ㅎㅎ
좋은 지식 감사합니다.
봐주셔서 감사합니다!
안녕하세요 베르님. 혹시 메인화면에서 던전선택 버튼을 통해 인던전씬을 불러온다면 오디오리스너 컴포넌트랑 조명오브젝트는 어떤 씬에서 가지고 있는게 바람직할까요..?
던전 환경에 맞춰서 사용해야 한다면 던전 씬에 있어야 한다고 봅니다.
@@wergia 답변 감사합니다.ㅠ
그립습니다. 베르님...
감사합니다.
로딩바 파일을 사용하려하는데 저작권 기준이 있다면 알려주실수있을까요?
어디서 받으신 로딩바 리소스인가요?
@@wergia 본 게시물에 구글드라이브에 있는 로딩바 파일입니다. 만들어보고 있는 유니티 프로젝트에 적용해봐도 되는지 몰라서 여쭈어봅니다.
모바일로 제작중인데 위에 제작하는 방법과는 어떤차이가 있나요??
좋은 강의 정말 감사합니다.!! 혹시 로딩시간을 더 늘리고 싶으면 어떻게 해야하나요??
로딩바에서 씬 로딩 시간을 제외하고 처리하는 시간을 늘려주면 됩니다.
나중에 영상으로 로딩 화면 중에 씬 로딩 외의 다른 작업을 처리하는 방법에 대해서 다뤄보도록 하겠습니다.
좋은 강의 감사합니다! 그런데 IEnumerator가 실행되지 않는 경우는 혹시 어떻게 해야 할까요? 로딩바 이미지는 필요없어서 이미지를 뺐는데 혹시 그것때문일까요?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class LoadingSceneController : MonoBehaviour
{
static string nextScene;
[SerializeField]
//Image progressBar;
public static void LoadScene(string sceneName)
{
nextScene = sceneName;
SceneManager.LoadScene("LoadingScene");
}
IEnumerator LoadSceneProcess()
{
AsyncOperation op = SceneManager.LoadSceneAsync(nextScene);
op.allowSceneActivation = false;
float timer = 0f;
while(!op.isDone)
{
yield return null;
if (op.progress < 0.9f)
{
}
else
{
timer += Time.unscaledDeltaTime;
if (Mathf.Lerp(0.9f, 1f, timer) >= 1f)
{
op.allowSceneActivation = true;
yield break;
}
}
}
}
}
전체 코드는 이렇습니다..!
@@user-fx4dy1zw1b [SerializeField]도 빼셔야 됩니다.
@@wergia 앗 감사합니다!! :) [SerializeField]를 빼도 IEnumerator가 실행이 안되어서 void Awake()에 StartCoroutine(LoadSceneProcess());를 넣으니까 잘 작동이 됩니다! 항상 좋은 강의 잘보고있습니다
게임이 바로 다음씬으로 넘어가면 리쏘스가 많아서 그런지 렉이 걸리는데 위 기능을 구현하면 렉 없이 다음 씬에서 게임을 즐길 수 있게되는게 맞는가요?
그것보다는 다음 씬으로 넘어갈 때 아무것도 안하면 게임이 렉걸려서 멈춘 것처럼 보이는 것을 막기 위해서 게임이 로딩되고 있는 것을 보여주기 위한 거에요!
@@wergia 렉안걸리게 리소스를? 다부를때까지 기다려주고 게임실행되는방법도ㅠ있을가요? 아니면 아무리기다려고 그씬할때 랙걸린다면 렉걸릴수밖에없는 씬인가요? 내부오브젝트를 줄여야되는건지 고민됩니다
로딩씬 띄울 시, 새 씬이 올라오기 전 까지는 기존의 씬이 살아있는 걸로 알고있습니다. 따라서 기존 씬의 UI가 로딩씬의 UI위에 나타나는 현상이 있는데, 예를들어 기존의 ABC라는 Text가 로딩씬 위에 보입니다.. 이거는 어떻게 해결해야 할까요?
로딩 UI 캔버스의 Sort Order를 조절해서 가장 앞으로 나오도록 만들어주시면 됩니다.
참고로 Awake로 Coroutine 불러와서 allowSceneActivation = false 하면 제대로 안 먹힙니다. Start 나 Update로 실행하여야 한다고 합니다. (저는 Awake로 되어 있어서 한참 왜 안되지 찾아보다가 위와 같이 찾아내어 Start에서 호출하는 것으로 바꾸었습니다.)
로딩씬이 바로 나와야하는데, 바로 안 나오고 좀 기다렸다가 다시 나옵니다. 원래 렉이 걸리던 씬이 있어서 그 사이에 로딩씬을 넣으려고 했는데 계속 기다렸다가 로딩씬은 0.5초만 있다 사라지고 다음씬으로 넘어가네요... 어떻게 하면 바로 로딩씬이 나오게 할 수 있을까요?
로딩씬 대기하는 while문 안에 yield return null; 구문이 빠지지 않았는지 확인해보세요! 해당 구문이 빠지면 로딩씬이 제대로 안보이고 넘어갈 수 있어요!
이거 해결 했습니다! loadasync가 생각보다 렛이 걸리더라구요. 로드 어싱크를 0.3초 늦게 해보세요! 스타트에서 invoke로 코루틴을 0.3초 늦게 부르면 로딩 씬으로 넘어간 뒤에 loadasync로 인한 렉이 생겨져서 자연스러워집니다!
정확히 똑같이 작성했는데, 왜 저는 로딩바가 차오르는 순간이 안보이고 로딩씬이 0.5초만 보이고 다음 씬으로 넘어가버릴까요?
심지어 베르님은 로드할 오브젝트들도 굉장히적은 반면 저는 게임이 완성단계라 로드할것이 훨씬 많을텐데도 로딩씬이 너무 휙 지나가버리네요 방법이있나요?
음 로딩하는 코드부분을 봐야 이유를 알 수 있을 것 같아요.
@@wergia 로드씬 메소드 호출 부분을 말씀하시는건가요?
@@wergia 베르님 코드랑 다를것이 하나도 없는데 왜 로딩이 0.5초컷이 날까요 ㅠ
@@이게나야-s3v LoadSceneProcess 코루틴 함수의 내용을 보여주시면 될 것 같습니다.
@@wergia
IEnumerator LoadSceneProgress()
{
AsyncOperation op = SceneManager.LoadSceneAsync(m_nextScene);
op.allowSceneActivation = false;
float timer = 0f;
while(!op.isDone)
{
yield return null;
if (op.progress < 0.9f)
{
m_progressBar.fillAmount = op.progress;
}
else
{
timer += Time.unscaledDeltaTime;
m_progressBar.fillAmount = Mathf.Lerp(0.9f, 1f, timer);
if(m_progressBar.fillAmount >= 1f)
{
op.allowSceneActivation = true;
yield break;
}
}
}
}
베르님과 같습니다.
웃긴게 대기실에서 게임씬으로 넘어갈땐 0.5초만 보여주더니 게임씬에서 대기실로 넘어갈땐 그래도 어느정도 프로그레스바가 차는게 보이고 넘어가지네요. 코드상 문제는 아닌가 봅니다.
Time.unscaledDeltaTime; 은 무엇인가요? deltatime은 아는데 저건 뭔지 모르겠네요;;
Time 클래스를 보면 timeScale이라는 항목이 있을 겁니다. 시간의 크기라는 뜻인데요,
유니티엔진에서는 게임 속의 시간을 두 가지로 분류합니다. 이 timeScale의 영향을 받는 시간과 영향을 받지 않는 시간.
deltaTime은 이 타임 스케일에 영향을 받는 시간이고 unscaledDeltaTime은 영향을 받지않는 시간입니다.
그래서 타임 스케일이 0.5가 되면 deltaTime은 절반의 속도로 흐르고 unscaledDeltaTime은 현실 시간의 속도대로 흐르는 거죠.
보통 게임에서 슬로우 모션을 구현하는데 사용됩니다.
Scene1에서 Scene2로는 넘어가지는데 다음단계로는 넘어갈수가 없습니다 해결방법이 있을까요?
매개 변수로 다른씬 이름을 넣어주면 됩니다.
로딩씬을 하나만 만들고 여러개의 스테이지가 클리어 될때마다 로딩씬을 거치고 다음 스테이지로 이동되게 하는거는 어떻게 구현하면 될까요?ㅠ
예를 들어 스테이지 1 클리어 후 로딩씬으로 변경후 로딩후 스테이지 2 그리고 또 클리오시 로딩씬으로 거친후 스테이지3 이런식으로요
저혼자 스크립트로 만들어 봤는데도 에러나고 나와있는곳도 없어서 힘드네요ㅠ
어딘가에 플레이어의 클리어 상황을 저장하고 있다가 클리어 할 때마다 그 상황에 따라 다른 씬을 불러오게 하면 될 것 같습니다.
@@wergia 아하 감사합니다
@@wergia IEnumerator LoadScene() 문에서 스위치문을 이용하고싶은데 어떻게 해야할까요ㅠ 말씀하신대로 스테이지별로 스테이지올라갈때 마다 stage++; 스테이지를 올리고있는데 스위치 문으로 로딩창 거치고 스테이지로 넘어가구싶는데 너무 어렵습니다.
NullReferenceException: Object reference not set to an instance of an object
LoadingSceneController+d__4.MoveNext () (at Assets/Scripts/LoadingSceneController.cs:30)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at :0)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
LoadingSceneController:Start() (at Assets/Scripts/LoadingSceneController.cs:21) 이렇게 뜨면서 멈춰버립니다 ㅠㅠ 저 30줄에는 op.allowSceneActivation = false;가 있는데 뭐가문제 일까요?
답변부탁드립니다 ㅠㅠ
전체코드입니다
public class LoadingSceneController : MonoBehaviour
{
static string nextScene;
[SerializeField]
Image progressbar;
public static void LoadScene(string SceneName)
{
nextScene = SceneName;
SceneManager.LoadScene("LoadingScene");
}
// Start is called before the first frame update
void Start()
{
StartCoroutine(LoadSceneProcess());
}
IEnumerator LoadSceneProcess()
{
AsyncOperation op = SceneManager.LoadSceneAsync(nextScene);
op.allowSceneActivation = false;
float timer = 0f;
while (!op.isDone)
{
yield return null;
if(op.progress < 0.9f)
{
progressbar.fillAmount = op.progress;
}
else
{
timer += Time.unscaledDeltaTime;
progressbar.fillAmount = Mathf.Lerp(0.9f,1f,timer);
if (progressbar.fillAmount > 1f)
{
op.allowSceneActivation = true;
yield break;
}
}
}
}
}
@@소환사자리비움 NullReferenceException이라는 오류는 사용하려는 오브젝트가 null, 즉 존재하지 않을 때 발생하는 오류입니다.
그리고 at Assets/Scripts/LoadingSceneController.cs:30, 코드의 30번째 줄에서 오류가 났다고 표시하고 있네요.
보여주신 코드로는 30번째 줄이 정확히 어디인지 찾기가 어렵긴하지만 대강 흐름을 유추해보면 progressbar.fillAmount = op.progress;에서 난 오류가 아닐까 싶습니다.
앞에서 op를 사용하는 부분은 무사히 지나갔으니 op 오브젝트 쪽은 아닐테고 progressbar 오브젝트 문제겠네요.
에디터의 하이어라키 뷰에서 progressbar 프로퍼티가 비어있지 않은지 확인해주세요.
@@wergia 어 아니요 오류가 난 30번째줄은 op.allowSceneActivation = false 입니다 ㅠㅠ
@@소환사자리비움 음 그럼 SceneManager.LoadSceneAsync(nextScene) 함수에서 op를 제대로 반환하지 않았다는 뜻이네요.
매개변수로 전달해주는 nextScene에 씬 이름이 제대로 들어갔는지, 오타는 없는지 확인해보시고 여기에 문제가 없다면, 빌드 세팅 창을 열어서 씬을 등록했는지 확인해봐야 할 것 같아요!
@@wergia 확인해보겠습니다!
로딩바 파일이 없어졌나요? 깃헙으로 들어가보면 404가 뜨네요 ㅠㅠ
링크가 깨졌네요! 다시 올렸습니다!
@@wergia 헐.. 감사합니다 ㅠㅠ
스크립트를 넣어도 Progress bar 가 안보이면 어떻게 하나요?? ㅠㅠㅠㅠ
프로그레스 바가 안보인다는 뜻은 정확히 어떤 의미인가요?
1. 프로그레스 바 이미지가 안보인다.
2. 로딩으로 프로그레스 바가 차오르는 모습이 안보이고 멈췄다가 바로 다음 씬으로 넘어가 버린다.
3. 기타
어떤 방식으로 안보이는 건지 설명해주시면 좀 더 자세한 설명이 가능할 것 같아요!
@@wergia
8:30 초에 캔버스에 스크립트 작성한것을 넣을때 스크립트 넣으면 나오는 progress bar 요! 저는 그게 안나오더라구요 ㅠ
@@Yesline-700 인스펙터 뷰에서 보이는 Progress Bar 프로퍼티가 안보이신다는 거군요!
여기에는 여러가지 원인이 있을 수 있습니다.
1. 코드에 에러가 있으면 코드가 수정되기 전까지 수정한 프로퍼티가 바로 보이지 않습니다. 콘솔창에 빨간 느낌표로 표시된 에러가 있나요? 있다면 코드의 에러를 제거해야 합니다.
2. Image progressBar 변수를 private으로 설정한 경우입니다.
private Image progressBar;
와 같이 변수를 private으로 선언하면 컴포넌트의 변수는 인스펙터 뷰에서 보이지 않게 됩니다.
그럴 때는 두 가지 방법이 있는데
public Image progressBar;
처럼 변수를 public으로 선언하는 방법이 첫 번째고
[SerializedField] private Image progressBar;
처럼 변수 앞에서 SerializedField 어트리뷰트를 추가해주는 것입니다. SerializedField 어트리뷰트를 사용하면 변수를 private으로 유지한 채로 인스펙터 뷰에서 보이게 할 수 있습니다.
if(op.progress < 0.9)로 해버리니까 allowSceneActivation = false; 때문에 90퍼 까지 실행해서 if문을 벗어나지 못하네요.. 0.9보다 낮은 값(0.89) 넣으니까 되네여.
allowSceneActivation = false;를 하면 씬 로딩을 90%까지만 진행합니다.
그렇기 때문에 조건문에서
if(op.progress < 0.9) -> 0.9f
진행 상태가 0.9보다 작은 동안에는 progress 값으로 로딩 바 이미지의 fillAmount를 채우는 작업을 진행하고 90%가 되는 순간부터 아래 else 구문이 동작하도록 되어있습니다.
직접 작성한 코드를 알려주시면 분석해볼 수 있겠네요!
@@wergia
IEnumerator LoadSceneProcess()
{
AsyncOperation op = SceneManager.LoadSceneAsync(nextScene);
op.allowSceneActivation = false;
while(!op.isDone)
{
Debug.Log("while");
yield return null;
if(op.progress < 0.9)
{
Debug.Log("0.9");
progressBar.fillAmount = op.progress;
}
else
{
Debug.Log("0.9 이후");
timer += Time.unscaledDeltaTime;
progressBar.fillAmount = Mathf.Lerp(0.9f, 1f, timer);
if(progressBar.fillAmount >= 1f)
{
op.allowSceneActivation = true;
yield break;
}
}
}
}
이렇게 했더니 fillAmount가 0.9에서 계속 if문 무한루프 빠졌습니다!!
if(op.progress < 0.89)
이렇게 바꾸면 제대로 동작해여..
@@뚜쉬이 아 문제를 찾았네요!
if(op.progress < 0.9) 이 코드에서 0.9라고 쓰셨는데 0.9f로 써주셔야 제대로 비교가 됩니다.
프로그래밍에서 0.9와 0.9f는 다른 타입이기 때문에 비교가 제대로 되지 않을 거에요.
@@wergia 헉!! 바꿔서 하니까 제대로 동작하네요..!! 감사합니다!!
👍👍👍👍👍❤
이것이 1년 전 영상인 것은 알지만 그럼에도 한 가지 여쭙고 싶은 것이 있습니다.
이 로딩 씬을 활용하여 게임 첫 실행 시 불러오기 하면서 무결성 검사하는 씬을 만들 수 있습니까?
제가 구현하고 싶은 것은 게임 첫 실행 시 게임이 손상되거나 불법 변조 되지 않았는지 무결성 검사를 실행한 뒤 문제가 없으면 게임을 로딩하여 다음 씬으로 넘어가도록 하는 것입니다.
이것은 참고 이미지입니다.
drive.google.com/file/d/1b4nqdUxfP9NvG1POSA0DFFE1WJZldp0o/view?usp=sharing
저는 이 씬에서 좀 더 그럴 듯하게 보이기 위해 한 캔버스에 두 개의 로딩 바를 만들었으며, 하나는 현재 작업에 대한 진행도, 다른 하나는 전체 작업 진행도를 나타냅니다.
추가적으로 기능을 붙여야하지만 가능합니다.
time.unscaleddeltatime 이게 먼가여? 첨보는데.. 검색해도 몬소린지 모르겟....글고 저기에 그냥 젤 많이 쓰는 time.deltatime 곱하면 안되나여?
Unscaled Delta Time은 단어 그대로 크기가 조정되지 않은 델타 타임입니다.
유니티에서는 Time Scale이라는 요소가 있는데 이 time scale을 조절하면 1일 때는 현실과 같은 속도로, 1보다 작으면 현실보다 느리게, 1보다 크면 현실보다 빠르게 시간이 흐르게 됩니다. 이 Time scale에 DeltaTime이 영향을 받아서 시간이 느리거나 빠르게 흘러가는 효과를 줄 수 있습니다.
하지만 이 time scale에 영향을 받지 않고 움직여야 하는 요소 역시 게임에 존재할 수 있는데 이때 그 영향을 받지 않는 값이 Unscaled Delta Time 입니다.