zoukankan      html  css  js  c++  java
  • TextMesh Pro SpriteAsset Load From Assetbundle

    遇到问题

    我们项目分两个Unity的工程,Art(美术资源工程),Client(代码工程)

    在Art工程中的TextMeshProUGUI Text中使用Emoji,打包成AB之后,在Client运行时,spriteAsset的图集是从Resource目录读取出来的

    软件环境

    Unity3D 5.3.7p4

    TextMesh Pro 1.0.555.0b11(Jul 06.2017)

    KSFramework:https://github.com/mr-kelly/KSFramework 

    从Resource读取SpriteAsset

    TextMesh Pro的Resource目录设置文件TMPSettings.asset  用于设置默认属性,比如默认的字体,图集

    在Editor中运行,如果使用了Sprite标签,它会从默认图集中加载(ResourcexxspriteAsset.asset),比如我的设置文件

    image

    原理分析

    当Text中使用了Sprite标签时,在运行时,TextPro会生成两个Gameobject:一个Text(渲染文字),SubMesh(渲染图片)

    image

    image

    从Assetbundle加载spriteAsset

    分析实现原理之后,我们知道,运行时,SubMesh的SpriteAsset默认是从Resource加载出来的,所以我们要做的就是替换掉SubMesh中 SpriteAsset的图片。

    TextMeshPro的Text提供了一个接口方便我们替换掉这张图片

    Lua实现的伪代码:

    AssetFileLoader.Load("ui/spriteassets/emojidata.asset", function(isoK, result)
            if not isoK or result:IsNull() then
                return
            end
            for i, tmpText in ipairs(tmpTexts) do
                tmpText.spriteAsset = result
                local child = tmpText:GetComponentsInChildren(typeof(CS.TMPro.TMP_SubMeshUI),true)
                if child then
                    child.spriteAsset = result
                end
            end
    end)

    替换SpriteAsset后:

    注意查看 SpriteAsset的值,变成从ab中加载了。

    image

    文档资料

    TextMesh Pro的资料,可以参考我之前的博客:http://www.cnblogs.com/zhaoqingqing/p/7471499.html

    参考资料http://digitalnativestudios.com/forum/index.php?topic=1018.msg8140#msg8140

  • 相关阅读:
    回溯算法总结
    第四章总结
    第四章编程总结
    动态规划总结:
    第三章实践心得
    分治算法体会
    第二章上机实践总结
    代码规范与《数学之美》读后感
    第二次c++作业
    第一次博客作业
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/7471721.html
Copyright © 2011-2022 走看看