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

C# Unity:如何以编程方式在assetDatabase中查找对象网格?,c#,unity5,C#,Unity5,我正在编写一个[menuitem]脚本来完成导入新模型->就绪预制件时必须完成的大量繁琐工作。这是一项乏味且重复的工作,非常适合编写脚本,但我不知道如何编写。我无法让脚本找到正确的网格,以便可以正确地自动将其添加到Prefacts mesh collider组件 问题的核心是,当对象导入Unity时,所有对象的网格都被简单地命名为“default”。如果我在哪里搜索具有该名称的网格文件的资源,我将无法获得正确的文件,只是我的一个对象的一些随机渲染器 所以我的问题是找到一个好的方法来间接处理网格。

我正在编写一个[menuitem]脚本来完成导入新模型->就绪预制件时必须完成的大量繁琐工作。这是一项乏味且重复的工作,非常适合编写脚本,但我不知道如何编写。我无法让脚本找到正确的网格,以便可以正确地自动将其添加到Prefacts mesh collider组件

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

所以我的问题是找到一个好的方法来间接处理网格。经过广泛的搜索和长途跋涉,我想不出一个好的解决办法。由于模型的体积,手动分配网格在长期内是不可行的

下面是一个文件夹结构的屏幕截图,它靠近难以获取的“默认”网格文件结构图像


Ps:我知道如何将网格分配给我的网格碰撞器,这不是问题,它首先能够将unity指向正确的网格。

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

编辑:这是我使用的代码

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));
    }
}
使用UnityEditor;
使用UnityEngine;
公共类MazeMenuScript:单一行为
{
//将名为“CreateMazePiece”的菜单项添加到菜单栏中的迷宫。
/// 
///将选定对象转换为预置对象,并将其添加到集合“在此处输入代码”的列表中
/// 
[MenuItem(“迷宫/创建迷宫”)]
静态void docreateMazePiecePrefable()
{
Transform[]transforms=Selection.transforms;
foreach(变换中的变换t)
{
Log(“从“+t.gameObject.name”创建一个预置);
//添加网格碰撞器
MeshCollider mc=t.gameObject.AddComponent();
//这是解决问题的魔线:
mc.sharedMesh=t.gameObject.GetComponentChildren().sharedMesh;
Log(“添加了网格的网格碰撞器”);
Object prefab=prefableUtility.CreateEmptyPrefab(“资产/资源/未分类的mazePrefables/”+t.gameObject.name+”.prefab”);
replacePrefact(t.gameObject,prefact,replacePrefableOptions.ConnectToPrefab);
立即销毁(t.gameObject);
AssetDatabase.LoadAssetPath(AssetDatabase.GetAssetPath(Selection.activeObject));
}
}

}

到目前为止,您尝试了什么?请展示您的代码。我的问题是我没有真正理解资产数据库中的整个load asset内容,并且我没有足够的理解来思考一个好的方法来进行增量测试,如果我理解了的话……如果这有意义的话。正如我在回答中所说,我通过一种变通方法解决了这个问题,但通过资产路径解决网格的根本问题对我来说仍然是个谜。我不喜欢实施有效的解决方案,但我不了解我要学习的项目。违背了目的/好的,没问题:)