Làm cách nào để lưu lưới từ một miếng vải tương tác khi chạy trong Unity?


10

Khi bắt đầu một cảnh tôi có GameObject được gọi là 'sheet' được đặt phía trên một 'quả bóng' GameObject. Tờ này có thành phần Vải tương tác trên đó và Trình kết xuất vải. Thành phần Lưới cho thành phần Vải tương tác là một mặt phẳng có số lượng đỉnh cao. Trong thời gian chạy, tấm rơi xuống quả bóng và tạo ra hình dạng tôi muốn. Nếu tôi vô hiệu hóa thành phần Vải tương tác tại thời điểm này, lưới tấm sẽ giữ chính xác như tôi muốn nhưng tôi không thể kéo nó ra làm Prefab.

Có ai biết một cách để có được một bản sao của hình dạng đó?

Ví dụ: bằng cách đọc lưới từ Vải tương tác trong thời gian chạy và sau đó sử dụng lưới đó để thay đổi lưới trở lại như tôi muốn mà không cần thành phần Vải tương tác.

Mọi sự trợ giúp sẽ rất được trân trọng.


Ngoài ra, bạn có thể thực hiện mô phỏng vải trong một cái gì đó như máy xay sinh tố, lưu lưới và nhập dữ liệu đó vào thống nhất. Có rất nhiều hướng dẫn về cách làm điều đó trực tuyến.
Peethor

Câu trả lời:


0

Một hành vi đơn giản và thanh tra tùy chỉnh sẽ giúp. Thêm phần này vào tập lệnh của bạn:

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

Sau đó, trong cảnh thêm SaveMeshBehaviour vào vải của bạn. Trình kiểm tra tùy chỉnh sẽ làm cho thành phần mới có nút Lưu. Khi bạn đang phát cảnh của mình, nhấp vào nút lưu và nó sẽ lưu ra một lưới là bản sao của máy bay.

Hi vọng điêu nay co ich!


2
Cảm ơn nhưng nó sẽ không hoạt động với ví dụ của tôi vì không có GridFilter kèm theo. Đó là bởi vì thành phần Vải tương tác giữ lưới. Tôi đã thử sửa đổi tập lệnh của bạn nhưng tôi chỉ có thể truy cập "<InteractiveCloth> (). Đỉnh" và "<InteractiveCloth> (). Lưới". Tôi nghĩ rằng lưới mà nó giữ không thay đổi vì khi tôi sử dụng tập lệnh của bạn để truy cập vào lưới, nó chỉ xuất ra lưới ban đầu. Tôi nghĩ rằng các đỉnh đang được sửa đổi nhưng tôi không biết cách sử dụng nó để tạo lưới mới.
RebDev 10/07/2015

Nếu bạn có thể có được các đỉnh và lưới. Hãy thử sao chép lưới và sau đó copy.vertices = cloth.vertices Thực hiện theo đó với việc tạo một tài sản từ bản sao như trên. Không chắc chắn nó sẽ hoạt động, nhưng nó có thể.
PatrickSharbaugh 10/07/2015

Thật không may, nó đưa ra lỗi "Mesh.vertices quá nhỏ. Mảng đỉnh được cung cấp có ít đỉnh hơn được tham chiếu bởi mảng tam giác."
RebDev 14/07/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.