Unityで実行時にインタラクティブクロスからメッシュを保存する方法は?


10

シーンの開始時に、「ボール」のゲームオブジェクトの上に「シート」と呼ばれるゲームオブジェクトを配置しました。シートには、インタラクティブクロスコンポーネントとクロスレンダラーがあります。インタラクティブクロスコンポーネントのメッシュは、多数の頂点を持つ平面です。実行時にシートがボールの上に落下し、必要な形状が作成されます。この時点でInteractive Clothコンポーネントを無効にすると、シートメッシュは希望どおりにとどまりますが、プレハブとして引き出すことができません。

誰かがその形のコピーを取得する方法を知っていますか?

たとえば、実行時にインタラクティブクロスからメッシュを読み取り、それを使用してインタラクティブクロスコンポーネントなしでメッシュを希望どおりに戻すことができます。

どんな助けでも大歓迎です。


あるいは、ブレンダーのようなもので布のシミュレーションを行い、メッシュを保存して、それを単一にインポートすることもできます。オンラインでそれを行う方法についてのチュートリアルがたくさんあります。
Peethor

回答:


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をクロスに追加します。カスタムインスペクタは、新しいコンポーネントに[保存]ボタンを作成します。シーンを再生しているときに保存ボタンをクリックすると、平面のコピーであるメッシュが保存されます。

お役に立てれば!


2
ありがとうございます。MeshFilterがアタッチされていないため、私の例では機能しません。これは、インタラクティブクロスコンポーネントがメッシュを保持しているためです。スクリプトを変更しようとしましたが、「<InteractiveCloth>()。vertices」と「<InteractiveCloth>()。mesh」しかアクセスできません。スクリプトを使用してメッシュにアクセスすると、元のメッシュが出力されるだけなので、メッシュが保持するメッシュは変化しないと思います。頂点が変更されていると思いますが、それを使用して新しいメッシュを作成する方法がわかりません。
RebDev 2015

頂点の配列とメッシュを取得できる場合。メッシュをcopy.vertices = cloth.vertices コピーしてから、上記のようにコピーからアセットを作成してください。動作するかどうかはわかりませんが、動作する可能性があります。
PatrickSharbaugh、2015

残念ながら、「Mesh.verticesが小さすぎます。指定された頂点配列には、三角形配列で参照されるよりも少ない頂点があります。」というエラーが発生します。
RebDev 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.