62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.Collections.Generic; | |||
|  | 
 | |||
|  | public class BackButtonManager : SingletonMonoBehaviour<BackButtonManager> { | |||
|  | 
 | |||
|  |     private Stack<Action<bool>> backActionStack = new Stack<Action<bool>>(); | |||
|  |     private bool isEnable = true; | |||
|  |     public void SetEnable(){ | |||
|  |         isEnable = true; | |||
|  |     } | |||
|  |     public void SetDisable(){ | |||
|  |         isEnable = false; | |||
|  |     } | |||
|  | 
 | |||
|  | #if UNITY_ANDROID || UNITY_EDITOR | |||
|  |     private Action genericBackAction = ActionExtensions.EmptyAction; | |||
|  | 
 | |||
|  |     void Update(){ | |||
|  |         if(isEnable && UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.Escape)){ | |||
|  |             if(backActionStack.Count > 0){ | |||
|  |                 PopAction(true); | |||
|  |             }else{ | |||
|  |                 genericBackAction(); | |||
|  |             } | |||
|  |             return; | |||
|  |         } | |||
|  |     } | |||
|  | #endif | |||
|  | 
 | |||
|  |     public void SetGenericAction(Action action){ | |||
|  | #if UNITY_ANDROID || UNITY_EDITOR | |||
|  |         genericBackAction = action; | |||
|  | #endif | |||
|  |     } | |||
|  | 
 | |||
|  |     public void SetAction(Action action){ | |||
|  |         SetAction(isPressedBackButton => action()); | |||
|  |     } | |||
|  |     public void SetAction(Action<bool> action){ | |||
|  |         backActionStack.Push(action); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void PopAction(){ | |||
|  |         PopAction(false); | |||
|  |     } | |||
|  |     private void PopAction(bool isPressedBackButton){ | |||
|  |         // Dialog等UnloadSceneAsync中に行うとエラーが出るので握り潰し | |||
|  |         try{ | |||
|  |             backActionStack.Pop()(isPressedBackButton); | |||
|  |         }catch(Exception){ | |||
|  |         } | |||
|  |     } | |||
|  |     public void DestroyOneAction(){ | |||
|  |         if(backActionStack.Count > 0){ | |||
|  |             backActionStack.Pop(); | |||
|  |         } | |||
|  |     } | |||
|  |     public void DestroyAllAction(){ | |||
|  |         backActionStack.Clear(); | |||
|  |     } | |||
|  | } |