优化Unity项目编译速度-后续

优化Unity项目编译速度后续篇…感谢@wxp提供的非常有用的反馈!

之前在优化编译速度的时候,我试图dll化遇到的一个障碍是不同平台需要编译用宏区分的代码,但是guid/fileID不一致。结果发现我是完全想当然了,Unity竟然已经自动做好了映射(下面均为Unity 5.3.6测试结果,尚未找到相关文档…)!

Read More →
HIT图形分析

填坑向…之前和群里一个朋友讨论HIT的影子是咋实现的,后来验证了下发现自己之前想错了(逃。后来还看了下它的Bloom做法,效果还是挺好的。这里大力感谢@Hinatia和@LeLe给予的帮助和点拨,嘿嘿

影子

hit_shadow

Read More →

记录用…之前在Customized Adreno Profiler里修改过dll来修BUG…最近又捡起这个工具(我下的最新版本是4.0.5511.5192),修了一个崩溃错误

System.NullReferenceException: 未将对象引用设置到对象的实例。 在 System.Windows.Forms.DataGridViewBand.set_Thickness(Int32 value) 在 QXProfilerControls.TraceViewES20.PopulateIndexAndElementBuffers(Object o) 在 QXProfilerControls.TraceViewES20.treeListViewDrawCalls_AfterSelect(Object sender, ObjectEventArgs e) 在 LidorSystems.IntegralUI.Lists.ListBase.OnAfterSelect(ObjectEventArgs e) 在 LidorSystems.IntegralUI.Lists.TreeListView.set_SelectedNode(TreeListViewNode value) 在 LidorSystems.IntegralUI.Lists.TreeListView.ProcessNodeSelection(TreeListViewNode node, Boolean performTest) 在 LidorSystems.IntegralUI.Lists.TreeListView.OnMouseDown(MouseEventArgs e) 在 System.Windows.Forms.Control.OnMouseDown(MouseEventArgs e) 在 System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

这次就不用非常蛋疼的反汇编出整个VS工程,直接用Reflexi简明教程里的方法精确修改函数就行啦~ 注释了三段代码搞定

ps. 虽然官方已经废弃Adreno,但是我觉得比SnapDragon好用啊啊啊

Read More →

上周有半天在调整shader fallback,主要测试了下texCUBElodtex2Dlod在GLES 2/3下是否能正常表现。

adreno profiler表明UNITY_SAMPLE_TEXCUBE_LOD在GLES3下会使用textureLod,在GLES2下回落到textureCUBE,没毛病~

GLES3_PBR

Read More →
优化Unity项目编译速度

这个是最近一段时间带着子川一起做的一个小东西:如何优化大项目C#编译速度。这个idea主要是因为使用了slua之后,每次修改C#部分编译实在是太慢了… 下面将介绍两个不同的思路,心急的朋友可以直接看第二个解决方案及实战,因为这个说穿了其实就一句话,写第一部分只不过是因为折腾了非常久的MonoImporter/PluginImporter/MonoScript结果发现没用上而不爽(逃

测试环境

我使用的是之前比较lua解决方案里的slua工程,引擎版本Unity 5.3.6f1(其他设备信息跳过因为都是在同一台电脑上…)。在测试之前还需要写一个脚本来统计编译时间,这里简单粗暴的写了一个小脚本去不断刷新EditorApplication.isCompiling即可;顺便因为每次编译完成之后重新加载dll会导致static bool compiling丢失,因此保存一下。

Read More →
利用Projector实现动态阴影

很早之前想整理的一篇内容,之前守护的时候利用Projector实现了动态的阴影(见Teaser),接下来的几个项目目前也会用这个思路继续做下去。

下面将分几个部分来介绍Projector实现的动态阴影:原理,与Unity自带的ShadowMap优劣比较,以及坑和进一步优化。

Read More →
Android 7升级须知

最近守护要上GP,G家要求最好支持Android 24的targetSDK。然后硬生生周末被坑了两天…主要有两个问题需要强烈注意!

Read More →
Android下利用Hook实现mono dll加密

Unity的代码加密是一个有点麻烦的事情,相对iOS的IL2CPP,安卓里直接存放的dll很容易被ILSpy这种工具打开。网上有一些资料,如Unity3D研究院之Android加密DLL与破解DLL .SO,常见的思路都是修改mono源代码后重新编译;但是这样有一个麻烦的地方在于每次升级Unity版本之后都需要重新编译对应版本的libmono.so出来…

后来Unite 2016的时候和朋友聊天,学到了一个新思路——直接用Hook的方式来解密,这样就可以直接使用Unity自带的libmono.so解决问题~

Read More →

今天大黄在群里提出了一个非常奇怪的问题:

public Transform Parent = null;
void Start ()
{
    //Transform Parent = null;
    Transform SelfTransform = GetComponent<Transform>();
    Transform a = Parent ?? SelfTransform;
    Transform b = Parent != null ? Parent : SelfTransform;
    Debug.Log(a == b);
}

竟然返回了False!难道是null coalescing operator挂了?

Read More →

RectMask2D在Unity 5.1/5.2里有个BUG(现在已修复),今天又有朋友在群里提到了:ScrollRect里的元素有时候不显示,需要拖动一下才好

rectmask2d_bug

Read More →