Ejemplo n.º 1
0
        static void Hoop(Vector3[,] cornerPos, float bandD, int index, GameObject parent)
        {
            // メッシュ結合用に親のオブジェクト作成
            var hoops = new GameObject("Hoops");

            hoops.transform.parent = parent.transform;

            float          pitch    = STBReader._secColumnRC.BarList[index][5] / 1000f;
            int            dirXNum  = STBReader._secColumnRC.BarList[index][6];
            int            dirYNum  = STBReader._secColumnRC.BarList[index][7];
            int            sumBar   = dirXNum + dirYNum;
            float          distance = Vector3.Distance(cornerPos[0, 0], cornerPos[1, 0]);
            List <Vector3> vertex   = new List <Vector3>();
            int            i        = 0;


            Vector3[,] hoopPos = GetBandPos(cornerPos, dirXNum, dirYNum);

            while ((pitch * i) / distance < 1)
            {
                for (int j = 0; j < 2 * sumBar; j++)
                {
                    vertex.Add(Vector3.Lerp(hoopPos[0, j], hoopPos[1, j], (float)(pitch * i) / distance));
                }
                for (int j = 0; j < sumBar; j++)
                {
                    Mesh       meshObj = CreateMesh.Pipe(vertex[2 * j + (i * 2 * sumBar)], vertex[2 * j + 1 + (i * 2 * sumBar)], bandD / 2f, 12, true);
                    GameObject element = new GameObject("hoop");
                    element.AddComponent <MeshFilter>().mesh       = meshObj;
                    element.AddComponent <MeshRenderer>().material = new Material(Shader.Find("Standard"))
                    {
                        color = new Color(1, 0, 1, 1)
                    };
                    element.transform.parent = hoops.transform;
                }
                i++;
            }

            // ドローコール削減のため、作成したフープを一つのメッシュに結合
            var color = new Color(1, 0, 1, 1);

            CreateMesh.Conbine(hoops, color, "Standard");
        }
Ejemplo n.º 2
0
        static void BeamMainBar(Vector3[,] main1Pos, Vector3[,] main2Pos, Vector3[,] main3Pos, float barSpace, float mainD, int index, GameObject parent)
        {
            // メッシュ結合用に親のオブジェクト作成
            var mainBars = new GameObject("MainBars");

            mainBars.transform.parent = parent.transform;

            int[]          mainBarNum = GetBeamMainNum(index);
            bool[]         hasMain    = new bool[6]; // {Main1_Top, Main1_bottom, Main2_Top, Main2_bottom, Main3_Top, Main3_bottom}
            float          distance   = Vector3.Distance(main1Pos[0, 1], main1Pos[0, 2]);
            int            barCount   = 0;
            List <Vector3> vertex     = new List <Vector3>();

            for (int i = 0; i < 5; i++)
            {
                if (mainBarNum[i] > 1)
                {
                    hasMain[i] = true;
                }
                else
                {
                    hasMain[i] = false;
                }
            }

            if (hasMain[0])
            {
                float posRatio = 1f / (mainBarNum[0] - 1);

                for (int j = 0; j < mainBarNum[0]; j++)
                {
                    vertex.Add(Vector3.Lerp(main1Pos[0, 1], main1Pos[0, 2], posRatio * j));
                    vertex.Add(Vector3.Lerp(main1Pos[1, 1], main1Pos[1, 2], posRatio * j));
                    barCount++;
                }
            }
            if (hasMain[1])
            {
                float posRatio = 1f / (mainBarNum[1] - 1);

                for (int j = 0; j < mainBarNum[1]; j++)
                {
                    vertex.Add(Vector3.Lerp(main1Pos[0, 3], main1Pos[0, 4], posRatio * j));
                    vertex.Add(Vector3.Lerp(main1Pos[1, 3], main1Pos[1, 4], posRatio * j));
                    barCount++;
                }
            }
            if (hasMain[2])
            {
                float posRatio = 1f / (mainBarNum[2] - 1);

                for (int j = 0; j < mainBarNum[2]; j++)
                {
                    vertex.Add(Vector3.Lerp(main2Pos[0, 1], main2Pos[0, 2], posRatio * j));
                    vertex.Add(Vector3.Lerp(main2Pos[1, 1], main2Pos[1, 2], posRatio * j));
                    barCount++;
                }
            }
            if (hasMain[3])
            {
                float posRatio = 1f / (mainBarNum[3] - 1);

                for (int j = 0; j < mainBarNum[3]; j++)
                {
                    vertex.Add(Vector3.Lerp(main2Pos[0, 3], main2Pos[0, 4], posRatio * j));
                    vertex.Add(Vector3.Lerp(main2Pos[1, 3], main2Pos[1, 4], posRatio * j));
                    barCount++;
                }
            }
            if (hasMain[4])
            {
                float posRatio = 1f / (mainBarNum[4] - 1);

                for (int j = 0; j < mainBarNum[4]; j++)
                {
                    vertex.Add(Vector3.Lerp(main3Pos[0, 1], main3Pos[0, 2], posRatio * j));
                    vertex.Add(Vector3.Lerp(main3Pos[1, 1], main3Pos[1, 2], posRatio * j));
                    barCount++;
                }
            }
            if (hasMain[5])
            {
                float posRatio = 1f / (mainBarNum[5] - 1);

                for (int j = 0; j < mainBarNum[5]; j++)
                {
                    vertex.Add(Vector3.Lerp(main3Pos[0, 3], main3Pos[0, 4], posRatio * j));
                    vertex.Add(Vector3.Lerp(main3Pos[1, 3], main3Pos[1, 4], posRatio * j));
                    barCount++;
                }
            }

            for (int i = 0; i < barCount; i++)
            {
                Mesh       meshObj = CreateMesh.Pipe(vertex[2 * i], vertex[2 * i + 1], mainD / 2f, 12, true);
                GameObject element = new GameObject("MainBar");
                element.AddComponent <MeshFilter>().mesh       = meshObj;
                element.AddComponent <MeshRenderer>().material = new Material(Shader.Find("Standard"))
                {
                    color = new Color(0, 1, 0, 1)
                };
                element.transform.parent = mainBars.transform;
            }

            // ドローコール削減のため、作成したフープを一つのメッシュに結合
            var color = new Color(0, 1, 0, 1);

            CreateMesh.Conbine(mainBars, color, "Standard");
        }
