說2個重點
開發環境始終不是真機環境,沒有程序員想犯錯,可事實就是沒有程序員能不犯錯
測試工具本身也是程序,並不是說程序錯或不好用,但極其容易出現平時開發中的問題:你會真的以爲你的以爲就是你的以爲
其實很多公司都在做一些實踐,也是有益的,但是很多爲了做而做的“優化”工作就未必那麼有效,或使程序員能力不能發揮
而最終你會發現你需要這種程序員,閱讀代碼能力的
這裏只是說說一些代碼案例,需要程序員對閱讀代碼有一些“理解”
之前我分享了不少可視化工具,但這不是
這下面的案例需要有一些“閱讀理解”
Profiler 的 DeepProfiling的作用
不開deepprofiling的情況
上圖是不開Deep的截圖,是不是感覺無法閱讀?
根本都不知道 PhysX.CcScene.ccdBroadPhase什麼意思,一大堆英文都沒見過的,和自己開發出入很大
但是等等.......
PhysX 看上難道不是c#的包名
ScScene 不像類名嗎?還是很臭名昭著的駝峯式命名哦
ccdBroadPhaseAABB
clothPreprocessing
colliderStep 這幾個方法名沒覺得命名的很好的嗎??
如下這麼寫,會不會比較容易“閱讀”??
using UnityEngine;
using System.Collections;
namespace PhysX
{
public class ScScene
{
void ccdBroadPhaseAABB() { }
void clothPreprocessing() { }
void colliderStep() { }
}
}
當然Unity內部並不用C#實現,但Unity確實,明顯地告訴你這些內部方法的"效能“
使用DeepProfiling的情況
如上圖,明顯的,開了DeepProfiling,會顯示(監測)一些我們自己寫的方法名,如上圖
當然也有一些方法看上去也還是雲裏霧裏,但至少說明了LuaTable,Dictionary 這些“高效”的我們熟悉的“效能”大戶出現了
這個截圖也是隨便的,但Unity確實如他官方上說的,開了DeepProfiling就會把每個方法(日常開發,非官方)Record下來
而目測也幾乎每個方法都有記錄,而且coroutine等 onTriggerEnter 官方效能大戶也是會單獨在Profiler顯示
可以說開Deep幫助很大了
用Profiler分析一些代碼案例
下面只寫3個案例,代碼邏輯,代碼流程,代碼框架就沒法具體展開講了,請自行腦補
案例一:子彈射出,受擊怪物受到傷害,碰撞體響應
public void OnTriggerEnter(Collider other)
{
if (owner == null)
return;
var otherUnit = other.GetComponent<NTGBattleUnitController>();
if (otherUnit != null && otherUnit.alive && otherUnit.group != owner.group && (mask & otherUnit.mask) != 0)
{
otherUnit.Hit(shooter, this);
//Debugger.LogError("減速");
//otherUnit.AddPassive(pBehaviour., owner, p: new[] { this.param[1] });
otherUnit.AddPassive(pBehaviour.passiveName, owner, skillController);
FXHit(otherUnit);
}
}
流程圖如上:這麼做有什麼Profiler的“效能”問題呢??
Animator.SetTrigger(keyName) 名字不對,則有一個Warning,
上圖沒能清楚的表達清楚,雖只是一個流程,但是所有碰撞都會通過OnTrigger觸發,即使能保證只是受擊怪物,那可能也是十幾個怪物,會觸發十幾遍這個流程,是十幾遍
(如果你以爲WARNING不算什麼,那麼真心建議放棄你以爲的以爲就是真相,的這種想法)
(又一個程序員比犯錯誤之一,你以爲不是多線程,但卻承受多線程的壞處)
你會收到一堆莫名的錯誤,而這又恰恰非常佔“效能”
所以,日誌要注意“沒紅色ERROR"是不足夠了,Warning也要注意。。。。