在平時開發游戲過程中,遇到一些編寫代碼很繁瑣的問題. 我發現我團隊中每個人都會遇到,就算打寫出來分享下經驗.
條件斷點
利用IDE提供的工具, 右鍵斷點的時候 輸入條件, 當條件達成的時候,斷點才能命中. (以前不知道這個功能總是要關閉游戲->編寫代碼-> 重新運行游戲 –> 查看結果 這個流程非常麻煩)
class Program { static void Main(string[] args) { for (int i = 0; i < 100; i++) { if (i == 50) //利用條件斷點,不寫代碼情況下 斷點到某一個條件 { Console.WriteLine("我斷點到了"); } } Console.ReadKey(); } }
運行表達式
你在想在某一個時段運行xxx代碼, 可以通過以下方式. 選擇某一個變量右鍵-> 快速監視
利用反射更好的編寫測試代碼
在我編寫代碼的時候,需要編寫一些測試工具方便調試游戲, 但是在編寫一些測試代碼的時候, 總是為了方便,快速不小心破壞了代碼的原有結構, 比如一個字段private 為了快速的訪問到 就改成public. 我寫了階段簡單實用的代碼
public static class RefStatic { public static FieldInfo RefFieldVal(this object t, string name) { FieldInfo info = t.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); return info; } public static FieldInfo RefStaticFieldVal(this object t, string name) { FieldInfo info = t.GetType().GetField(name, BindingFlags.Static | BindingFlags.NonPublic); return info; } public static FieldInfo RefSetFieldVal(this object t, string name, object val) { FieldInfo info = t.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); if (info != null) info.SetValue(t, val); return info; } public static FieldInfo RefSetStaticFieldVal(this object t, string name, object val) { FieldInfo info = t.GetType().GetField(name, BindingFlags.Static | BindingFlags.NonPublic); if (info != null) info.SetValue(t, val); return info; } public static PropertyInfo RefSetPropertyVal(this object t, string name, object val) { PropertyInfo info = t.GetType().GetProperty(name); if (info != null) info.SetValue(t, val, null); return info; } public static MethodInfo RefExecuteMethod(this object t, string name, object[] parameters) { MethodInfo info = t.GetType().GetMethod(name, BindingFlags.NonPublic | BindingFlags.Instance); if (info != null) info.Invoke(t, parameters); return info; } }
使用的栗子:
if (GUILayout.Button("生成全部單元格")) { var bag = (Panel_CommonBag)target; GameObject[] go = (GameObject[])bag.RefFieldVal("m_CellList").GetValue(bag); for (int i = 0; i < go.Length; i++) { KnapsackColumn k = go[i].GetComponent<KnapsackColumn>(); k.CreateCell(); } }