コード例 #1
0
        /// <summary>
        /// 遅延実行
        /// 指定したフレーム数waitします
        /// キャンセル処理をしたい場合は戻り値のIDを引数にしてCancelメソッドを実行してください
        /// </summary>
        public static int ExecuteFrameDelay(int delayFrame, Action action, MonoBehaviour invoker)
        {
            if (invoker == null || invoker.isActiveAndEnabled == false)
            {
                return(-1);
            }

            var data = new DelayedCallData(delayFrame, action, invoker);

            _delayedCallDataList.Add(data);
            data.coroutine = invoker.StartCoroutine(_Execute(data));
            return(data.id);
        }
コード例 #2
0
        private static IEnumerator _Execute(DelayedCallData data)
        {
            if (data.type == WaitType.FRAME)
            {
                yield return(new WaitForFrameCount(data.frameDelay));
            }
            else
            {
                yield return(new WaitForSeconds(data.delay));
            }

            if (data.invoker != null)
            {
                data.action.SafeInvoke();
            }

            _delayedCallDataList.Remove(data);
        }