记录:Unity 第三方字体设置Assetbundle导致的闪退

Posted 菜鸟乎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录:Unity 第三方字体设置Assetbundle导致的闪退相关的知识,希望对你有一定的参考价值。

1、字体设置Assetbundle标签

假设预设物HomeView使用第三方字体。

打AB包时,如果该字体不设置Assetbundle,将会导致该HomeView的AB包大小变大(估计是把整个字体都写进了HomeView的AB包内)

不设置Assetbundle:

设置Assetbundle:

 所以为了减少安装包占用空间,就需要对所有引用的字体设置Assetbundle标签。

2、加载Assetbundle时闪退

字体设置Assetbundle标签后,打PC安装包,在加载Assetbundle时闪退。

筛查了好久,发现是其中一个字体导致的,去除其Assetbundle后不再闪退。

3、解决办法

字体引用其他字体作为后备字体,导致的出错。

把该引用清空后,再设置Assetbundle标签,结果不再闪退。

 

去除方法:

修改字体对应.meta文件,fallbackFontReferences列里字体的guid可以断开依赖

 

 修改guid为一个不存在的guid,刷新下Inspector里就没有fallback字体了

 

 打包启动程序,不再闪退。

大概是加载AB包引用字体时,丢失了内存闪退了。具体原因不知道是为何,欢迎各位大佬请留言请教,谢谢啦。

unity3d GUI字体设置

  1 using System.Collections;
  2 using System.Collections.Generic;
  3 using UnityEngine;
  4 
  5 public class click001 : MonoBehaviour {
  6     public bool WindowShow = false;
  7     private Rect rect = new Rect(30, 40, 150, 150);
  8 
  9     public Renderer rend;
 10 
 11     public int fontSize;
 12     public FontStyle fontStyle;
 13     public RectOffset margin;
 14     public RectOffset padding;
 15     public Font font;
 16 
 17     
 18 
 19     void Start()
 20     {
 21         //获取renderer组件
 22         rend = GetComponent<Renderer>();
 23     }
 24 
 25     
 26     void OnGUI()
 27     {
 28 
 29         //窗口id  窗口大小  窗口回调(定义窗口内视图) 窗口标题
 30         if (WindowShow)
 31         {
 32             GUI.skin.window.font = font;
 33             GUI.skin.window.fontStyle = fontStyle;
 34             GUI.skin.window.fontSize = fontSize;
 35             GUI.skin.window.margin = margin;
 36             GUI.skin.window.padding = padding;
 37 
 38             if (gameObject.tag == "pipe")
 39             {
 40                 GUI.Window(0, rect, onWindowOne, "管道");
 41             }
 42             else if(gameObject.tag == "stand")
 43             {
 44                 GUI.Window(1, rect, onWindowOne, "支架");
 45             }
 46             else if(gameObject.tag == "base")
 47             {
 48                 GUI.Window(2, rect, onWindowOne, "底座");
 49             }
 50             else if(gameObject.tag == "valve")
 51             {
 52                 GUI.Window(3, rect, onWindowOne, "阀门");
 53             }
 54         }
 55         
 56     }
 57 
 58 
 59     void onWindowOne(int winId)
 60     {
 61 
 62 
 63         GUI.skin.label.font = font;
 64         GUI.skin.label.fontStyle = fontStyle;
 65         GUI.skin.label.fontSize = fontSize;
 66         GUI.skin.label.margin = margin;
 67         GUI.skin.label.padding = padding;
 68 
 69         if (gameObject.tag == "pipe")
 70         {
 71             GUI.Label(new Rect(10, 10, 140, 40), "当前窗口是管道");
 72         }
 73         else if (gameObject.tag == "stand")
 74         {
 75             GUI.Label(new Rect(10, 10, 140, 40), "当前窗口是支架");
 76         }
 77         else if (gameObject.tag == "base")
 78         {
 79             GUI.Label(new Rect(10, 10, 140, 40), "当前窗口是底座");
 80         }
 81         else if (gameObject.tag == "valve")
 82         {
 83             GUI.Label(new Rect(10, 10, 140, 40), "当前窗口是阀门");
 84         }
 85 
 86         GUI.skin.button.font = font;
 87         //GUI.Label(new Rect(10, 10, 140, 40), "当前窗口id是" + winId);
 88         if (GUI.Button(new Rect(10, 50, 80, 30), "按钮1"))
 89         {
 90             Debug.Log("当前窗口id" + winId);
 91         }
 92         //定义窗体可以活动的范围 这个功能不知道为什么没有实现
 93         //GUI.DragWindow(new Rect(0, 0, 10000, 10000));
 94     }
 95 
 96     void OnMouseDown()
 97     {
 98         if (WindowShow)
 99         {
100             WindowShow = false;
101         }
102         else
103         {
104             WindowShow = true;
105         }
106         
107     }
108 }

 

以上是关于记录:Unity 第三方字体设置Assetbundle导致的闪退的主要内容,如果未能解决你的问题,请参考以下文章

Unity 3D 中NGUI插件设置中文label

unity3d GUI字体设置

unity pro xl编程的字体大小

unity的ui文字打包后变小了

Unity 把数字,英文图片变成字体

[Unity] 多语言字体的坑