1、遇到的问题
在使用Unity打包出来的IOS应用的时候,当外部来了一个电话或者需要去微信回一个消息的时候,需要我们离开当前Unity打包出来的IOS应用,当我们再次回到Unity打包出来的IOS应用的时候,就会碰到如下问题,字体内容显示成方块或者是缺失。
2、解决方案
1、在项目中新建一个名为CanvasUpdate的C#文件,然后粘贴以下代码到新建的这个C#文件中。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CanvasUpdate : MonoBehaviour
{
public static CanvasUpdate Main;
private int Num = 0;
private Font FontValue;
public Transform UINode;
public Font ArialFontValue;
private void Start()
{
Main = this;
}
private void OnApplicationFocus(bool hasFocus)
{
if (hasFocus)
{
// 应用程序从后台切回前台
Debug.Log("应用程序切回前台");
//FontValue = Resources.Load<Font>("MSYH");
// 执行相应的操作
OnFixFont(true);
}
}
public void OnUpdateFont()
{
OnFixFont(true);
}
public void OnFixFont(bool NewFontUse)
{
if(NewFontUse)
{
//Font.CreateDynamicFontFromOSFont("字体名称", 字体大小);
FontValue = Font.CreateDynamicFontFromOSFont("Arial", 16);
}
//bool use = false;
//foreach (Text er in GameObject.FindObjectsOfType<Text>())
//{
// er.GetComponent<Text>().font = FontValue;
//}
foreach (Text er in UINode.GetComponentsInChildren<Text>(true))
{
er.GetComponent<Text>().font = FontValue;
er.GetComponent<Text>().alignByGeometry = true;
//if (er.GetComponent<CanvasUUID>() == null)
//{
// if(!use)
// DebugText.text += "OnUpdateUINODE" + "\n";
// //er.GetComponent<RectTransform>().sizeDelta *= 1.2f;
// use = true;
// er.gameObject.AddComponent<CanvasUUID>();
//}
}
}
}
保存代码之后,回到Unity中,把CanvasUpdate的C#文件挂载到场景中的游戏物体上,然后把有问题的Text组件所依赖的父物体Cancas赋给UINode字段的值。(作者这里是TexasCanvas物体下的子物体Text出现了问题)
然后把有问题的Text组件中所依赖的字体文件赋给ArialFontValue字段的值。(作者这里是Unity中默认字体Arial出现了问题)
3、测试
以上步骤都做完后,就可以保存游戏场景,打IOS包进行测试了。