Пример #1
0
    // 構築 --------------------------------------
    //linqにしたらシンプルになるか?
    /// <summary>
    /// 自身のメッシュと、パーツ以外の子孫のメッシュ(_StructurePart を持たないもの)をすべて統合する。
    /// 途中でパーツを発見した場合、そのパーツとその子孫は統合対象から外れる。
    /// パーツ以外の子孫は、ゲームオブジェクトレベルですべて破棄される。
    /// 子孫がレンダラを一つも持っていない場合は、さっさと処理を抜ける。
    /// </summary>
    public virtual void buildFromPieces()
    {
        var tf = transform;

        var mf = tf.GetComponent <MeshFilter>();

        if (mf == null)
        {
            var mr = GetComponentInChildren <MeshRenderer>();

            if (mr == null)
            {
                return;
            }

            gameObject.AddComponent <MeshRenderer>().sharedMaterial = mr.sharedMaterial;
        }



        var counter = new MeshElementsCounter();


        if (mf != null)
        {
            counter.count(mf.sharedMesh);
        }

        countChildrenMeshes(ref counter, tf);



        var creator = new ColoredNormalMesthCreator();            //SimpleMeshCreator();

        creator.alloc(ref counter);


        if (mf != null)
        {
            var mt = Matrix4x4.identity;

            creator.addGeometory(mf.sharedMesh, ref mt);
        }

        var mtInv = tf.worldToLocalMatrix;

        buildChildrenMeshes(creator, tf, ref mtInv);



        if (mf == null)
        {
            mf = gameObject.AddComponent <MeshFilter>();
        }

        mf.sharedMesh = creator.create();
    }
Пример #2
0
    void countChildrenMeshes(ref MeshElementsCounter counter, Transform tf)
    {
        for (var i = 0; i < tf.childCount; i++)
        {
            var tfChild = tf.GetChild(i);

            if (tfChild.GetComponent <_StructurePart3>() == null)
            {
                if (tfChild.childCount > 0)
                {
                    countChildrenMeshes(ref counter, tfChild);
                }


                var mf = tfChild.GetComponent <MeshFilter>();

                if (mf != null)
                {
                    counter.count(mf.sharedMesh);
                }
            }
        }
    }