Unity:如何以编程方式在assetDatabase中查找对象网格?

时间:2017-09-01 00:25:15

标签: c# unity5

我正在编写一个[menuitem]脚本来执行导入新模型时必须执行的许多繁琐工作 - >准备好的预制件。这是繁琐而重复的工作,非常适合编写脚本,除非我无法弄清楚如何操作。我无法通过脚本找到正确的网格,以便我可以正确地自动将其添加到预制网格对撞机组件中。

问题的核心是当对象导入Unity时,所有对象的网格都被命名为"默认"。如果我在哪里搜索具有该名称的网格文件的资源,我将无法获得正确的文件,只是我的一个对象的随机渲染器。

所以我的问题是找到间接解决网格的好方法。经过广泛的搜索和漫步,我无法想到一个好的解决方案。由于模型的数量,手动分配网格在长期内是不可行的。

以下是难以获得的文件夹结构的屏幕截图"默认"网格文件结构图像。

enter image description here

Ps:我知道如何将网格物体分配给我的网格对撞机,这不是问题,它可以将统一指向右侧网格开始。

1 个答案:

答案 0 :(得分:-1)

最后我没有解决问题的核心,通过路径寻址网格:/但我确实找到了一个解决方法,通过寻址网格过滤器已分配给自己的网格,因为那个网格会生成正确的网格已经分配。

编辑:这是我使用的代码

using UnityEditor;
using UnityEngine;
public class MazeMenuScript : MonoBehaviour
{
// Add a menu item named "CreateMazePiece" to Maze in the menu bar.
/// <summary>
/// Turns a selected object(s) into a Prefab and ads it to the list of set `enter code here`pieces
/// </summary>
[MenuItem("Maze/CreateMazePiece")]
static void DoCreateMazePiecePrefab()
{
    Transform[] transforms = Selection.transforms;
    foreach (Transform t in transforms)
    {
        Debug.Log("Creating a prefab out of " + t.gameObject.name);
        //Add mesh collider
        MeshCollider mc = t.gameObject.AddComponent<MeshCollider>();
//this is the magic line that solved the problem:
        mc.sharedMesh = t.gameObject.GetComponentInChildren<MeshFilter>().sharedMesh;
        Debug.Log("Mesh collider with mesh added");

        Object prefab = PrefabUtility.CreateEmptyPrefab("Assets/Resources/UnsortedMazePrefabs/" + t.gameObject.name + ".prefab");
        PrefabUtility.ReplacePrefab(t.gameObject, prefab, ReplacePrefabOptions.ConnectToPrefab);
        DestroyImmediate(t.gameObject);

        AssetDatabase.LoadAssetAtPath<GameObject>(AssetDatabase.GetAssetPath(Selection.activeObject));
    }
}

}