/// <summary> /// 折った状態紙を開く「基に戻る」 /// </summary> /// <param name="center"></param> /// <returns></returns> IEnumerator Unfolding(float center) { //Debug.Log("CenterPoint " + centerPoint); //Debug.Log("Paper Width " + paperWidth); //Debug.Log("Paper Height " + paperHeight); //Debug.Log("Dir" + dir); //Debug.Log("Degree = " + degree); objectGenerator.GenerateDuplicate(centerPoint, dir, paperHeight, paperWidth); // 音が鳴らせる bool soundDebug = playSystem.GetComponent <PlaySystem>().GetSoundDebug(); if (!soundDebug) { SoundManager.Instance.Play_FoldSE(); } switch (dir) { case Side.LEFT: while (degree <= 0) { for (int id = 0; id < vertices.Length; id++) { if (vertices[id].z == 0) { continue; } vertices[id].x = Mathf.Sqrt(Mathf.Pow((originalVert[id].x - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * -Mathf.Cos(degree * Mathf.Deg2Rad) + center; vertices[id].z = Mathf.Sqrt(Mathf.Pow((originalVert[id].x - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * Mathf.Sin(degree * Mathf.Deg2Rad) + 0; mesh.vertices = vertices; } degree += 36; // ゲームがポーズされたら while (playSystem.GetMenuPauseFlag()) { yield return(null); } yield return(new WaitForSeconds(.1f)); } break; case Side.RIGHT: while (degree >= 0) { for (int id = 0; id < vertices.Length; id++) { if (vertices[id].z == 0) { continue; } vertices[id].x = Mathf.Sqrt(Mathf.Pow((originalVert[id].x - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * Mathf.Cos(degree * Mathf.Deg2Rad) + center; vertices[id].z = Mathf.Sqrt(Mathf.Pow((originalVert[id].x - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * -Mathf.Sin(degree * Mathf.Deg2Rad) + 0; mesh.vertices = vertices; } degree -= 36; // ゲームがポーズされたら while (playSystem.GetMenuPauseFlag()) { yield return(null); } yield return(new WaitForSeconds(0.1f)); } break; case Side.BOTTOM: while (degree >= 0) { for (int id = 0; id < vertices.Length; id++) { if (vertices[id].z == 0) { continue; } vertices[id].y = Mathf.Sqrt(Mathf.Pow((originalVert[id].y - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * -Mathf.Cos(degree * Mathf.Deg2Rad) + center; vertices[id].z = Mathf.Sqrt(Mathf.Pow((originalVert[id].y - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * -Mathf.Sin(degree * Mathf.Deg2Rad) + 0; mesh.vertices = vertices; } degree -= 36; // ゲームがポーズされたら while (playSystem.GetMenuPauseFlag()) { yield return(null); } yield return(new WaitForSeconds(0.1f)); } break; case Side.UP: while (degree <= 0) { for (int id = 0; id < vertices.Length; id++) { if (vertices[id].z == 0) { continue; } vertices[id].y = Mathf.Sqrt(Mathf.Pow((originalVert[id].y - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * Mathf.Cos(degree * Mathf.Deg2Rad) + center; vertices[id].z = Mathf.Sqrt(Mathf.Pow((originalVert[id].y - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * Mathf.Sin(degree * Mathf.Deg2Rad) + 0; mesh.vertices = vertices; } degree += 36; // ゲームがポーズされたら while (playSystem.GetMenuPauseFlag()) { yield return(null); } yield return(new WaitForSeconds(.1f)); } break; } // 折りサイドを最初の状態に戻す。 isFolding = false; dir = Side.NONE; centerPoint = -1; degree = 0; if (objectGenerator.GetDupList().Count > 0) { foreach (GameObject x in objectGenerator.GetDupList()) { x.GetComponent <Rigidbody2D>().bodyType = RigidbodyType2D.Dynamic; } } objectGenerator.ClearDuplicatedObjList(); }