Unity - 如何通过脚本重命名网格?

问题描述 投票:0回答:3

我正在编写一个脚本来直接在Unity中重命名网格,因为每次重命名FBX文件时,网格资源仍然保留上次从3dsMax的Maya导出时的旧名称,这真的很烦人。我尝试过的都不起作用,代码如下:

public class Rename
{
    [MenuItem("Assets/Test")]
    private static void renameTest()
    {
        //select a fbx in project window
        GameObject fbx = Selection.activeGameObject;

        Mesh meshAsset = fbx.GetComponentInChildren<MeshFilter>().sharedMesh;

        meshAsset.name = "new name";
        Debug.Log(meshAsset);
    }
}

我也尝试过:

private static void renameTestv2()
{
    GameObject fbx = Selection.activeGameObject;

    Mesh meshAsset = fbx.GetComponentInChildren<MeshFilter>().sharedMesh;

    Mesh meshAsset2 = Object.Instantiate(meshAsset);
    meshAsset2.name = "new name";
    fbx.GetComponentInChildren<MeshFilter>().sharedMesh = meshAsset2;
}

第三种方法可以更改FBX的Meshfilter组件上的Mesh名称,但实际的子资源仍然使用旧的,您可以通过附图找到我的意思。

private static void renameTest()
{
    GameObject fbx = Selection.activeGameObject;
    string path = AssetDatabase.GetAssetPath(fbx);
    Mesh meshAsset = AssetDatabase.LoadAllAssetRepresentationsAtPath(path)[0] as Mesh;
    meshAsset.name = "new name";
    fbx.GetComponentInChildren<MeshFilter>().sharedMesh = meshAsset;
    Debug.Log(meshAsset);

}

如何解决这个问题?

enter image description here

如果我从 DCC 重新导出 FBX 来更改网格体的名称,它将丢失与预制件的链接,但 fbx 文件的 guid 实际上没有改变,为什么会发生这种情况? 我的步骤是

  1. 将aa.FBX文件统一重命名为bb.FBX
  2. 将bb.FBX导入3dsmax,并在3dsmax中将名称从aa更改为bb
  3. 再次导出为 bb.FBX 到 unity。
c# unity-game-engine
3个回答
1
投票

我认为这不能直接在 Unity 中完成。

原因:在Unity的资源中看到的是一个已经导入的虚拟模型Prefab。实际上,在您的系统文件浏览器中,它仍然是一个普通的 FBX 文件,并且 Unity 不会直接将内容写入该 FBX 文件。 Unity 不是 3D 建模软件,因此没有尝试解决此问题。

换句话说,来自 FBX 导出器包

当 Unity 从 3D 建模应用程序(例如 Autodesk® Maya®)导入模型时,Unity 会创建一个模型Prefab,它是 FBX 文件内容的只读表示。除了更改导入设置之外,您无法在 Unity 中编辑模型预制件。当 FBX 文件在原始 3D 建模软件中修改时,Unity 会更新模型预制件。

您应该查看此软件包及其功能,它们是专门为 Unity 和 Maya / 3ds Max 之间往返 FBX 文件而设计的,


0
投票

查看 AssetDatabase 函数 RenameAsset。

文档:“重命名资产文件。”

var path = AssetDatabase.GetAssetPath(fbx);
var newName = "new name";

AssetDatabase.RenameAsset(path, newName);

重命名资产参考


0
投票

这是可行的。 重命名网格本身非常具有挑战性,但可以通过某些方法来完成。 我已经使用自定义资产后处理器完成并使用导入资产进行修改。 稍后您还需要为重命名集编写脚本,它的作用是将用户定义的设置传递给我们之前创建的 CustomModelProcessor 脚本。 完成此操作后,您只需重新导入所需的模型并在您创建的 customModel Postprocessor 中触发 On PostProcess 模型方法。

© www.soinside.com 2019 - 2024. All rights reserved.