Exemplo n.º 1
0
Arquivo: Area3.cs Projeto: abarabone/a
    Mesh combineMesh(_StructureInterArea3[] buildings)
    {
        var counter = new MeshElementsCounter(buildings);


        //var tfArea	= this.transform;

        var creator = new StructureBonedMeshCreator();            //StructureMeshCreator();

        creator.alloc(ref counter);

        for (var i = 0; i < buildings.Length; i++)
        {
            var tfBuilding = buildings[i].tf;


            var mf = buildings[i].far.GetComponent <MeshFilter>();

            var tfDetail = mf.transform;


            var mtBuidingBase = tfBuilding.worldToLocalMatrix * tfDetail.localToWorldMatrix * Matrix4x4.Scale(tfBuilding.localScale);              // 用考慮:スケーリング

            creator.addGeometory(mf.sharedMesh, i, ref mtBuidingBase, buildings[i].colorPallets);
        }

        return(creator.create());
    }
Exemplo n.º 2
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();
    }
Exemplo n.º 3
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);
                }
            }
        }
    }
Exemplo n.º 4
0
    public virtual void alloc(ref MeshElementsCounter mec)
    {
        idxs = new int[mec.idxLength];

        vtxs = new Vector3[mec.vtxLength];
    }
Exemplo n.º 5
0
    public override void alloc(ref MeshElementsCounter mec)
    {
        base.alloc(ref mec);

        flagOffsets = new Vector2[mec.vtxLength];
    }
Exemplo n.º 6
0
    public override void alloc(ref MeshElementsCounter mec)
    {
        base.alloc(ref mec);

        bids = new Color32[mec.vtxLength];
    }
Exemplo n.º 7
0
    public override void alloc(ref MeshElementsCounter mec)
    {
        base.alloc(ref mec);

        nms = new Vector3[mec.vtxLength];
    }