Bagaimana cara menyimpan Mesh dari Kain Interaktif saat runtime di Unity?

10

Pada awal adegan saya memiliki GameObject yang disebut 'sheet' diposisikan di atas 'ball' GameObject. Lembar ini memiliki komponen Cloth Interaktif di atasnya dan Cloth Renderer. Mesh untuk komponen Cloth Interaktif adalah pesawat dengan jumlah simpul yang tinggi. Pada saat runtime, lembar jatuh di atas bola dan menciptakan bentuk yang saya inginkan. Jika saya menonaktifkan komponen Cloth Interaktif pada titik ini mesh sheet tetap persis seperti yang saya inginkan tetapi saya tidak bisa menariknya keluar sebagai Prefab.

Adakah yang tahu cara mendapatkan salinan bentuk itu?

Misalnya dengan membaca jala dari Kain Interaktif saat runtime dan kemudian menggunakannya untuk mengubah jala kembali seperti yang saya inginkan tanpa komponen Kain Interaktif.

Bantuan apa pun akan sangat dihargai.

RebDev
sumber
Atau, Anda bisa melakukan simulasi kain dalam sesuatu seperti blender, menyimpan mesh, dan mengimpornya ke dalam kesatuan. Ada banyak tutorial tentang cara melakukannya secara online.
Peethor

Jawaban:

0

Perilaku sederhana dan inspektur kebiasaan akan membantu. Tambahkan ini ke skrip Anda:

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();
    }
}

Kemudian dalam adegan tambahkan SaveMeshBehaviour ke kain Anda. Inspektur kustom akan membuat komponen baru memiliki tombol Simpan. Saat Anda memainkan adegan Anda, klik tombol simpan dan itu akan menghemat mesh yang merupakan salinan dari pesawat.

Semoga ini membantu!

PatrickSharbaugh
sumber
2
Terima kasih tetapi tidak akan berfungsi untuk contoh saya karena tidak ada MeshFilter terpasang. Itu karena komponen Cloth Interaktif memegang Mesh. Saya mencoba memodifikasi skrip Anda tetapi saya hanya dapat mengakses "<InteractiveCloth> () .vertices" dan "<InteractiveCloth> () .mesh". Saya pikir jala yang dimilikinya tidak berubah seperti ketika saya menggunakan skrip Anda untuk mengakses jala itu hanya menghasilkan jala asli. Saya pikir bahwa simpul sedang dimodifikasi tetapi saya tidak tahu bagaimana menggunakannya untuk membuat mesh baru.
RebDev
Jika Anda bisa mendapatkan array simpul dan mesh. Coba salin jala dan copy.vertices = cloth.vertices ikuti itu dengan membuat aset dari salinan seperti di atas. Tidak yakin itu akan berhasil, tetapi mungkin.
PatrickSharbaugh
Sayangnya itu memberikan kesalahan "Mesh.vertices terlalu kecil. Vertex array yang disediakan memiliki lebih sedikit simpul daripada yang direferensikan oleh array segitiga."
RebDev