unity深度profile(deep-profile)
一、准备工作我这边用的是Unity2017.4.40,最后一个版本,用的mumu模拟器,有手机可以用手机。
二、打包选项
Development Build,刚需就这一个,不是网上说的还要Autoconnect Profiler,这个选项只是方便你连接机器而已。
Scripting Backend一定要是mono,只有个才能deep(2019i2cpp开始支持),官方文档里面有讲,如果你是没有修改启动的Activity,勾选v7应该是没问题的,如果你是修改的启动的Activity,一定要勾选x86,为了保险起见还是两个都勾选上。
以下三种处理情况情况1没有自定义AndroidManifest,就是使用unity自带的方式直接出包,直接安装就行了,对了记录一下包名,使用下面几个命令就能deep了。
123456789#这个命令是连接mumu模拟器,可以查询怎么连接其他模拟器或者手机(自行查错)adb connect 127.0.0.1:7555 #这个是启动的命令行参数,com.pp.test 就是你的包名,对应 Player Settings -> (我这里是安卓) Ident ...
Hexo自动部署Github同步Gitee
工具账号Gitee账号,Github账号,测试自动构建Gitee Pages
(Testbird)兼容性处理
简单描述(只是针对安卓)这篇文章主要是针对Unity开发的游戏Testbird的兼容性测试对应的报告进行的处理,自己项目进行Top600测试是通过率达95以上,下面针对报告中每一项进行说明处理。刘海屏,挖孔屏,水滴屏(文末有解决方案)刘海屏未做适配,主界面左侧部分内容被遮挡。刘海屏适配,做好刘海屏适配就没问题。
挖孔屏未做适配,界面左侧部分内容被遮挡。这个处理和刘海屏一样处理,处理完就能通过。
水滴屏未做适配,主界面左侧部分内容被遮挡。这个处理和刘海屏一样处理,处理完就能通过。
部分异形屏手机左侧留白过宽,建议优化。这个处理和刘海屏一样处理,处理完就能通过(这个主要是由于没有乘上UGUI的Canvas缩放)。
全面屏游戏未全屏适配,界面左侧留有黑边,现有的适配方案(ov机型, vivo y97,vivo z3青春版)这个某些机型会自带刘海屏适配,根据他们官网给的视频方案就是不遮挡ui就行了,但是Testbird是不给通过的,这个暂时没有解决办法。
游戏未全屏适配,界面上下留有黑边,现有的适配方案建议优化(华为机型)这个一般华为高端机型都有,但是就两个好像,对比了市面上的游戏基本的都是没 ...
Unity画中画(动态地图)
前言这个东西是干嘛的,比如我们在大地图中,要去完成某个任务,要进去小地图,但是或者要实现一个挂机功能,但是不影响本身场景的逻辑,或者又可以叫做无缝大地图,也可以叫做动态地图,这个东西主要有三个难点,一个光照设置一个是雾效,还有一个是寻路,这两个都是基于场景设置的,但是我们的小地图不同于大地图怎么办。
实现用到了两个开源项目 PrefabLightmapping,NavMeshComponents,一个是解决光照问题,一个是解决寻路问题。
逻辑方面,就是把场景制作成Prefab,按照PrefabLightmapping的教程实现就行了,NavMeshComponents也是一样,具体就是创建Prefab,把我们的主角传送到Prefab里面就是了。这里我们只解决最后一个问题雾效,这个用的是RenderTexture,因为我们画中画实现的就是用一个相机单独把我们的挂机渲染到UI上或者哪里都可以。
PrefabLightmapping这个技术关键点就是先烘焙出光照贴图,然后修改我Root节点下每个Render的属性达到光照效果。
保存的Render组件信息
核心的操作,修改LightmapS ...
Unity面经
基础
Animator的使用和机制 以及与Animation的区别
什么是弱引用?弱引用的使用和作用?弱引用和强引用的区别?
Unity的路径有哪些?对象池的使用?
了解过音频压缩吗,音频文件怎么降噪?了解过动画压缩吗,3DMAX如何进行骨骼优化?
各种排序算法的时间复杂度,实现快排?
C# lambda表达式和表达式树的用法?
了解过A*算法吗,简单说说
说一说状态机和行为树
RenderDoc和GPA调试模拟器
准备工作RenderDoc 12版本64位
GPA 20
mumu模拟器
夜神模拟器
RenderDoc 和mumu模拟器第一步设置环境变量,可以百度看如何设置 RENDERDOC_HOOK_EGL = 0
使用管理员打开RenderDoc,或者有提示允许就行了
第二步设置RenderDoc Tools -> Settings
第三步切换到启动界面 File -> Launch Application
第四步设置要调试的软件, mumu是 NemuHeadless.exe
第五步设置Global Hook
注意看,按钮灰了,不知道怎么启动??不要慌,直接启动我们的mumu模拟器,有GUI标识就成功了(一定要进去启动界面,不要只看广告界面),然后就可以RenderDoc的教程,可以直接看文档,
F12来一下
这样就截帧好了,夜神模拟器也是一样的。
MUMU模拟器设置这个是默认设置,如果你没有改动,可以直接使用,有改动,改成DX
InterGPA和夜神,Mumu第一步设置环境变量,可以百度看如何设置 RENDERDOC_HOOK_EGL = ...
Unity简单Hook
背景项目中我们是用Unity去跑AssetBundle,每次都要复制进SteamAsset文件夹,后面改了代码直接在加载的加一个宏,然后判断我们保存的AssetBundle的地址,同样也可以实现加载外部的AB,但是因为这个是实验性的东西,而且有些地方还是使用的SteamAsset,改动太大了,最好想到一个文件夹重定向的方法,也可以实现,但是需要第三方软件没有采用这种方式,后来想想能不能直接替换Application.streamingAssetsPath的实现,想过两种方式,替换UnityEngine.dll和Hook,先用第一种直接用dnsy去增加一个set属性,然后用dnsy替换之后发现是C++那边实现的,果断放弃,然后使用Hook,就是下面的实现方式了
工具我们要Hook,自然要使用一个Hook的相应的代码,功底不够直接上Github上找C#Hook,果然功夫不负有心人找到了下面几个
PlayHooky
MonoHook
UnityHook
果断选最简单的,反正我们不需要太多功能,直接用的是第一个。
示例12345678910111213141516171819202122232 ...
编译Mono热更
需要的工具Mono选择自己的版本分支
MinGw
Zip
Android NDK
第一步配置MinGW环境一路next,记住自己的安装路径,到了这一步全勾,installation下apply change
进入到安装目录,应该有一个msys/1.0,进入到这个目录后如果没有一个home,自己建一个,然后再在home下建一个目录,用自己的用户名命名,最后应该是
msys/1.0/home/xxx
配置环境变量,刚刚保存的路径,如下配置到环境变量中,可以自己测试配置是否成功,命令行下gcc -v 有反应就对了
我们把下载好的ndk复制到 msys/1.0/home/xxx/ 下, 运行完成就可以自己会解压,然后改名为android-ndk_auto-r10e
最终路径就是 大概就是 E:\MinGW\msys\1.0\home\xxx\android-ndk_auto-r10e
下载文件
clone https://github.com/Unity-Technologies/mono
切换到你自己的分支
修改文件这个修改是为了让我们编译器支持msys PrepareAndroidS ...
RT渲染特效和模型的研究
RT需求项目中我们有用到模型在ui上显示,一般有两种方式一种是直接挂模型,然后通过调整RenderQueue来保证渲染顺序,但是太过复制,没有使用
还有一种就是通过RT渲染到ui上,然后通过ui原生的渲染方式去保证我们渲染队列的正确,多一张RT的内存,我们选用的是rt的方式。
问题问题就是RT在渲染粒子的时候,我们使用的是不带通道的雪花片,在3d场景中通过下面的混合方式达到透明效果,我们的RT相机一般设置SolidColor模式,颜色全是0
第一次Alpha Blend
Particle & Background ==> RenderTexture
雪花片背景是黑色的我们要过滤掉黑色,参考滤色公式 ,最终表达为如下
结果色=255-[(255-基色)×(255-混合色)]/255
12Blend OneMinusDstColor OneBlend One OneMinusSrcColor
1234 Blend One OneMinusSrcColor // 混合公式是滤色,黑色作为透明色ColorMask RGBA// Mask保留RGBA
第 ...
UnityProfile真机
打包把这四个选项都勾上,第一个是必要勾的,第二个是profile,三四是调试使用的,这个教程是针对profile的
直接build,build完成后生成的apk在右下角会dev标志,没有就是不能开发包,不能调试和profile,重新打
BuildRun如果能直接BuildRun,然后直接能在模拟器上运行看profile,那么你可以不用继续看了
Profile按上面的教程生成一个dev的包,因为有可能我们根本用不上profile,而是打包机打的dev包,诸多限制用不到自己打包。
然后新建一个工程专门用来看profile,如果你还需要自己调试脚本,那么还是用原生工程吧,这个是为了让你的只用空工程看profile,一是为了不卡,而是为了更准确
先把我们的apk安装到手机或者模拟器,然后cmd测试adb是否有效,无效的话请自行 百度配置好环境变量,直接cmd adb,有反应就成了
然后再cmd连接我们的模拟器或者手机,我这用的是mumu浏览器 ,其他真机或者其他设备查询端口连接就行了,自行百度
adb连接mumu官方教程
adb connect 127.0.0.1:7555
连接成功 ...