/// <summary> /// クリック成立時 /// </summary> public void OnPointerClick(PointerEventData eventData) { //クリック成立した指番号をリストから除去 if (this.pointerIdList.Remove(eventData.pointerId)) { //最後の指の時だけクリック成立 if (this.pointerIdList.Count == 0) { //長押し判定の中断 StopAllCoroutines(); //クリック成立(1フレームだけ通知) this.state |= State.Click; this.state &= ~State.Pressing; StartCoroutine(CoroutineUtility.WaitForEndOfFrameAction(() => { this.state = State.None; })); //イベント実行 if (this.onClick != null) { this.onClick.Invoke(); } if (!this.isLong) { if (this.onShortClick != null) { this.onShortClick.Invoke(); } } else { if (this.onLongClick != null) { this.onLongClick.Invoke(); } } } } }
/// <summary> /// ボタンの範囲外に出た時 /// </summary> public void OnPointerExit(PointerEventData eventData) { //何も管理していないのでreturn if (this.pointerIdList.Count == 0) return; //マウスの場合-1しか来ない if (eventData.pointerId == -1) { //管理している指番号を全部除去 this.pointerIdList.Clear(); } //マウス以外の場合 else { //範囲外に出た指番号をリストから除去 this.pointerIdList.Remove(eventData.pointerId); } //全ての指がボタンの範囲外に出た if (this.pointerIdList.Count == 0) { //長押し判定の中断 StopAllCoroutines(); //キャンセル発生(1フレームだけ通知) this.state = State.Cancel; StartCoroutine(CoroutineUtility.WaitForEndOfFrameAction(() => { this.state = State.None; })); //イベント実行 if (this.onCancel != null) { this.onCancel.Invoke(); } } }
/// <summary> /// シーンアセットバンドルの読み込み /// </summary> /// <param name="assetBundleName">アセットバンドル名</param> /// <param name="onLoad">読み込み完了時コールバック</param> public void LoadScenePaths(string assetBundleName, Action <string[]> onLoad = null) { if (!this.CheckAssetBundleExists(assetBundleName)) { onLoad.SafetyInvoke(null); return; } AssetBundleOperation data = this.resourceList[assetBundleName]; var assetOperation = data.FindAssetOperation <SceneAssetOperation>(); //初めての読み込み if (assetOperation == null) { //アセット管理データさくせい assetOperation = new SceneAssetOperation(onLoad); data.AddAssetOperation(assetOperation); //読み込み開始 this.UpdateAssetBundleOperation(data); } //ロード済み else if (assetOperation.GetStatus() == AssetOperationBase.Status.isLoaded) { //1フレーム後にコールバック実行 StartCoroutine(CoroutineUtility.WaitForFrameAction(1, () => { onLoad.SafetyInvoke(assetOperation.GetAllScenePaths()); })); } //ロード中 else { //コールバック追加 assetOperation.AddCallBack(onLoad); } }
/// <summary> /// サブアセット読み込み /// </summary> /// <param name="assetBundleName">アセットバンドル名</param> /// <param name="assetName">読み込むアセット名</param> /// <param name="onLoad">読み込み完了時コールバック</param> public void LoadSubAssets <T>(string assetBundleName, string assetName, Action <T[]> onLoad = null) where T : UnityEngine.Object { if (!this.CheckAssetBundleExists(assetBundleName)) { onLoad.SafetyInvoke(null); return; } var data = this.resourceList[assetBundleName]; var assetOperation = data.FindAssetOperation <SubAssetsOperation <T> >(assetName); //初めての読み込み if (assetOperation == null) { //アセット管理データ作成 assetOperation = new SubAssetsOperation <T>(assetName, onLoad); data.AddAssetOperation(assetOperation); //読み込み開始 this.UpdateAssetBundleOperation(data); } //ロード済み else if (assetOperation.GetStatus() == AssetOperationBase.Status.isLoaded) { //1フレーム後にコールバック実行 StartCoroutine(CoroutineUtility.WaitForFrameAction(1, () => { onLoad.SafetyInvoke(assetOperation.GetAllAssets()); })); } //ロード中 else { //コールバック追加 assetOperation.AddCallBack(onLoad); } }