有效的 AssetBundle 会在任何 API 调用中引发空引用异常 (NRE)

侵略者

这个问题不是关于什么是空引用,这个问题是关于为什么有效的 AssetBundle 在我无法通过的 API 中抛出 NRE

我一直在将我的项目从使用 Resource 文件夹转换为 AssetBundles。我已经在“scriptableobjects”资产包中标记了我的可编写脚本的对象,并且我已经加载并将该包存储在“Assets/AssetBundles”文件夹中。

这是我构建资产的代码:

public class AssetBundleManager
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }

        //https://docs.unity3d.com/Manual/AssetBundles-Building.html
        BuildPipeline.BuildAssetBundles(assetBundleDirectory,
                                        BuildAssetBundleOptions.UncompressedAssetBundle,
                                        BuildTarget.StandaloneWindows);
    }
}

在查看下面的代码之前,这里有一个证据,证明 AssetBundle 在将要使用时不为 null:

在此处输入图片说明

构建资产后,我将实际加载这些资产及其资源:

public class X_AssetBundleManager : MonoBehaviour
{
    private static Maps _maps;
    private static AssetBundle _scriptableObjectsBundle;

    public static T LoadScriptableObject<T>(string assetName) where T : ScriptableObject
    {
        if (_scriptableObjectsBundle == null)
        {
            AssetBundle _scriptableObjectsBundle = AssetBundle.LoadFromFile("Assets/AssetBundles/scriptableobjects");
            if (_scriptableObjectsBundle == null)
            {
                Debug.Log("Failed to load 'scriptableobjects' AssetBundle!");
                return null;
            }
        }

        if (_scriptableObjectsBundle.Contains(assetName)) // NRE HERE
        {
            Debug.Log("DOES CONTAIN");
        }
        else
        {
            Debug.Log("DOES NOT CONTAIN");
        }

        try
        {
            // NRE HERE
            var all = _scriptableObjectsBundle.LoadAllAssets();
        }
        catch (Exception e)
        {
            Debug.LogError(e);
        }

        T obj = _scriptableObjectsBundle.LoadAsset<T>(assetName); // NRE HERE
        if (obj == null)
        {
            Debug.LogError("Failed to load " + assetName + "  in scriptableobjects");
        }
        return obj;
    }
}

_scriptableObjects变量不为空。它是一个有效的对象。但是,在其上调用 ANY api 会导致空引用异常。

我什至无法通过代码来查看什么是空值。AssetBundle 本身不为空,但任何调用都会导致这种情况。

关于如何进一步调试这个问题或可能是什么问题的任何建议?

雨果

AssetBundle _scriptableObjectsBundle = ...

你否决(隐藏)你已经存在的同名字段变量_scriptableObjectsBundle......所以这个外部字段_scriptableObjectsBundle仍然存在null而你实际分配的那个只存在于

if(_scriptableObjectsBundle == null) 

阻止 → 只需删除这个额外的 AssetBundle

_scriptableObjectsBundle = AssetBundle.LoadFromFile("Assets/AssetBundles/scriptableobjects");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

redux-saga api yield调用有效,但未返回任何数据

来自分类Dev

错误:在任何存储库中找不到有效的gem'sinatra / reloader'(> = 0)

来自分类Dev

Angular ASP.NET:Http Get Web Api 调用有效,但 Angular 未显示任何值

来自分类Dev

在任何给定间隔内查找数组中 5 个最大数的有效方法

来自分类Dev

如何在正确的路径中添加资产存储库?,在任何分支或标签中都找不到有效的 json

来自分类Dev

Excel:如何有效地检查是否在任何其他单元格中引用了选定的单元格

来自分类Dev

Postman 和 RestTemplate 的 API 调用中的主体参数相同,但只有 Postman 有效

来自分类Dev

PowerShell 4-Import-Module:未加载指定的模块“ SQLPS”,因为在任何模块目录中均未找到有效的模块文件

来自分类Dev

API调用在浏览器中有效,但在curl / wget中无效

来自分类Dev

如何通过框架API或任何其他有效方法查找VPN连接的状态?

来自分类Dev

Google Geocoding API-返回任何基于邮政编码的有效地址

