Unity 中獲取 TextMesh Pro
Unity 中獲取 TextMesh Pro, 點 Unity.Editor.asmdef 進行編輯
搜索 TextMsh Pro 加入, 滑到下方點 Apply 套用
切換到 Editor 腳本
using TMPro;
//get
transform.Find("Text_ID").GetComponent<TextMeshPro>().text = "123";
Unity 中獲取 TextMesh Pro, 點 Unity.Editor.asmdef 進行編輯
搜索 TextMsh Pro 加入, 滑到下方點 Apply 套用
切換到 Editor 腳本
using TMPro;
//get
transform.Find("Text_ID").GetComponent<TextMeshPro>().text = "123";
今天打包版本測試轟炸超人發現這個問題
StackOverflowException: The requested operation caused a stack overflow. at (wrapper managed-to-native) System.String.FastAllocateString(int) at System.String.CreateStringFromEncoding (System.Byte* bytes, System.Int32 byteLength, System.Text.Encoding encoding) [0x00013] in <c9d3ffd4b98649ee9989e1908eaca019>:0 at System.Text.Encoding.GetString (System.Byte* bytes, System.Int32 byteCount) [0x00033] in <c9d3ffd4b98649ee9989e1908eaca019>:0 at System.Text.Encoding.GetString (System.ReadOnlySpan
1[T] bytes) [0x00013] in
at System.String.Ctor (System.SByte value, System.Int32 startIndex, System.Int32 length, System.Text.Encoding enc) [0x0006d] in
at System.String.CreateString (System.SByte
at (wrapper managed-to-managed) System.String..ctor(sbyte,int,int,System.Text.Encoding)
at UnityEngine.StackTraceUtility.ExtractStackTrace () [0x0002c] in
at (wrapper managed-to-native) UnityEngine.DebugLogHandler.Internal_Log(UnityEngine.LogType,UnityEngine.LogOption,string,UnityEngine.Object)
at UnityEngine.DebugLogHandler.LogFormat (UnityEngine.LogType logType, UnityEngine.Object context, System.String format, System.Object[] args) [0x0000b] in
at UnityEngine.Logger.Log (UnityEngine.LogType logType, System.Object message) [0x00027] in
at UnityEngine.Debug.Log (System.Object message) [0x00006] in
at ETModel.Log.Debug (System.String msg) [0x00000] in G:\OlgCase\bbm\source\Unity_Web\Assets\Model\Base\Log.cs:14
at ILRuntime.Runtime.Generated.ETModel_Log_Binding.Debug_8 (ILRuntime.Runtime.Intepreter.ILIntepreter __intp, ILRuntime.Runtime.Stack.StackObject
at (wrapper delegate-invoke) 1<object>_CLRMethod_bool(ILRuntime.Runtime.Intepreter.ILIntepreter,ILRuntime.Runtime.Stack.StackObject*,System.Collections.Generic.List
1
`
很明顯是出現了無限循環, 但不確定問題在哪, 測試了發現是 AIPlayer 造成的, 並且問題在尋路上
不知道為什麼這邊的計算公式如果設定 depth > 200 , 就會造成 depth = 39 就卡死
private void reCalcNonPath(int[,] matrixData, ref List<int[]> path, int bombCnt, int depth, int chunkH, int chunkW)
{
if (path.Count <= 0){
return;
}
int[] last = path[path.Count - 1];
//
if (depth > 30){
return;
}
改掉了就好了
在使用 Canvas 將物件層級提高後出現一個問題, 被提高層級的物件跟底下的 Button Click 全都失效了, 查了 google 說是在添加 Canvas 同時必須增加 Graphic Raycaster, 如下, 這樣就能解決問題了
最近在做新手引導系統, 遇到了些問題, 先說說新手引導的設計吧
一、新手引導UI
預設作法如下, 去看了下以前的做法似乎有些問題需要解決, 以前用 NGUI 做這塊, 需要將目標 UI 顯示層級提上來, 當時我的作法是把目標 Button parent 換成教學 UI Panel, 這樣就能保證要點擊目標一定會在最上層
現在項目使用 UGUI, UGUI 顯示層級是看 UI 順序的, 不然就是修改 Sorting Layer 或 Order in Layer
Sorting Layer
Sorting Layer 可以想像是一個大類, 在這個列表下渲染是按照這個清單順序的, 譬如
A物件
B物件
就算你設定比較高的 Order in Layer, A物件也不可能比B物件層級高, 這是因為在 Sorting Layer 就已經決定誰高誰低了
Order in Layer
在同一個 Sorting Layer 下你可以藉由 Order in Layer 決定先後, 值越大層級越高
在 Sprite Renderer 可以設定這兩個值
Spine 用的 Mesh Renderer 雖然沒有, 但其實都是繼承 render, 可以直接調用修改
mSpine_Teacher.GetComponent<MeshRenderer>().sortingLayerID = SortingLayer.NameToID("Spine");
mSpine_Teacher.GetComponent<MeshRenderer>().sortingOrder = 1;
最後呈現出來的效果是這樣
AssetStudioGUI 可以用來查看 Unity 包體內容, 可以多看看其他優質產品的資源內容怎麼做的
首先開啟 AssetStudioGUI
將 unity 的包給解壓, 用來測試的是之前上傳 Google Play 的 RummyGo aab包
AssetStudioGUI 點擊 文件->加載目錄, 選擇解壓目錄
切換到資源列表, 並點類型排序
可以直接查看包體內容