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真机
20221025更新
2019的LTS版本可以勾选Autoconnect Profiler(2019.4.40)
2020的LTS版本不要勾选Autoconnect Profiler,不要勾选Autoconnect Profiler,不要勾选Autoconnect Profiler(2020.4.36)
2021的LTS版本不要勾选Autoconnect Profiler,不要勾选Autoconnect Profiler,不要勾选Autoconnect Profiler(2020.3.10)
打包把这四个选项都勾上,第一个是必要勾的,第二个是profile,三四是调试使用的,这个教程是针对profile的
直接build,build完成后生成的apk在右下角会dev标志,没有就是不能开发包,不能调试和profile,重新打
BuildRun如果能直接BuildRun,然后直接能在模拟器上运行看profile,那么你可以不用继续看了
Profile按上面的教程生成一个dev的包,因为有可能我们根本用不上profile,而是打包机打的dev包,诸多限制用不到自己打包。
然后新建一个工 ...
SVN Hook
需求在我们开发游戏,我们之前管理资源的时候,总是遇到不规范提交,比如贴图什么的没有带.meta,代码不是utf-8,什么没加日志,什么之类导致查问题查好久,就想着怎么不然让这些提交,或者提醒他们哪里不规范之类,就想着搞一搞
思路一些资源我们在unity提交到时候,直接通过unity去检查,然后提醒,但是想着美术不用unity怎么办,或者在unity文件夹外面怎么样,等等一些问题,好像坐在svn好一点,刚好svn也有 pre-comint, post-comit 等等一些hook,脚本,不熟悉这些是什么东西的可以自行查找资料熟悉一下。推荐小乌龟,安装的时候要勾选命令行行工具。
工具小乌龟服务端
小乌龟客户端
Python
实现我们用新建一个仓库,或者在原来有仓库找到下面的目录,仓库根目录,有下面几个文件夹,我们进入到hook,先不用关闭
在svn服务端选到管理Hook选项
出现这样一个东东,就是我们上面提到的pre,post等等,我们只要用pre就行了,双击
出来一个这个东西,把下面我的代码复制进去,然后点确定,会在我们的版本库根目录的hook文件夹生成一个pre-commit.c ...
Excel导lua表工具
##前言 工作需要用到lua表,基于java实现###
1 表格结构 第一行:字段名 第二行:策划描述 第三行:数据类型(后面有对应) 第四行:类型含义(策划用) 第五行:导表控制行 第六行:数据默认行(后面会有这行的用法) 导出的表名和文件名是sheet名(支持多个sheet)
2 导出lua中的结构(优化过的) InteractionTable.lua
3 使用方法 (如果是第一次使用)直接使用jar包运行即可,使用完成后有一个同级目录
1 工作目录配置在jar包的同级木新建一个config.properties或者直接用我的config.propertieServer:服务器表保存目录Client:客户端表保存目录lastPath:jar包自动生成的最后一个打开的工作目录
2配置好后直接运行jar包即可,如果想要看输出日志用命令行运行即可 java -jar ExcelTool.jar
参考链接 本文git
lua位运算
1 位运算这个是第三方实现的位运算blog使用lua实现位运算123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168--位运算--[[Description: FileName:bit.lua This module provides a sele ...
tolua中的一些分析
1 toLua 中Vector3:Add() 和 运算符+ 以及逻辑运算1234567891011121314151617181920212223242526272829303132local va = Vector3.zerolocal vb = Vector3.onelocal x1 = os.clock()for i = 1, 100000 do va = va + vbendlocal x2 = os.clock()print("first time ",x2 - x1,tostring(va))local va = Vector3.zerolocal vb = Vector3.onelocal x1 = os.clock()for i = 1, 10000 do va = va:Add(vb)endlocal x2 = os.clock()print("second time ",x2 - x1,tostring(va))local va = Vector3.zerolocal vb = Vector3.onelocal ...
unity5.x动态替换闪屏设置
方式1(简单)直接通过文件拷贝直接覆盖掉我们的源Splash,保证.meta文件不改变就好了,不会丢失引用。
方式2(推荐)这个是我们的重头戏,通过反射来我们的闪屏,反射很强大的,直接贴代码了,为什么能这样做?为什么我知道有这个属性可以实现设置闪屏?
首先我们分析一下,为什么我们拷贝一个工程后可以为什么可以保存一些设置,这个推荐看一下unity官方教程,我们的引用都是保存在文件里面,我们称为复合文件,就一个资产文件可以引用多个文件,这个文件的引用保存在自身里面,推荐用文件编辑器打开一下prefab,基本上就能理解复合文件,这些这个文件又是怎么显示在我们unity里面,答案是序列化,这里我们知道ProjectSettings的所有配置都保存在SerializedProperty下,然后用文本编辑器打开,打开乱码的自行设置一下序列化类型(百度),看到了这些有基础的大概都明白了,YAML语法序列化,我们要找??接第一种方式为什么我可以直接覆盖图片达到效果??这里自己思考一下,直接复制我们文件的guid到文件里面查找,大概会找到这样一个东西(加入你自己手动设置了闪屏的话)
看到这里你应该会自 ...
高性能的lua代码
1 变量访问速度 local > upValue > Global1234567891011121314151617181920212223242526272829local x1 = os.clock()for i = 1, 100000 do local a = 10000 a = a * iendlocal x2 = os.clock()print("local speed", x2 - x1)local x1 = os.clock()local a = 10000for i = 1, 100000 do a = a * iendlocal x2 = os.clock()print("upValue speed", x2 - x1)local x1 = os.clock()a = 10000for i = 1, 100000 do a = a * iendlocal x2 = os.clock()print("global speed", x2 - x1)--local speed ...