说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也要注意。。。。