云岫丷 2021-11-08 16:20 采纳率: 100%
浏览 81
已结题

Unity 如何通过Addressable加载.pb文件

项目环境

Addressable
lua-protobuf
xlua

前提

之前使用UnityWebRequest和IO已经成功加载.pb文件,并且能够正常解析数据

#现有问题及尝试

1.使用自定义ScriptImpoter的方法让Unity识别.pb文件为TextAsset,然后通过Addressable加载这个TextAsset,使用pb.load方法加载TextAsset.bytes

using System.IO;
using UnityEditor.AssetImporters;
using UnityEngine;
[ScriptedImporter(1, "pb")]
public class PbImporter : ScriptedImporter
{
   

    public override void OnImportAsset(AssetImportContext ctx)
    {
        var text = File.ReadAllText(ctx.assetPath);
        var asset = new TextAsset(text);
        ctx.AddObjectToAsset("main obj", asset);
        ctx.SetMainObject(asset);
    }
}

结果:
解析第一个数据的时候会报type does not exists

2.使用protoc:load直接读取TextAsset.text

 local p=protoc.new()
    local respText=AddressableManager.GetTextAsset("RespFully.pb")
    assert(p:load(respText.text,"RespFully.pb"))
    local rqstText=AddressableManager.GetTextAsset("RqstFully.pb")
    assert(p:load(rqstText.text,"RqstFully.pb"))

结果:调用pb:load方法时报错

LuaException: protoc:70: RespFully.pb:2:1: name expected
stack traceback:
    [C]: in function 'error'
    protoc:70: in function <protoc:68>
    (...tail calls...)
    protoc:763: in function 'protoc.parse'
    protoc:1020: in upvalue 'do_compile'
    protoc:1024: in function 'protoc.compile'
    protoc:1034: in function 'protoc.load'

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月16日
    • 创建了问题 11月8日

    悬赏问题

    • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
    • ¥20 关于URL获取的参数,无法执行二选一查询
    • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
    • ¥15 marlin编译错误,如何解决?
    • ¥15 有偿四位数,节约算法和扫描算法
    • ¥15 VUE项目怎么运行,系统打不开
    • ¥50 pointpillars等目标检测算法怎么融合注意力机制
    • ¥20 Vs code Mac系统 PHP Debug调试环境配置
    • ¥60 大一项目课,微信小程序
    • ¥15 求视频摘要youtube和ovp数据集