141 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			141 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using UnityEngine; | |||
|  | using UnityEngine.Events; | |||
|  | 
 | |||
|  | [RequireComponent(typeof(Animator)), DisallowMultipleComponent] | |||
|  | public sealed class AnimationEventReceiver : MonoBehaviour { | |||
|  | 
 | |||
|  |     [SerializableAttribute] | |||
|  |     private class FilenameArray { | |||
|  |         [SerializeField] | |||
|  |         private string[] stringArray = default; | |||
|  |         public string GetRandom(){ | |||
|  |             return stringArray.RandomChoose(); | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     [SerializeField] | |||
|  |     private int randomIntMin = 0; | |||
|  |     [SerializeField] | |||
|  |     private int randomIntMax = 0; | |||
|  | 
 | |||
|  |     [SerializeField] | |||
|  |     private FilenameArray[] randomPlaySEFilenames = default; | |||
|  |     [SerializeField] | |||
|  |     private FilenameArray[] randomPlayVoiceFilenames = default; | |||
|  | 
 | |||
|  |     public UnityEvent onEvent1 = default; | |||
|  |     public UnityEvent onEvent2 = default; | |||
|  |     public UnityEvent onEvent3 = default; | |||
|  | 
 | |||
|  |     [SerializeField] | |||
|  |     private UnityEvent[] eventArray = default; | |||
|  | 
 | |||
|  |     private Animator animator; | |||
|  |     private int randomIntHash = Animator.StringToHash("RandomInt"); | |||
|  | 
 | |||
|  |     void Awake(){ | |||
|  |         animator = GetComponent<Animator>(); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void OnEvent1(){ | |||
|  |         try{ | |||
|  |             onEvent1.Invoke(); | |||
|  |         }catch(IndexOutOfRangeException e){ | |||
|  |             string path = this.gameObject.name; | |||
|  |             Transform parent = this.transform.parent; | |||
|  |             while(parent != null){ | |||
|  |                 path = parent.name + "/" + path; | |||
|  |                 parent = parent.parent; | |||
|  |             } | |||
|  |             throw new Exception(path + " " + e.ToString()); | |||
|  |         } | |||
|  |     } | |||
|  |     public void OnEvent2(){ | |||
|  |         onEvent2.Invoke(); | |||
|  |     } | |||
|  |     public void OnEvent3(){ | |||
|  |         onEvent3.Invoke(); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void OnEventArray(int index){ | |||
|  | #if UNITY_EDITOR | |||
|  |         if(index < 0){ | |||
|  |             Debug.LogError(string.Format("{0} の OnEventArray に0未満の数値を指定しないで下さい。", transform.GetPath())); | |||
|  |             UnityEditor.EditorApplication.isPlaying = false; | |||
|  |         }else if(index >= eventArray.Length){ | |||
|  |             Debug.LogError(string.Format("{0} の OnEventArray は {0} までしかありません", transform.GetPath(), eventArray.Length - 1)); | |||
|  |             UnityEditor.EditorApplication.isPlaying = false; | |||
|  |         } | |||
|  | #endif | |||
|  |         eventArray[index].Invoke(); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void OnRandomInt(){ | |||
|  |         animator.SetInteger(randomIntHash, UnityEngine.Random.Range(randomIntMin, randomIntMax)); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void OnPlaySE(string filename){ | |||
|  |         SoundManager.Instance.PlaySE(string.Format("Sounds/SE/{0}", filename)); | |||
|  |     } | |||
|  |     public void OnPlaySEMaxCount(AnimationEvent animationEvent){ | |||
|  |         string filename = animationEvent.stringParameter; | |||
|  |         int maxCount = animationEvent.intParameter; | |||
|  |         SoundManager.Instance.PlaySE(string.Format("Sounds/SE/{0}", filename), maxCount); | |||
|  |     } | |||
|  |     public void OnPlaySEVolume(AnimationEvent animationEvent){ | |||
|  |         string filename = animationEvent.stringParameter; | |||
|  |         float volume = animationEvent.floatParameter; | |||
|  |         SoundManager.Instance.PlaySE(string.Format("Sounds/SE/{0}", filename), 0, volume); | |||
|  |     } | |||
|  |     public void OnPlayRandomSE(int index){ | |||
|  |         if(randomPlaySEFilenames.Length <= index) return ; | |||
|  |         SoundManager.Instance.PlaySE(string.Format("Sounds/SE/{0}", randomPlaySEFilenames[index].GetRandom())); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void OnPlayVoice(string filename){ | |||
|  |         SoundManager.Instance.PlayVoice(string.Format("Sounds/VOICE/{0}", filename)); | |||
|  |     } | |||
|  |     public void OnPlayVoiceMaxCount(AnimationEvent animationEvent){ | |||
|  |         string filename = animationEvent.stringParameter; | |||
|  |         int maxCount = animationEvent.intParameter; | |||
|  |         SoundManager.Instance.PlayVoice(string.Format("Sounds/VOICE/{0}", filename), maxCount); | |||
|  |     } | |||
|  |     public void OnPlayVoiceVolume(AnimationEvent animationEvent){ | |||
|  |         string filename = animationEvent.stringParameter; | |||
|  |         float volume = animationEvent.floatParameter; | |||
|  |         SoundManager.Instance.PlayVoice(string.Format("Sounds/VOICE/{0}", filename), 0, volume); | |||
|  |     } | |||
|  |     public void OnPlayRandomVoice(int index){ | |||
|  |         if(randomPlayVoiceFilenames.Length <= index) return ; | |||
|  |         SoundManager.Instance.PlayVoice(string.Format("Sounds/VOICE/{0}", randomPlayVoiceFilenames[index].GetRandom())); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void OnPlayVibrationOnce(){ | |||
|  |         VibrationManager.Instance.PlayVibrationOnce(); | |||
|  |     } | |||
|  |     public void OnPlayVibrationOnceStrong(){ | |||
|  |         VibrationManager.Instance.PlayVibrationOnceStrong(); | |||
|  |     } | |||
|  |     public void OnPlayVibrationOnceWeak(){ | |||
|  |         VibrationManager.Instance.PlayVibrationOnceWeak(); | |||
|  |     } | |||
|  |     public void OnPlayVibrationDoubleStrong(){ | |||
|  |         VibrationManager.Instance.PlayVibrationDoubleStrong(); | |||
|  |     } | |||
|  |     public void OnPlayVibrationDoubleWeak(){ | |||
|  |         VibrationManager.Instance.PlayVibrationDoubleWeak(); | |||
|  |     } | |||
|  |     public void OnPlayVibrationTriple(){ | |||
|  |         VibrationManager.Instance.PlayVibrationTriple(); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void DestroyObject(){ | |||
|  |         Destroy(gameObject); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void DisableObject(){ | |||
|  |         gameObject.SetActive(false); | |||
|  |     } | |||
|  | } |