来自分类Dev

Reporting Services中的简单SProc调用不返回任何数据,但查询有效

来自分类Dev

手动执行脚本有效,但在任务计划程序中无效

来自分类Dev

如何获取有效的访问令牌以从Postman调用Azure REST API

来自分类Dev

有效地批处理Spark数据帧以调用API

来自分类Dev

流星外部API调用有效,但客户端未定义

来自分类Dev

如果对 api 的调用返回有效的访问令牌,则 laravel 注册用户

来自分类Dev

对 Bitbucket Server 进行 REST API 调用并尝试传递 JSON 有效负载会导致错误

来自分类Dev

是否有任何(有效)C实现中的float不能表示值0?

来自分类Dev

如何使用hapijs检查请求中是否有任何有效载荷(POST)数据?

来自分类Dev

抓取对象且数组中没有任何重复项的最有效方法

来自分类Dev

为什么此API请求在Postman中有效,但在Django测试中引发错误?

来自分类Dev

从p4api.net中的挂起的更改列表中获取有效的FileMetaData

来自分类Dev

ansible不会在2.9版中扩展var,它在2.8版中有效

来自分类Dev

是否有任何解决方案可以有效地使用 Shopify API 创建 20000 多种产品

来自分类Dev

Web API参数调用中的空引用异常

来自分类Dev

Google Maps API在有效请求中返回“无效请求”

来自分类Dev

如何通过API查找OneDrive是否对Office365中的用户有效?

来自分类Dev

WSO2 API管理器中的有效负载字段验证

Related 相关文章

  1. 1

    redux-saga api yield调用有效,但未返回任何数据

  2. 2

    错误:在任何存储库中找不到有效的gem'sinatra / reloader'(> = 0)

  3. 3

    Angular ASP.NET:Http Get Web Api 调用有效,但 Angular 未显示任何值

  4. 4

    在任何给定间隔内查找数组中 5 个最大数的有效方法

  5. 5

    如何在正确的路径中添加资产存储库?,在任何分支或标签中都找不到有效的 json

  6. 6

    Excel:如何有效地检查是否在任何其他单元格中引用了选定的单元格

  7. 7

    Postman 和 RestTemplate 的 API 调用中的主体参数相同,但只有 Postman 有效

  8. 8

    PowerShell 4-Import-Module:未加载指定的模块“ SQLPS”,因为在任何模块目录中均未找到有效的模块文件

  9. 9

    API调用在浏览器中有效,但在curl / wget中无效

  10. 10

    如何通过框架API或任何其他有效方法查找VPN连接的状态?

  11. 11

    Google Geocoding API-返回任何基于邮政编码的有效地址

  12. 12

    Reporting Services中的简单SProc调用不返回任何数据,但查询有效

  13. 13

    手动执行脚本有效,但在任务计划程序中无效

  14. 14

    如何获取有效的访问令牌以从Postman调用Azure REST API

  15. 15

    有效地批处理Spark数据帧以调用API

  16. 16

    流星外部API调用有效,但客户端未定义

  17. 17

    如果对 api 的调用返回有效的访问令牌,则 laravel 注册用户

  18. 18

    对 Bitbucket Server 进行 REST API 调用并尝试传递 JSON 有效负载会导致错误

  19. 19

    是否有任何(有效)C实现中的float不能表示值0?

  20. 20

    如何使用hapijs检查请求中是否有任何有效载荷(POST)数据?

  21. 21

    抓取对象且数组中没有任何重复项的最有效方法

  22. 22

    为什么此API请求在Postman中有效,但在Django测试中引发错误?

  23. 23

    从p4api.net中的挂起的更改列表中获取有效的FileMetaData

  24. 24

    ansible不会在2.9版中扩展var,它在2.8版中有效

  25. 25

    是否有任何解决方案可以有效地使用 Shopify API 创建 20000 多种产品

  26. 26

    Web API参数调用中的空引用异常

  27. 27

    Google Maps API在有效请求中返回“无效请求”

  28. 28

    如何通过API查找OneDrive是否对Office365中的用户有效?

  29. 29

    WSO2 API管理器中的有效负载字段验证

热门标签

归档