Пример #1
0
    /// <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();
    }