Exemple #1
0
    private void Init()
    {
        bool collider = false;

        int count = environmentObjectData.meshMatDatas.Length;

        for (int i = 0; i < count; i++)
        {
            //Debug.Log(i);

            MeshMatData data  = environmentObjectData.meshMatDatas[i];
            GameObject  child = new GameObject("Mesh");
            child.transform.SetParent(transform);
            child.transform.localScale   *= data.scale;
            child.transform.localPosition = data.posOffset;
            child.transform.localRotation = Quaternion.identity;
            child.AddComponent <MeshRenderer>().sharedMaterials = data.mats;
            child.AddComponent <MeshFilter>().mesh = data.mesh;

            for (int b = 0; b < data.boxData.Length; b++)
            {
                BoxColliderData boxData = environmentObjectData.boxColDatas[data.boxData[b]];
                BoxCollider     col     = child.AddComponent <BoxCollider>();

                col.center = boxData.center;
                col.size   = boxData.size;
                collider   = true;
            }

            for (int c = 0; c < data.capsuleData.Length; c++)
            {
                CapsuleColliderData capData = environmentObjectData.capColDatas[data.capsuleData[c]];
                CapsuleCollider     col     = child.AddComponent <CapsuleCollider>();
                col.center = capData.center;
                col.radius = capData.radius;
                col.height = capData.height;
                collider   = true;
            }
        }

        if (collider)
        {
            gameObject.AddComponent <Rigidbody>().isKinematic = true;
            //GetComponent<NetworkTransform>().transformSyncMode = NetworkTransform.TransformSyncMode.SyncRigidbody3D;
        }

        radius = environmentObjectData.radius;

        anim = GetComponent <Animator>();
        anim.SetTrigger("StartEntrance");
        pSystem.Play();
    }
    public void AddMeshMat(Mesh mesh, Material[] mats, float scale, Vector3 pos, Quaternion rot)
    {
        if (meshMatCount >= meshMatDatas.Length)
        {
            MeshMatData[] newArr = new MeshMatData[meshMatDatas.Length + 1];
            for (int i = 0; i < meshMatDatas.Length; i++)
            {
                newArr[i] = meshMatDatas[i];
            }
            meshMatDatas = newArr;
        }

        meshMatDatas[meshMatCount] = new MeshMatData(mesh, mats, scale, pos, rot);
        meshMatCount++;

        for (int i = 0; i < meshMatDatas.Length; i++)
        {
            Debug.Log("Added " + meshMatDatas[i].mesh + ", " + meshMatDatas[i].mats[0]);
        }
    }
    public TerrainChunk(Vector2 coord, int size, Transform parent, int layer)
    {
        position = coord * size;
        bounds   = new Bounds(position, Vector2.one * size);
        Vector3 positionV3 = new Vector3(position.x, 0, position.y);

        meshObject       = new GameObject("TerrainChunk");
        meshObject.layer = layer;
        MeshRenderer     = meshObject.AddComponent <MeshRenderer>();
        meshFilter       = meshObject.AddComponent <MeshFilter>();
        meshObject.transform.position = positionV3;
        meshObject.transform.SetParent(parent);
        meshObject.tag = "Ground";
        SetVisible(true);
        MeshMatData data = chunks.mapGen.GetGeneratedData(position, coord);

        meshFilter.mesh       = MeshGen.GenerateTerrainMesh(data.map, 0).CreateMesh();
        MeshRenderer.material = data.mat;
        meshObject.AddComponent <MeshCollider>();
    }