Home

win10代码长路径操作

之前有说过在win10下启用长路径的问题问题 win10下长路径异常,但是在unity的项目里,还是有些代码在堆长路径有异常的! 路径的问题 在默认的情况下,使用的通常是相对目录或者是类似c:/some/some1/name.txt这样的路径,但是当路径超过260的时候,基本所有操作结果返回的都是Could not find a part of the path! https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd 官方给了这样的解决方案\\?\! 但是有几个注意事项: 所有的/都必须转换成 \ 必须是完整的路径,eg:E:\a\b\...

Read more

光栅化算法

直线绘制 逐点比较法 正负法 数值微分算法 DDA bresenham算法 改bresenham 起始点\(P_0(x_0, y_0)\) 终点\(P_1(x_1, y_1)\) 逐点比较法 https://blog.csdn.net/ABC13222880223/article/details/83176512 正负法 https://blog.csdn.net/qq_26982531/article/details/69946738 数值微分算法 DDA 计算其斜率 \[k=\frac{\Delta y}{\Delta x}=\frac{y_1-y_0}{x_1-x_0}\] 步进的形式,已知 $P_i$ 那么其下一个点就可以算出...

Read more

光栅化

图片或者内容均来自 虎书 https://www.techritual.com/2021/02/10/253801/ 光栅化设备 输出 显示器 LCD(透视式) LED(发光式) 硬拷贝设备 喷墨打印机 热升华打印机 输入 数码相机 平板扫描仪 输出设备 显示器 简单介绍了一下显示器的一些特征; 发光式显示设备常见是LED,特点是它是由发光二极管点阵显示的,通过改变LED灯泡的...

Read more

Unity中Lua热更ab的方案

背景 目前使用的lua代码文件都是进过了Luajit生成的bytes文件,而且因为是动态生成,而且是难以直接修改,所以项目工程一般都不会对其进行版本管理,这样就导致每次生成的bytes文件的guid都会不一样! guid不一致 -g和不带-g的bytes文件不一致 由于以上两个原因,使得每次对AssetBundle进行hash值比较的时候,都有差异,使得每次热更包里都带有lua ab; 过程 过程有点多,这里还是一步一步说吧! -g的信息 项目刚开始发现问题的时候,因为调试需要异常的堆栈,所以在平时develop的时候,通常使用的都是-b -g的参数去Encode,而需要对外的时候仅仅使用了-g的参数去Encode。 -g去encode lua的时候,使得生...

Read more

apk替换静态库

背景 因为项目工程在手机平台上有bug,但是却只有部分apk容易复现,大部分都比较难复现或者干脆不出现了! 而且因为早期并没有预想到那些地方或许有问题,没有做好日志埋点,所有我第一个想到的就是直接替换apk中的.so文件,在新的.so中添加我想加的log 该apk工程是unity的项目 解包 这里使用的是apktool java -jar ./apktool.jar d ./test.apk -o ./test 以上指令就直接把apk中的内容解压了(这里是我自己的apk,因为是测试包,并没有加固之类的); 替换静态库 我们把新编译好的静态库替换掉原本静态库,直接在./test/lib/arm64-v8a下替换就可以了(我只打包一个cpu类型的!) 重打包 jav...

Read more

Internal的跨dll访问

背景 在Unity的项目中,经常遇到各种internal的方法或者是类,但是我又需要继承或者使用它,目前我的解决方案有一下几个: Reflection InternalsVisibleToAttribute IgnoresAccessChecksToAttribute 修改dll Reflection 反射,通过type获取其fileInfo、MethodInfo等 Field private T GetReflectionField<T>(Type superType, string fieldName) { var reflectFileInfo =superType.GetField(fieldName, BindingF...

Read more

UE使用cpp代码打开EditorUtilityWidget

平时写ue小工具的基本都是使用EditorUtilityWidgetBlueprint; 如果工具稍微一多,直接通过ContentBrowser的话,不是很方便! 所以我比较喜欢在Menu中 void FMyEditorModule::OpenFrameworkConfig() { // 因为我是放置在plugin中的,所以我这里不是/Game FString assetPath = TEXT("EditorUtilityWidgetBlueprint'/MyPlugin/Editor/BP_FrameworkConfig.BP_FrameworkConfig'"); auto asset = UEditorAssetLibrary::LoadAsset(asset...

Read more

UE Slate样式

先说明一下,这个是因为写插件的时候需要用到的,项目中如果有需要的话,也可以参考! 前提 在Module要使用Style之前,我们就已经需要对style进行注册了! void FMyEditorModule::StartupModule() { // 创建style FMyEditorStyle::Initialize(); ... } 还有在Module销毁的时候记得清理一下 void FMyEditorModule::ShutdownModule() { FMyEditorStyle::Shutdown(); } 注册style 为了防止多次生成一些对象,我这里使用了静态 TSharedPtr< FSlateStyleSet > FM...

Read more