【Unity】버튼을 누르면 장면 천이하는 구현을 간단하게 만들 수 있는 SceneController의 소개
개요
버튼을 누르면 씬 천이 하는 구현으로 매번 사용하고 있는 SceneController 컴퍼넌트를 소개합니다.
설명
버튼의 UnityEvent 등으로 LoadScene() 등의 함수를 추가해 사용합니다.
품목
설명
ProcessOnAwake
이 컴퍼넌트가 최초로 유효하게 되었을 때에 실행하는 처리
SceneName
대상 장면 이름
Delay
실행하는 데 걸리는 시간
Public 함수
설명
LoadScene()
[Delay]초 후 [SceneName]로 전환
LoadScene(float)
[float]초 후 [SceneName]로 전환
LoadScene(string)
[Delay]초 후 [string]으로 전환
LoadAddScene()
[Delay]초 후 [SceneName] 추가
LoadAddScene(float)
[float]초 후 [SceneName] 추가
LoadAddScene(string)
[Delay]초 후 [string] 추가
UnloadScene()
[Delay]초 후 [SceneName] 파기
UnloadScene(float)
[float]초 후 [SceneName] 파기
UnloadScene(string)
[Delay]초 후 [string] 파기
코드
SceneController.csusing System;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneController : MonoBehaviour
{
enum ProcessOnAwake
{
None,
LoadScene,
AddScene,
UnloadScene
}
[SerializeField] ProcessOnAwake processOnAwake;
[SerializeField] string sceneName;
[SerializeField] float delay;
private void Start()
{
switch (processOnAwake)
{
case ProcessOnAwake.LoadScene: LoadScene(); break;
case ProcessOnAwake.AddScene: LoadAddScene(); break;
case ProcessOnAwake.UnloadScene: UnloadScene(); break;
}
}
/// <summary>
/// シーン移動
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void LoadScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void LoadScene(string sceneName) => LoadScene(sceneName, delay);
public void LoadScene(float delay) => LoadScene(sceneName, delay);
public void LoadScene() => LoadScene(sceneName, delay);
/// <summary>
/// シーン追加
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void LoadAddScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void LoadAddScene(string sceneName) => LoadAddScene(sceneName, delay);
public void LoadAddScene(float delay) => LoadAddScene(sceneName, delay);
public void LoadAddScene() => LoadAddScene(sceneName, delay);
/// <summary>
/// シーン破棄
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void UnloadScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.UnloadSceneAsync(sceneName);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void UnloadScene(string sceneName) => UnloadScene(sceneName, delay);
public void UnloadScene(float delay) => UnloadScene(sceneName, delay);
public void UnloadScene() => UnloadScene(sceneName, delay);
/// <summary>
/// 遅延処理
/// </summary>
/// <param name="second">遅延時間</param>
/// <param name="action">処理内容</param>
/// <returns></returns>
private IEnumerator DelayedCall(float second, Action action)
{
yield return new WaitForSeconds(second);
action.Invoke();
}
}
Reference
이 문제에 관하여(【Unity】버튼을 누르면 장면 천이하는 구현을 간단하게 만들 수 있는 SceneController의 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yamara/items/6744477a499a68e38476
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
버튼의 UnityEvent 등으로 LoadScene() 등의 함수를 추가해 사용합니다.
품목
설명
ProcessOnAwake
이 컴퍼넌트가 최초로 유효하게 되었을 때에 실행하는 처리
SceneName
대상 장면 이름
Delay
실행하는 데 걸리는 시간
Public 함수
설명
LoadScene()
[Delay]초 후 [SceneName]로 전환
LoadScene(float)
[float]초 후 [SceneName]로 전환
LoadScene(string)
[Delay]초 후 [string]으로 전환
LoadAddScene()
[Delay]초 후 [SceneName] 추가
LoadAddScene(float)
[float]초 후 [SceneName] 추가
LoadAddScene(string)
[Delay]초 후 [string] 추가
UnloadScene()
[Delay]초 후 [SceneName] 파기
UnloadScene(float)
[float]초 후 [SceneName] 파기
UnloadScene(string)
[Delay]초 후 [string] 파기
코드
SceneController.csusing System;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneController : MonoBehaviour
{
enum ProcessOnAwake
{
None,
LoadScene,
AddScene,
UnloadScene
}
[SerializeField] ProcessOnAwake processOnAwake;
[SerializeField] string sceneName;
[SerializeField] float delay;
private void Start()
{
switch (processOnAwake)
{
case ProcessOnAwake.LoadScene: LoadScene(); break;
case ProcessOnAwake.AddScene: LoadAddScene(); break;
case ProcessOnAwake.UnloadScene: UnloadScene(); break;
}
}
/// <summary>
/// シーン移動
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void LoadScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void LoadScene(string sceneName) => LoadScene(sceneName, delay);
public void LoadScene(float delay) => LoadScene(sceneName, delay);
public void LoadScene() => LoadScene(sceneName, delay);
/// <summary>
/// シーン追加
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void LoadAddScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void LoadAddScene(string sceneName) => LoadAddScene(sceneName, delay);
public void LoadAddScene(float delay) => LoadAddScene(sceneName, delay);
public void LoadAddScene() => LoadAddScene(sceneName, delay);
/// <summary>
/// シーン破棄
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void UnloadScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.UnloadSceneAsync(sceneName);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void UnloadScene(string sceneName) => UnloadScene(sceneName, delay);
public void UnloadScene(float delay) => UnloadScene(sceneName, delay);
public void UnloadScene() => UnloadScene(sceneName, delay);
/// <summary>
/// 遅延処理
/// </summary>
/// <param name="second">遅延時間</param>
/// <param name="action">処理内容</param>
/// <returns></returns>
private IEnumerator DelayedCall(float second, Action action)
{
yield return new WaitForSeconds(second);
action.Invoke();
}
}
Reference
이 문제에 관하여(【Unity】버튼을 누르면 장면 천이하는 구현을 간단하게 만들 수 있는 SceneController의 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yamara/items/6744477a499a68e38476
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneController : MonoBehaviour
{
enum ProcessOnAwake
{
None,
LoadScene,
AddScene,
UnloadScene
}
[SerializeField] ProcessOnAwake processOnAwake;
[SerializeField] string sceneName;
[SerializeField] float delay;
private void Start()
{
switch (processOnAwake)
{
case ProcessOnAwake.LoadScene: LoadScene(); break;
case ProcessOnAwake.AddScene: LoadAddScene(); break;
case ProcessOnAwake.UnloadScene: UnloadScene(); break;
}
}
/// <summary>
/// シーン移動
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void LoadScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void LoadScene(string sceneName) => LoadScene(sceneName, delay);
public void LoadScene(float delay) => LoadScene(sceneName, delay);
public void LoadScene() => LoadScene(sceneName, delay);
/// <summary>
/// シーン追加
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void LoadAddScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void LoadAddScene(string sceneName) => LoadAddScene(sceneName, delay);
public void LoadAddScene(float delay) => LoadAddScene(sceneName, delay);
public void LoadAddScene() => LoadAddScene(sceneName, delay);
/// <summary>
/// シーン破棄
/// </summary>
/// <param name="sceneName">シーン名</param>
/// <param name="delay">遅延時間</param>
public void UnloadScene(string sceneName, float delay)
{
AsyncOperation operation = SceneManager.UnloadSceneAsync(sceneName);
operation.allowSceneActivation = false;
StartCoroutine(DelayedCall(delay, () => operation.allowSceneActivation = true));
}
public void UnloadScene(string sceneName) => UnloadScene(sceneName, delay);
public void UnloadScene(float delay) => UnloadScene(sceneName, delay);
public void UnloadScene() => UnloadScene(sceneName, delay);
/// <summary>
/// 遅延処理
/// </summary>
/// <param name="second">遅延時間</param>
/// <param name="action">処理内容</param>
/// <returns></returns>
private IEnumerator DelayedCall(float second, Action action)
{
yield return new WaitForSeconds(second);
action.Invoke();
}
}
Reference
이 문제에 관하여(【Unity】버튼을 누르면 장면 천이하는 구현을 간단하게 만들 수 있는 SceneController의 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yamara/items/6744477a499a68e38476텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)