วิธีบันทึก Mesh จาก Interactive Cloth ตอนรันไทม์ใน Unity


10

ในช่วงเริ่มต้นของฉากฉันมี GameObject เรียกว่า 'ชีต' วางไว้เหนือ 'GameObject' บอล ' แผ่นมีส่วนประกอบผ้าแบบอินเทอร์แอคทีฟบนตัวมันและตัวสร้างผ้า ส่วนประกอบของตาข่ายสำหรับผ้าแบบอินเตอร์แอกทีฟคือเครื่องบินที่มีจุดยอดสูง เมื่อถึงรันไทม์แผ่นหยดลงบนลูกบอลและสร้างรูปร่างที่ฉันต้องการ ถ้าฉันปิดการใช้งานส่วนประกอบผ้าแบบอินเตอร์แอกทีฟ ณ จุดนี้ตาข่ายแผ่นจะยังคงตรงตามที่ฉันต้องการ แต่ฉันไม่สามารถดึงมันออกมาในรูปแบบพรีแฟบได้

ไม่มีใครรู้วิธีที่จะได้รับสำเนาของรูปร่างนั้นหรือไม่?

ตัวอย่างเช่นโดยการอ่าน mesh จาก Interactive Cloth ตอนรันไทม์จากนั้นใช้สิ่งนั้นเพื่อเปลี่ยน mesh กลับมาตามที่ฉันต้องการโดยไม่ต้องใช้ส่วนประกอบ 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

หากคุณสามารถหาอาร์เรย์ของจุดยอดและตาข่าย ลองคัดลอกตาข่ายแล้วcopy.vertices = cloth.vertices ติดตามด้วยการสร้างเนื้อหาจากสำเนาดังกล่าวข้างต้น ไม่แน่ใจว่ามันจะทำงานได้ แต่อาจ
PatrickSharbaugh

น่าเสียดายที่มันทำให้เกิดข้อผิดพลาด "Mesh.vertices เล็กเกินไปอาร์เรย์จุดสุดยอดที่ให้มามีจุดยอดน้อยกว่าที่อ้างอิงโดยอาร์เรย์สามเหลี่ยม"
RebDev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.