【问题标题】:Unity: How to programmatically find an objects mesh in the assetDatabase?Unity:如何以编程方式在assetDatabase中找到对象网格?
【发布时间】:2017-09-04 23:37:14
【问题描述】:

我正在编写一个 [menuitem] 脚本来做很多我在导入新模型时必须做的繁琐工作 -> 准备好的预制件。这是一项乏味且重复性的工作,非常适合编写脚本,但我不知道怎么做。我无法让脚本找到正确的网格,以便我可以正确地自动将其添加到预制网格对撞机组件中。

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

所以我的问题是找到一种间接解决网格的好方法。经过广泛的搜索和长途跋涉,我想不出一个好的解决方案。由于模型数量众多,长期手动分配网格是不可行的。

这是难以获得“默认”网格文件结构图像附近的文件夹结构的屏幕截图。

Ps:我知道如何将网格分配给我的网格对撞机,这不是问题,它能够将统一点指向正确的网格。

【问题讨论】:

  • 到目前为止您尝试过什么?请出示您的代码。
  • 我的问题是我并没有真正理解资产数据库中的整个负载资产的内容,而且如果我理解了它,我也没有足够的理解来想一个好的增量测试方法。 ..如果这是有道理的。正如我在回答中所说,我通过一种变通方法解决了这个问题,但是通过资产路径解决网格的潜在问题对我来说仍然是一个谜。而且我不喜欢实施有效的解决方案,但我不了解我要学习的项目。达不到目的。 ://

标签: c# unity5


【解决方案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));
    }
}

}

【讨论】:

  • 好吧,没问题:)
猜你喜欢
  • 2011-09-25
  • 2014-04-21
  • 2010-12-09
  • 2013-10-05
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
相关资源
最近更新 更多