Ejemplo n.º 3
0
        static void ColumnMainBar(Vector3[,] mainPos, Vector3[,] mainX2Pos, Vector3[,] mainY2Pos, float barSpace, float mainD, int index, GameObject parent)
        {
            // メッシュ結合用に親のオブジェクト作成
            var mainBars = new GameObject("MainBars");

            mainBars.transform.parent = parent.transform;

            int[]  mainBarNum = GetColMainNum(index);
            bool[] hasMain2   = { false, false }; // {Main2_X, Main2_Y}
            if (mainBarNum[2] > 1)
            {
                hasMain2[0] = true;
            }
            if (mainBarNum[3] > 1)
            {
                hasMain2[1] = true;
            }

            for (int i = 1; i < 5; i++)
            {
                // コーナーの主筋
                Mesh       meshObj = CreateMesh.Pipe(mainPos[0, i], mainPos[1, i], mainD / 2f, 12, true);
                GameObject element = new GameObject("MainBar");
                element.AddComponent <MeshFilter>().mesh       = meshObj;
                element.AddComponent <MeshRenderer>().material = new Material(Shader.Find("Standard"))
                {
                    color = new Color(1, 1, 0, 1)
                };
                element.transform.parent = mainBars.transform;
            }

            float          posX1Ratio = 1f / (mainBarNum[0] - 1);
            float          posY1Ratio = 1f / (mainBarNum[1] - 1);
            float          posX2Ratio = 1f / (mainBarNum[2] - 1);
            float          posY2Ratio = 1f / (mainBarNum[3] - 1);
            float          distanceX  = Vector3.Distance(mainPos[0, 1], mainPos[0, 2]);
            float          distanceY  = Vector3.Distance(mainPos[0, 2], mainPos[0, 3]);
            int            barCount   = 0;
            List <Vector3> vertex     = new List <Vector3>();

            if (hasMain2[1])
            {
                // 寄せ筋の作成
                vertex.Add(Vector3.Lerp(mainPos[0, 1], mainPos[0, 2], (barSpace + mainD) / distanceX));
                vertex.Add(Vector3.Lerp(mainPos[1, 1], mainPos[1, 2], (barSpace + mainD) / distanceX));
                vertex.Add(Vector3.Lerp(mainPos[0, 3], mainPos[0, 4], (barSpace + mainD) / distanceX));
                vertex.Add(Vector3.Lerp(mainPos[1, 3], mainPos[1, 4], (barSpace + mainD) / distanceX));
                vertex.Add(Vector3.Lerp(mainPos[0, 1], mainPos[0, 2], 1f - (barSpace + mainD) / distanceX));
                vertex.Add(Vector3.Lerp(mainPos[1, 1], mainPos[1, 2], 1f - (barSpace + mainD) / distanceX));
                vertex.Add(Vector3.Lerp(mainPos[0, 3], mainPos[0, 4], 1f - (barSpace + mainD) / distanceX));
                vertex.Add(Vector3.Lerp(mainPos[1, 3], mainPos[1, 4], 1f - (barSpace + mainD) / distanceX));
                barCount += 4;
                // 1st_X
                for (int j = 2; j <= mainBarNum[0] - 3; j++)
                {
                    vertex.Add(Vector3.Lerp(mainPos[0, 1], mainPos[0, 2], posX1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[1, 1], mainPos[1, 2], posX1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[0, 3], mainPos[0, 4], posX1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[1, 3], mainPos[1, 4], posX1Ratio * j));
                    barCount += 2;
                }
                // 2nd_X
                for (int j = 1; j <= mainBarNum[2] - 2; j++)
                {
                    vertex.Add(Vector3.Lerp(mainX2Pos[0, 1], mainX2Pos[0, 2], posX2Ratio * j));
                    vertex.Add(Vector3.Lerp(mainX2Pos[1, 1], mainX2Pos[1, 2], posX2Ratio * j));
                    vertex.Add(Vector3.Lerp(mainX2Pos[0, 3], mainX2Pos[0, 4], posX2Ratio * j));
                    vertex.Add(Vector3.Lerp(mainX2Pos[1, 3], mainX2Pos[1, 4], posX2Ratio * j));
                    barCount += 2;
                }
            }
            else
            {
                for (int j = 1; j <= mainBarNum[0] - 2; j++)
                {
                    vertex.Add(Vector3.Lerp(mainPos[0, 1], mainPos[0, 2], posX1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[1, 1], mainPos[1, 2], posX1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[0, 3], mainPos[0, 4], posX1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[1, 3], mainPos[1, 4], posX1Ratio * j));
                    barCount += 2;
                }
            }
            if (hasMain2[0])
            {
                // 寄せ筋の作成
                vertex.Add(Vector3.Lerp(mainPos[0, 2], mainPos[0, 3], (barSpace + mainD) / distanceY));
                vertex.Add(Vector3.Lerp(mainPos[1, 2], mainPos[1, 3], (barSpace + mainD) / distanceY));
                vertex.Add(Vector3.Lerp(mainPos[0, 4], mainPos[0, 1], (barSpace + mainD) / distanceY));
                vertex.Add(Vector3.Lerp(mainPos[1, 4], mainPos[1, 1], (barSpace + mainD) / distanceY));
                vertex.Add(Vector3.Lerp(mainPos[0, 2], mainPos[0, 3], 1f - (barSpace + mainD) / distanceY));
                vertex.Add(Vector3.Lerp(mainPos[1, 2], mainPos[1, 3], 1f - (barSpace + mainD) / distanceY));
                vertex.Add(Vector3.Lerp(mainPos[0, 4], mainPos[0, 1], 1f - (barSpace + mainD) / distanceY));
                vertex.Add(Vector3.Lerp(mainPos[1, 4], mainPos[1, 1], 1f - (barSpace + mainD) / distanceY));
                barCount += 4;
                // 1st_Y
                for (int j = 2; j <= mainBarNum[0] - 3; j++)
                {
                    vertex.Add(Vector3.Lerp(mainPos[0, 2], mainPos[0, 3], posY1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[1, 2], mainPos[1, 3], posY1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[0, 4], mainPos[0, 1], posY1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[1, 4], mainPos[1, 1], posY1Ratio * j));
                    barCount += 2;
                }
                // 2nd_Y
                for (int j = 1; j <= mainBarNum[3] - 2; j++)
                {
                    vertex.Add(Vector3.Lerp(mainY2Pos[0, 2], mainY2Pos[0, 3], posY2Ratio * j));
                    vertex.Add(Vector3.Lerp(mainY2Pos[1, 2], mainY2Pos[1, 3], posY2Ratio * j));
                    vertex.Add(Vector3.Lerp(mainY2Pos[0, 4], mainY2Pos[0, 1], posY2Ratio * j));
                    vertex.Add(Vector3.Lerp(mainY2Pos[1, 4], mainY2Pos[1, 1], posY2Ratio * j));
                    barCount += 2;
                }
            }
            else
            {
                for (int j = 1; j <= mainBarNum[1] - 2; j++)
                {
                    vertex.Add(Vector3.Lerp(mainPos[0, 2], mainPos[0, 3], posY1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[1, 2], mainPos[1, 3], posY1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[0, 4], mainPos[0, 1], posY1Ratio * j));
                    vertex.Add(Vector3.Lerp(mainPos[1, 4], mainPos[1, 1], posY1Ratio * j));
                    barCount += 2;
                }
            }
            for (int i = 0; i < barCount; i++)
            {
                Mesh       meshObj = CreateMesh.Pipe(vertex[2 * i], vertex[2 * i + 1], mainD / 2f, 12, true);
                GameObject element = new GameObject("mainBars");
                element.AddComponent <MeshFilter>().mesh       = meshObj;
                element.AddComponent <MeshRenderer>().material = new Material(Shader.Find("Standard"))
                {
                    color = new Color(1, 1, 0, 1)
                };
                element.transform.parent = mainBars.transform;
            }

            // ドローコール削減のため、作成したフープを一つのメッシュに結合
            var color = new Color(1, 1, 0, 1);

            CreateMesh.Conbine(mainBars, color, "Standard");
        }