You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity调用AssetDatabase.GetAssetPath获取材质路径返回空问题

问题原因

AssetDatabase.GetAssetPath 仅能查询项目Assets目录下已存在资源的对应路径。你代码中调用的Renderer.material属性被访问时,Unity会自动生成一份该材质的运行时克隆实例,这个实例是内存中临时生成的对象,没有对应项目内的本地资源文件,因此接口返回结果为空。

修复方法

将代码中访问的.material替换为.sharedMaterial即可。.sharedMaterial返回的是Renderer引用的原始材质资产,不是运行时生成的克隆对象,可以被AssetDatabase正常识别路径。

修复后代码:

using UnityEditor;
using UnityEngine;

public class MaterialPathTool : MonoBehaviour
{
    public GameObject obj;

    public void Start()
    {
        // 注意:AssetDatabase是UnityEditor命名空间下的API,仅能在编辑器环境运行,打包后无法使用
        Debug.Log(AssetDatabase.GetAssetPath(obj.GetComponent<Renderer>().sharedMaterial));
    }
}
注意点
  • 如果是写纯编辑器工具逻辑,不要把查询逻辑放在Start、Update这类运行时生命周期函数中,避免误访问.material生成冗余的克隆材质文件,污染本地资源库。
  • 日常开发中不要随意修改sharedMaterial的参数,修改会直接改动本地原始材质文件,所有引用该材质的对象显示效果都会被同步更改。如果是运行时需要修改单个对象的材质,再用.material拿克隆实例修改。

内容的提问来源于stack exchange,提问作者Vika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:27:17