private void InitMRWall()
    {
        units = new List <MRWallUnit>();

        float initPosZ = (float)col / 2 - 0.5f;
        float initPosY = (float)row / 2 - 0.5f;

        for (int j = 0; j < row; j++)
        {
            for (int i = 0; i < col; i++)
            {
                GameObject wall = Instantiate(WallPrefab);
                wall.name                       = "unit_" + (j * col + i);
                wall.transform.parent           = ARWall.transform;
                wall.transform.localPosition    = new Vector3(0, initPosY - j, initPosZ - i);
                wall.transform.localEulerAngles = Vector3.zero;
                wall.transform.localScale       = Vector3.one;

                MRWallUnit unit = wall.GetComponent <MRWallUnit>();
                for (int k = 0; k < unit.paintObjs.Length; k++)
                {
                    unit.paintObjs[k].PositionMap = model.paintObjs[k].PositionMap;
                    unit.paintObjs[k].NormalMap   = model.paintObjs[k].NormalMap;
                }

                PaintVR.PBSPaintableMiniature subComponent = unit.coverMesh.gameObject.AddComponent <PaintVR.PBSPaintableMiniature>();
                subComponent.registerUndoMgr = false;
                subComponent.OriginObj       = PBSRoot;

                Vector2 UVst = new Vector2((float)i / (float)col, (float)(row - j - 1) / (float)row);
                Vector2 UVed = new Vector2((float)(i + 1) / (float)col, (float)(row - j) / (float)row);
                unit.ChangeCoverMeshUV(UVst, UVed);

                Vector3 VertexSt = new Vector3(-col / 2.0f + i, -row / 2.0f + (row - j - 1), 0);
                Vector3 VertexEd = new Vector3(-col / 2.0f + (i + 1), -row / 2.0f + (row - j), 0);
                unit.ChangeCoverMeshVertexs(VertexSt, VertexEd);

                unit.fishSpeed = fishSpeed;
                unit.mgr       = this;
                unit.UpdateWorldPosMatrix();
                units.Add(unit);

                if (ScoreManager.instance != null)
                {
                    ScoreManager.instance.AddCancelComboObj(unit.paintObjs[1]);
                    ScoreManager.instance.AddCancelComboObj(subComponent);
                }
            }
        }

        if (ScoreManager.instance != null)
        {
            ScoreManager.instance.AddCancelComboObj(wall.GetComponent <PaintVR.PBSPaintableObject>());
        }

        SetAcitveUnit();
    }
    public void CheckKeyDown()
    {
        string sr = Input.inputString;

        for (int i = 0; i < sr.Length; i++)
        {
            int inx = pareToUnit.IndexOf(sr[i]);
            if (inx == -1)
            {
                continue;
            }

            MRWallUnit unit = units[inx];
            if (unit.IsPlaying)
            {
                continue;
            }
            unit.RotateStart();
        }
    }
    public void CheckKeyDown(string sr)
    {
        for (int i = 0; i < sr.Length; i++)
        {
            int inx = pareToUnit.IndexOf(sr[i]);
            if (inx == -1)
            {
                continue;
            }

            int actInx = Mathf.FloorToInt((float)inx / (float)pareToUnit.Length * (float)activeUnit.Length);
            //Debug.Log("[Inx:" + inx + "]" + "[ActInx:" + actInx + "]");
            inx = pareToUnit.IndexOf(activeUnit[actInx]);

            MRWallUnit unit = units[inx];
            if (unit.IsPlaying)
            {
                continue;
            }
            unit.RotateStart();
        }
    }
    private IEnumerator InitCoroutine()
    {
        GameObject tp = Instantiate(WallPrefab);

        model     = tp.GetComponent <MRWallUnit>();
        paintObjs = model.paintObjs;

        startButton = GameStartButton.GetComponent <PaintVR.PBSPaintableObject>();
        startButton.AddOnPaintingListener(TiggerStartEvent);
        generator.targetObject = GameStartButton;
        generator.GBufferGeneratorInit();

        yield return(new WaitForSeconds(0.1f));

        generator.targetObject = wall.gameObject;
        generator.GBufferGeneratorInit();

        yield return(new WaitForSeconds(0.1f));

        foreach (var obj in paintObjs)
        {
            generator.targetObject = obj.gameObject;
            generator.GBufferGeneratorInit();

            yield return(new WaitForSeconds(0.1f));
        }

        PBSRoot = model.coverMesh.gameObject.AddComponent <PaintVR.PBSPaintableObjectRoot>();
        PBSRoot.registerUndoMgr = false;

        Mesh mesh = model.coverMesh.mesh;

        Vector3[] vertexs = new Vector3[4];
        vertexs[0] = new Vector3(-col / 2.0f, -row / 2.0f, 0.0f);
        vertexs[1] = new Vector3(+col / 2.0f, +row / 2.0f, 0.0f);
        vertexs[2] = new Vector3(+col / 2.0f, -row / 2.0f, 0.0f);
        vertexs[3] = new Vector3(-col / 2.0f, +row / 2.0f, 0.0f);

        mesh.vertices        = vertexs;
        model.coverMesh.mesh = mesh;

        generator.targetObject = model.coverMesh.gameObject;
        generator.GBufferGeneratorInit();

        cleaner.srcTexture = PBSRoot.PaintTextureData.AlbedoTexture;

        yield return(new WaitForSeconds(0.1f));

        InitMRWall();

        yield return(new WaitForSeconds(0.1f));

        model.coverMesh.GetComponent <Renderer>().enabled = false;
        model.coverMesh.GetComponent <Collider>().enabled = false;
        model.coverMesh.transform.parent = ARWall.transform;
        Destroy(model.gameObject);

        yield return(new WaitForSeconds(0.1f));

        init = true;
    }