/** ******************************************************************************** * @summary 読み込み処理 ***********************************************************************************/ public T GetPrefab() { var status = loadedLists.FirstOrDefault(l => !l.isUsing); if (null != status) { if (null != status.prefab) { status.prefab.gameObject.SetActive(true); status.isUsing = true; } else { loadedLists.Remove(status); return(GetPrefab()); } } else { var prefab = Instantiate(this) as T; prefab.name = string.Format("{0}({1})", GetType(), loadedLists.Count); prefab.origin = this as T; status = new PrefabStatus(prefab, true); loadedLists.Add(status); } return(status.prefab); }
/// <summary> /// ブロック生成コルーチン /// ブロック生成基準時間を生成カウントが越したときに呼び出される /// </summary> /// <param name="ToPosition">ブロック群の移動先Position</param> /// <returns>コルーチン</returns> private IEnumerator MoveBlocks(Vector3 ToPosition, PrefabStatus fab) { float IncrementTime = 0.0f; float Progress = 0.0f; // ブロック生成可能フラグがONだったら // ブロック生成基準時間を生成カウントが越したときにONになる while (CanBlockCreate) { // 時間になったらいまある"Block"を下に移動させて while (Progress < 1.0f) { // ほかのブロックを下に移動させる関数 Vector3 NewPos = Vector3.Lerp(BlockParent.transform.position, ToPosition, Progress); // Progressの変動値代入 // 確定した移動ポイントへ移動 Progress = MoveToDecidedPoint(IncrementTime, NewPos, out float IncrementTimeWork); IncrementTime = IncrementTimeWork; yield return(null); } // Progressのリセット Progress = 0.0f; IncrementTime = 0.0f; fab.SetIsActive(true); yield return(null); } yield return(null); }
/** ******************************************************************************** * @summary 読み込み処理 ***********************************************************************************/ public void Load(Transform trans, int num, bool isUsing = false) { for (int i = 0; i < num; i++) { T tmp = Instantiate(this) as T; tmp.transform.SetParent(trans); tmp.origin = this as T; var status = new PrefabStatus(tmp, isUsing); loadedLists.Add(status); } this.parentObj = trans; }
/// <summary> /// 移動先Positionの決定 /// </summary> /// <param name="ToPosition">コルーチンにおける移動先ポイント</param> private PrefabStatus DecideMovePoint(out Vector3 ToPosition) { // 生成可能フラグON CanBlockCreate = true; PrefabStatus fab = null; // PrefabのBlocksを一番上の座標に生成する var GetPrefab = Instantiate(NewBlock, BlockParent.transform, true); fab = GetPrefab.GetComponent <PrefabStatus>();//.Initialized(this); // 生成したブロックの移動先決定 ToPosition = BlockParent.transform.position; ToPosition.y -= 0.45f; return(fab); }