1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 发布出来的APK部分Label上的字被压扁

发布出来的APK部分Label上的字被压扁

时间:2021-01-10 20:08:36

相关推荐

发布出来的APK部分Label上的字被压扁

项目使用Unity4.7.1配合NGUI3.5.5开发,发布出来的APK,发现部分Label上的字压扁了,两个字会出现重叠的情况,对比之后发现,被压扁的字Label的一个属性设为Bold,修改为Normal之后正常显示。

还有另外一种方法就是使用BBCode,在文字的前面加[b],精测试,可以正常显示,并不会拉伸。

项目中的预设那么多,不可能手动改的,自己写了一些编辑器类,由编辑器帮我们把这个事情做了。下面贴代码:

1 using UnityEngine; 2 using UnityEditor; 3 using System.IO; 4 5 public class PrefabWordProcessing 6 { 7[MenuItem("Game/将预设中所有UILabel上的fontStyle设为Normal状态")] 8public static void ProcessingPrefabLabel() 9{10 string filePath = Application.dataPath + "/GameRes";11 if (!Directory.Exists(filePath))12 {13 Debug.LogError("文件路径不存在,请检查。");14 return;15 }16 string[] files = Directory.GetFiles(filePath, "*.prefab", SearchOption.AllDirectories);17 if (files.Length == 0)18 {19 Debug.LogError("文件夹中不存在prefab文件,请检查。");20 }21 22 for (int i = 0, imax = files.Length; i < imax; i++)23 {24 string path = files[i].Replace("\\", "/");25 path = path.Substring(path.IndexOf("Assets"));26 Object tempObject = Resources.LoadAssetAtPath<Object>(path);27 if (tempObject != null)28 {29 GameObject go = GameObject.Instantiate(tempObject) as GameObject;30 UILabel[] labels = go.GetComponentsInChildren<UILabel>();31 if (labels.Length == 0)32 {33 GameObject.DestroyImmediate(go);34 Resources.UnloadUnusedAssets();35 continue;36 }37 else38 {39 //取得资源打包的标签40 string[] tempObjectLabels = AssetDatabase.GetLabels(tempObject);41 42 for (int j = 0, jmax = labels.Length; j < jmax; j++)43 {44if (labels[j].fontStyle == FontStyle.Bold)45{46 labels[j].fontStyle = FontStyle.Normal;47}48 }49 Debug.Log("保存预设成功,名字为:" + go.name);50 PrefabUtility.CreatePrefab(path, go, ReplacePrefabOptions.ReplaceNameBased);51 GameObject.DestroyImmediate(go);52 53 //把资源的标签重新设置回去54 tempObject = Resources.LoadAssetAtPath<Object>(path);55 AssetDatabase.SetLabels(tempObject, tempObjectLabels);56 Resources.UnloadUnusedAssets();57 }58 }59 }60 AssetDatabase.Refresh();61}62 }

使用这个代码时会出现错误信息m_InstanceID == 0,然后翻墙找了一下资料,有篇文章说是Unity的Bug,在循环调用PrefabUtility.CreatePrefab方法会出现,大概150次出现一个。原本4.6.9已经修复该Bug,但是4.7之后又出现了。下面是原文地址:

/threads/unity-4-7-m_instanceid-0-when-calling-prefabutility-createprefab.382615/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。