Example #1
0
 // Start is called before the first frame update
 void Start()
 {
     if (meshObject == null)
     {
         meshObject = GetComponent <MeshMerger>();
     }
 }
Example #2
0
        public static void MergeSelectedMeshes()
        {
            if (!Selection.activeGameObject)
            {
                Debug.Log("Please Select The Root Node.");
            }

            var mergedRenderer = MeshMerger.Batch(
                Selection.activeGameObject.GetComponentsInChildren <MeshRenderer>(),
                Selection.activeGameObject.transform
                );
            var assetName = "new-mesh@" + DateTime.Now.GetTimeStamp();
            var prefabObj = new GameObject(assetName);

            prefabObj.transform.position = Selection.activeGameObject.transform.position;
            mergedRenderer.ForEach(
                (mr, i) => {
                var mf            = mr.GetComponent <MeshFilter>();
                var fullAssetName = assetName + "_" + i;
                AssetDatabase.CreateAsset(mf.sharedMesh, "Assets/" + fullAssetName + ".asset");
                AssetDatabase.SaveAssets();
                var mesh            = AssetDatabase.LoadAssetAtPath <Mesh>("Assets/" + fullAssetName + ".asset");
                mf.sharedMesh       = mesh;
                mr.transform.parent = prefabObj.transform;
            }
                );
            PrefabUtility.SaveAsPrefabAsset(prefabObj, "Assets/" + assetName + ".prefab");
            var obj = PrefabUtility.InstantiatePrefab(PrefabUtility.LoadPrefabContents("Assets/" + assetName + ".prefab")) as GameObject;

            obj.transform.position = prefabObj.transform.position;
            Object.DestroyImmediate(prefabObj);
        }
Example #3
0
    public override void OnInspectorGUI()
    {
        MeshMerger bm = (MeshMerger)target;

        GUILayout.BeginVertical("box");

        if (GUILayout.Button("Organize Buildings"))
        {
            bm.DeOrganize();
            bm.Organize();
        }

        if (GUILayout.Button("Merge Meshes"))
        {
            bm.Unify();
        }

        if (GUILayout.Button("De-Organize"))
        {
            bm.DeOrganize();
        }

        if (GUILayout.Button("Clean Unused Objects"))
        {
            bm.CleanScene();
        }
        bm.maximizeEfficiency = EditorGUILayout.Toggle(new GUIContent("Maximize Efficiency", "Groups objects to maximize efficiency"), bm.maximizeEfficiency);

        GUILayout.EndVertical();
    }
Example #4
0
        /// <summary>
        /// Merges all source objects to one mesh and creates a native trimesh.
        /// </summary>
        /// <param name="meshes">Source meshes.</param>
        /// <returns>Native trimesh.</returns>
        private agxCollide.Geometry Create(UnityEngine.Mesh[] meshes)
        {
            var geometry = new agxCollide.Geometry();

            if (m_precomputedCollisionMeshes.Count > 0)
            {
                // The vertices are assumed to be stored in local coordinates of the
                // given transform. For the scale to be correct w
                var toWorld = transform.localToWorldMatrix;
                Func <Vector3, Vector3> transformer = v =>
                {
                    return(transform.InverseTransformDirection(toWorld * v.ToLeftHanded()));
                };

                var mode = Options != null ? Options.Mode : CollisionMeshOptions.MeshMode.Trimesh;
                for (int i = 0; i < m_precomputedCollisionMeshes.Count; ++i)
                {
                    var collisionMesh = m_precomputedCollisionMeshes[i];
                    if (collisionMesh == null)
                    {
                        Debug.LogWarning($"AGXUnity.Collide.Mesh: Null precomputed collision mesh at index {i}.", this);
                        continue;
                    }

                    var shape = collisionMesh.CreateShape(transformer, mode);
                    if (shape == null)
                    {
                        Debug.LogWarning($"AGXUnity.Collide.Mesh: Precomputed collision mesh at index {i} resulted in an invalid shape.", this);
                        continue;
                    }

                    geometry.add(shape, GetNativeGeometryOffset());
                }
            }
            else
            {
                if (m_precomputedCollisionMeshes.Count > 0)
                {
                    Debug.LogWarning("AGXUnity.Mesh: Failed to create shapes from precomputed data - using Trimesh as fallback.", this);
                }

                var merger = MeshMerger.Merge(transform, meshes);
                geometry.add(new agxCollide.Trimesh(merger.Vertices,
                                                    merger.Indices,
                                                    "AGXUnity.Mesh: Trimesh"),
                             GetNativeGeometryOffset());
            }

            if (geometry.getShapes().Count == 0)
            {
                geometry.Dispose();
                geometry = null;
            }

            return(geometry);
        }
Example #5
0
    // Use this for initialization
    void Awake()
    {
        mergedMeshObject = GameObject.Find(mergedMeshObjectName).GetComponent("MeshMerger") as MeshMerger;
        if (mergedMeshObject == null)
        {
            Debug.LogError("Can't find merged mesh object in MergeStaticMeshPeices.cs, Start()");
        }

        foreach (MeshFilter filter in meshesToMerge)
        {
            mergedMeshObject.AddMeshFilterToMerge(filter);
        }
    }
    private MeshMerger mergedMeshObject; //set in awake with .find()

    #endregion Fields

    #region Methods

    // Use this for initialization
    void Awake()
    {
        mergedMeshObject = GameObject.Find(mergedMeshObjectName).GetComponent("MeshMerger") as MeshMerger;
        if(mergedMeshObject == null)
        {
            Debug.LogError("Can't find merged mesh object in MergeStaticMeshPeices.cs, Start()");
        }

        foreach(MeshFilter filter in meshesToMerge)
        {
            mergedMeshObject.AddMeshFilterToMerge(filter);
        }
    }
Example #7
0
    //   float range = 30;


    void OnEnable()
    {
        MeshMerger um = (MeshMerger)target;
    }
Example #8
0
        /// <summary>
        /// Merges all source objects to one mesh and creates a native trimesh.
        /// </summary>
        /// <param name="meshes">Source meshes.</param>
        /// <returns>Native trimesh.</returns>
        private agxCollide.Mesh Create(UnityEngine.Mesh[] meshes)
        {
            var merger = MeshMerger.Merge(transform, meshes);

            return(new agxCollide.Trimesh(merger.Vertices, merger.Indices, "Trimesh"));
        }