如何在Unity中运行时从交互式布料保存网格?


10

在场景开始时,我将一个名为“ sheet”的GameObject放置在“ ball” GameObject上方。该工作表上有一个互动式布料组件和一个布料渲染器。交互式布料组件的网格是具有大量顶点的平面。在运行时,薄片落在球上并创建我想要的形状。如果此时禁用“交互式布料”组件,则图纸网格将完全保持所需,但无法将其作为预制件拉出。

有谁知道获取该形状副本的方法?

例如,通过在运行时从Interactive Cloth中读取网格,然后使用它来将网格更改回我想要的没有Interactive Cloth组件的方式。

任何帮助将不胜感激。


或者,您可以在诸如Blender之类的设备中进行布料模拟,保存网格,然后将其导入为一体。有很多关于如何在线进行的教程。
Peethor

Answers:


0

一个简单的行为和自定义检查器将有所帮助。将此添加到您的脚本中:

using UnityEngine;
using UnityEditor;
using System.Collections;

public class SaveMeshBehaviour : MonoBehaviour
{
    public Mesh GetMesh()
    {
        return gameObject.GetComponent<MeshFilter>().sharedMesh;
    }
}

[CustomEditor(typeof(SaveMeshBehaviour))]
public class SaveMeshInspector : Editor
{
    public override void OnInspectorGUI()
    {
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Save"))
        {
            var saveB = target as SaveMeshBehaviour;
            if (saveB != null)
            {
                var mesh = saveB.GetMesh();

                var copy = Mesh.Instantiate(mesh);
                AssetDatabase.CreateAsset(copy, "Assets/NewMesh.asset");
                AssetDatabase.SaveAssets();
            }
        }
        GUILayout.EndHorizontal();
    }
}

然后在场景中将SaveMeshBehaviour添加到您的衣服上。自定义inspctor将使新组件具有“保存”按钮。播放场景时,单击“保存”按钮,它将保存出一个网格的副本,该网格是飞机的副本。

希望这可以帮助!


2
谢谢,但是由于没有附加MeshFilter,因此对我的示例不起作用。这是因为“交互式布料”组件包含“网格”。我尝试修改您的脚本,但只能访问“ <InteractiveCloth>()。vertices”和“ <InteractiveCloth>()。mesh”。我认为它所保存的网格不会改变,因为当我使用脚本访问网格时,它只会输出原始网格。我认为顶点已被修改,但我不知道如何使用它来创建新的网格。
RebDev 2015年

如果可以得到顶点和网格的数组。尝试复制网格,然后copy.vertices = cloth.vertices 按照上述方法从副本中创建资产。不确定是否可以,但是可以。
PatrickSharbaugh

不幸的是,它给出错误“ Mesh.vertices太小。提供的顶点数组的顶点少于三角形数组引用的顶点。”
RebDev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.