自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 资源 (5)
  • 收藏
  • 关注

转载 [Unity 3D] 盘点 Github 上的那些 AssetBundle 框架

三人行必有我师焉,大家看看有木有借鉴得地方。资源热更框架都逃不过 Unity AssetBundle 那一套,大家做轮子也就是实现各自的基于 AssetBundle 的工具链,包括但不限于:完善的 Editor AB 开发工作流,所有操作有可视化窗口有 self-host 测试环境,支持 Editor 下直接 AB 模拟加载资源加密设计分包策略,预设优化规则,保证不重复打包包体依赖关系整理版本更新逻辑、资源检测 、增量下载,边下边玩多线程下载、断点续传依赖加载,引用计数。

2023-12-02 11:12:55 187

转载 Unity通过PBXProject生成XCode工程

代码都需要加入到这里,注:AppleLogin.m在Apple目录中,Apple与Unity-iPhone.xcodeproj在同一级目录,不需要对Apple文件夹做任何操作,不要使用"Apple/AppleLogin.m",否则会找不着路径,必须使用Path.Combine。plist的修改需要结合文件本身的结构,推荐先在xcode中操作后,看plist中结构是怎么样的,再利用unity提供的接口进行修改。BuildSettings中的所有设置都可以通过上面两个方法设置,包括签名等设置,签名后面单独写。

2023-11-14 16:50:06 519

转载 Unity手册—Attribute汇总说明

内容取自官方API文档特性说明部分,用于开发参考,辅助开发提升开发效率;特性(Attribute)作用于脚本中的类、变量或方法的上,用[ ]包裹,用于表明其特殊行为,如,使变量在 Inspector 面板隐藏;部分特性还未使用过,且网上资料很少,所以欠缺解释,后期补足。

2023-11-14 16:47:31 116

转载 Unity 比较时间大小

【代码】Unity 比较时间大小。

2023-10-23 16:46:51 209

原创 Unity最新热更新框架 hybridclr_addressable

为了支持2019,需要修改il2cpp生成的源码,因此我们修改了2019版本的il2cpp.exe工具。你可以先把 [com.focus-creative-games.hybridclr_unity](https://github.com/focus-creative-games/hybridclr_unity) clone或者下载到本地,然后再 [install from disk](https://docs.unity3d.com/Manual/upm-ui-local.html)

2023-04-04 15:57:40 1884 3

转载 Visual Studio Code配置Unity开发环境教程

Unity开发插件C# for Visual Studio CodeDebugger for Unity (Unity的调试工具)

2022-06-15 17:35:29 4794

原创 正则表达式

目录元字符重复限定符分组()转义条件或 |区间[ ]正则进阶之零宽断言正则进阶之捕获和非捕获正则进阶之反向引用正则进阶之贪婪和非贪婪正则进阶之反义正则表达式匹配网站附录常用正则表达式

2022-06-01 11:04:22 146

原创 C#遍历删除字典Dictionary

使用foreach修改字典会报错private Dictionary<string, string> pools = new Dictionary<string, string>(); for (int i = 0; i < pools.Count; i++){ var item = pools.ElementAt(i); pools.Remove(item.Key);}

2022-04-08 11:33:02 3341 1

原创 android查看端口占用

adb shell netstat -t

2022-04-05 11:34:57 5393

原创 apktool反编译、编译、重签名

//反编译apktool.bat d -f a a.apk//编译apktool.bat b -o b.apk a//重签名jarsigner -verbose -keystore {证书}.keystore -storepass {密码} -signedjar {编译后名称}.apk {编译前名称}.apk {证书别名}

2022-04-03 16:41:07 315

原创 C#获取公网IP

阻塞方式请求,ipurl使用能连接的外网地址。//常用的境内外访问网站//https://1.1.1.1/cdn-cgi/trace//https://1.0.0.1/cdn-cgi/trace//http://104.16.22.1/cdn-cgi/tracepublic static string GetPublicIp(string ipurl) { string tempip = ""; try {

2022-04-03 16:34:10 1085

转载 图解动态规划

1小宇:闪客,我最近在研究动态规划,但感觉就是想不明白,你能不能给我讲讲呀?闪客:没问题,这个我擅长,你先说说提到动态规划,你最先想到的是什么?小宇:就什么子问题呀、状态转移方程呀乱七八糟的,哎呀不行不行,我一想到这些脑子又嗡嗡响了。闪客:你先别急,你先把所有的名词都抛在脑后,听我讲。小宇:好滴,你说吧。闪客:小宇我问你,从 1 一直加到 100 等于多少?1 + 2 + 3 + ... + 100 = ?小宇:5050!闪客:你这,怎么不按套路出牌呀,你应该说不知道。

2021-10-22 12:59:56 277

原创 游戏差异更新—BSDiff算法解析

为何需要差异更新?差异更新即在软件更新时只更新差异化的部分,以达到用最小的下载量完成软件的更新需求。该思想由来已久,从刚接触电脑时的操作系统、应用软件快速更新功能或填补漏洞,到迭代更加频繁的移动应用时代更多了节省下载流量费用的需求。尤其在移动游戏领域,随着手机性能的提升和玩家对游戏体验的追求,安装包亦是越来越大,并且会频繁的更新以不断给玩家带来更新的玩法和更为优化的体验。然而,这种频繁的更新也同样会带来负面的影响:更新包太大没流量;更新速度太慢错过了本该用来玩游戏的碎片时间;本地空间不足无法更新等问题,这些

2021-10-12 12:05:51 1334

原创 Lua错误处理

语法错误语法错误通常是由于对程序的组件(如运算符、表达式)使用不当引起的。一个简单的实例如下:-- test.lua 文件a == 2以上代码执行结果为:lua: test.lua:2: syntax error near '=='正如你所看到的,以上出现了语法错误,一个 "=" 号跟两个 "=" 号是有区别的。一个 "=" 是赋值表达式两个 "=" 是比较运算。另外一个实例:实例fora=1,10 print(a)end执行以上程序会出现如下错误:...

2021-09-28 15:01:56 1163

转载 Android权限(Permissions)

Android里面的权限是一种安全机制。Android权限主要用于限制应用程序内部某些具有限制性的功能使用,以及应用程序之间的组件访问。但是呢Android6.0之后,Google对权限做了一些优化,将一些权限的申请放在了应用运行的时候去申请(动态获取权限),所以Android6.0之后将权限向分为两类:Normal Permissions(正常权限,一般涉及用户隐私的风险比较小,系统会自动向应用授予该权限)、Dangerous Permission(敏感权限,一般是涉及到用户隐私的,用户必须明确向应用授予

2021-09-28 14:47:31 2518

原创 刘海屏判断

判断vivo是否有刘海屏/** * 判断vivo是否有刘海屏 * https://swsdl.vivo.com.cn/appstore/developer/uploadfile/20180328/20180328152252602.pdf * @return */ private static boolean hasNotchVIVO() { try { Class<?> c = Class.forName...

2021-09-28 12:10:38 354

转载 Unity二维码插件 ZXing

1.二维码常见的生成与识别途径1.草料二维码https://cli.im/text2.在软件中实现生成和扫描二维码 使用zxing实现zxing是一个用java写的开源项目,zxing.net是移植到.net工程上的。https://github.com/micjahn/ZXing.Net2.实现二维码的识别1.Unity工程2.让RawImage显示摄像头内容 1 2 3 4 5 6 7 ..

2021-09-28 11:18:24 1094

原创 正则表达式游戏中应用

正则表达式使用单个字符串来表示,匹配一系列符合某个语法规则的字符串,通常会被用来检索与替换某些文本。原文本字符:正常的文本:a,b,c...1,2,3...元字符:具有一些特殊意义的字符,是用来代替正常文本的字符{0}(占位符)。限定符:限定配备数量。元字符:1. . 匹配除了换行以外的任意字符。2. \w 匹配字母,数字,下划线,汉子。3. \s 匹配任意的空白符。4. \d 匹配任意的数字0~9.5. [7-9]匹配一个范围[7-9]。[A-Za-z0-9]6

2021-09-27 13:08:21 171

转载 Android增量更新(bsdiff使用)

简单了解 增量更新是什么? APP版本更新时不需要客户端下载新的apk,只需要下载差分包(两个apk的差异)。 差分包怎么得到?怎么用旧的apk和差分包合成新的apk? 使用bsdiff。 bsdiff是怎么工作的? 比较两个文件二进制,具体实现有兴趣可以去深挖。 举个例子方便理解:Git,就可以记录你每次修改、增加、删除,而且不是以文件为单位的,可具体到某个文件中的某一行,每次上传代码其实只上传的差异。 bsdiff咋用? 先下载bsdiff,解压看下都有什么

2021-09-27 13:03:08 810 1

转载 Android中apk瘦身

1. 结构分析首先上传一张瘦身前通过Analyze app分析出来的图片(打开方式:Android Studio下 ——> Build——> Analyze app):APK包结构如下:lib/:包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。大多数情况下我们可以只用一种armeabi-v7a,后面会讲到原因。assets/:包含应用可以使用AssetManager对

2021-08-02 14:39:31 1231

转载 Lua类封装

通过元表指向父类,并且当获取字段的时候将字段Clone到当前元表中,下次获取字段就可以直接获取数据。云风的封装适用于有多层继承关系的情况,使用简单,性能和内存优化上都有较好解决。--作者:云风--[[模拟继承结构的基类]]local _class = {}function Class(super) local class_type = {} class_type.ctor = false --构造函数 class_type.super = sup

2021-07-19 10:45:54 609

原创 Unity Assetbundle 异步加载中断

场景1string file1 = path + "common_texture.bytes";string file2 = path + "common_texture.bytes";var request = AssetBundle.LoadFromFileAsync(file1);var assetBundle = AssetBundle.LoadFromFile(file2);yield return request; Debug.Log("加载完毕.");会抛出错误:The A

2021-05-27 10:09:37 858

原创 unity Time.realtimeSinceStartup

realtimesincestartup表示的是从程序开始以来的真实时间。在游戏中,时间的流逝速度是可以调整的,比如我可以使用timeScale暂定游戏,或者2倍速进行游戏。因此如果想要真实的时间,就会出现问题。而采用realtimesincestartup就可以解决这个问题,因为它完全不依赖游戏的时间速度,它表示的是一个真实的时间流速。它的用法中,最大的作用就是不依赖游戏时间。我们会使用Time.time,或者Time.deltaTime,又或者使用粒子或者动画系统,它们是依赖于游戏时间的。当我们加速

2021-03-17 10:11:53 2436

原创 unity No AssetBundle has been set for this build

No AssetBundle has been set for this build.1.assetsNames 需要有 后缀名,且其路径从Asset开始,如:Assets/Game/BBBB/XXXX/LLLL/HHHH/BXLH.png路径错了会出警报:NoAssetBundlehasbeensetforthisbuild.从而导致打不出包2.文件需要序列化,生成.meta文件才能被识别打包,可以调用API AssetDatabase.Refresh 序列化文件信息...

2021-03-13 16:11:16 2714

原创 SourceTree 推送没有分支选择

复现使用 SourceTree Checkout 了 远程分支,本地分支与远程分支名字不匹配,然后 push 的时候就没有分支选择。解决打开 SourceTree 设置,将 Push branches 的值由 simple 设置为 matching 就行了

2021-03-13 16:06:11 1433

原创 磁盘io操作

现在市面上的磁盘安装转速来说有5400、7200、10000、15000转/分,这里只讨论3.5英寸的硬盘。IOPS和带宽是硬盘的主要参数之一,那这些硬盘的IOPS和带宽都是多少呢?我们不考虑实际情况的计算一下:IOPS(IO per second)是硬盘最重要的参数之一,存储系统一直在优化的一个参数。那么不同的硬盘IOPS是多少?怎么计算呢?先写结果5400 RPM的硬盘IOPS=7200 RPM的硬盘IOPS=8010000 RPM的硬盘IOPS=14715000 RPM的硬盘I

2021-03-08 10:42:12 984

原创 ulua 路径

在学习ulua时,require模块的根路径可以为项目的Lua文件夹或者ToLua文件夹(Editor下),但是在package.path和package.cpath中并没有看到当前项目的路径,那require是如何找到Lua和ToLua文件夹的路径的呢?ulua在初始化LuaState时,会先解析package.path, 并将其存入LuaFileUtils的SearchPaths中(LuaState.cs line:603),并将Lua和ToLua的目录添加其中(LuaState.cs line:1

2021-03-04 18:47:32 181 1

转载 Lua和C++交互总结

文不涉及lua语法学习,如果有需要,请移步:http://book.luaer.cn/一.lua堆栈要理解lua和c++交互,首先要理解lua堆栈。简单来说,Lua和C/c++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在lua中,lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图:二.堆栈的操作因为lua与c/c++是通过栈来通信,lua提供了C API对栈进行操作。我们先来

2021-03-02 17:50:56 319

转载 Android Studio3.X中dependencies

一、依赖变化当我们使用Android Studio3.X新建项目时会发现,默认的依赖由之前的compile更改为implementation了。3.0 以下版本build.gradle中依赖的写法:compile fileTree(dir: 'libs', include: ['*.jar'])1但在3.0后的写法为implementation fileTree(dir: 'libs', include: ['*.jar'])或api fileTree(dir: 'libs',

2021-02-23 17:45:47 860 1

原创 几种压缩算法的压缩和速度比较 LZ4太快了

Quick Benchmark: Gzip vs Bzip2 vs LZMA vs XZ vs LZ4 vs LZOEDIT:Add zstdContents[hide]1Selected archives 2Test conditions 3The file test results 3.1Compressed file size in bytes 3.2Compression ratio 3.3Compression time 3.4Decompr...

2021-02-23 10:13:12 2109

原创 钩子方法的概念

钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。其主要分为两大类:模版方法和基本方法,而基本方法又分为:抽象方法(Abstract Method),具体方法(Concrete Method),钩子方法(Hook Method)。四种方法的基本定义(前提:在抽象类中定义):(1)抽象方法:由抽象类声明,由具体子类实现,并以abst

2021-02-22 10:40:58 3881 1

转载 H5唤起App非权威指南

为什么需要唤起app?我们经常会看到网站上引导用户打开或者下载app,这是因为公司希望用户下载app后,会在上面停留更多时间,从而提高用户粘性;同时,app通常来说比H5更流畅,体验更好一些。如何唤起APP?1.URI 方案(URI Scheme)作为开发者,你一定对于URI(Uniform Resource Identifier)不陌生。它最常见的形式是URL,可以简单理解为网址。它的格式如下:我们以 http://example.com 为例,它的 scheme 就是 ht.

2021-02-02 11:05:47 246 1

转载 unity font研究小结

项目用ngui制作的界面。字体使用了unity默认的Arial,公布后在一些android手机上发现中文不显示,就此作了一些调查。參考unity的font说明文档:http://docs.unity3d.com/Manual/class-Font.html,http://game.ceeger.com/Components/class-Font.html(中文翻译版)1.使用动态(Dynamic)字体:优点,动态字基本包含全部字(中文等),大小可调,显示清晰,可用于动态文本。...

2021-02-02 10:32:30 1109

原创 cmd 常见命令

AT 计划在计算机上运行的命令和程序。ATTRIB 显示或更改文件属性。BREAK 设置或清除扩展式 CTRL+C 检查。CACLS 显示或修改文件的访问控制列表(ACLs)。CALL 从另一个批处理程序调用这一个。CD 显示当前目录的名称或将其更改。CHCP 显示或设置活动代码页数。CHDIR 显示当前目录的名称或将其更改。CHKDSK 检查磁盘并显示状态报告。CHK.

2021-01-27 21:17:39 124

转载 Gradle 基础

Gradle 基础Gradle 构建生命周期初始化阶段:解析整个工程中所有 Project,构建所有 Project 对应的 Project 对象 配置阶段:解析所有 Project 对象中的 Task,构建 Task 拓扑图 执行阶段:执行具体的 Task 以及依赖的 Task监听 Gradle 构建生命周期监听生命周期常用 API: beforeEvaluate {}:完成初始化阶段之后,配置阶段开始之前 afterEvaluate {}:完成配置阶段之后,执行阶段开始之前 gradl

2021-01-25 15:23:18 337

原创 行为树(Behavior Tree)

通过一个例子来介绍一下行为树的基本概念,会比较容易理解,看下图:这是我们为一个士兵定义的一颗行为树(可以先不管这些绿圈和红圈是干吗的),首先,可以看到这是一个树形结构的图,有根节点,有分支,而且子节点个数可以任意,然后有三个分支,分别是巡逻(Patrol),攻击(Attack),逃跑(Retreat),这个三个分支可以看成是我们为这个士兵定义的三个大的行为(Behavior),当然,如果有更多的行为,我们可以继续在根节点中添加新的分支。当我们要决策当前这个士兵要做什么样的行为的时候,我们就会自顶向下

2021-01-21 17:09:25 4924

转载 归并排序

基本思想  归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之  可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。合并相邻有序子序列  再来看看.

2021-01-20 18:36:35 81

转载 堆排序

预备知识堆排序  堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆  堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的

2021-01-20 18:32:20 74

转载 快速排序

上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人。那有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个 10 个数进行排序。首...

2021-01-20 18:27:52 138

转载 希尔排序

基本概念:希尔排序按其设计者希尔(Donald Shell)的名字命名,它是一种基于插入排序的快速排序算法,要了解希尔排序,必须先掌握插入排序的原理与实现。希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。步长的选择是希尔排序的重要部分。只要最终步长为1任何步长序列都可以工作(且步长要小于..

2021-01-20 18:25:10 125

位图字体生成工具

位图字体生成工具 ugui 、 ngui 自定义字体,美术字、、、

2018-08-13

Unity3D 插件NGUI Next Gen UI 3.9.9and3.6.8 两个版本

Unity3D 插件NGUI Next Gen UI 3.9.9and3.6.8 两个版本了

2017-12-06

云风pbc windows下xx.proto生成xx.pb 工具

云风pbc windows下xx.proto生成xx.pb 工具 .proto放置同级目录,双击.bat文件生成pb

2017-12-04

C#Zip库文件

C# Zip 解压 压缩 库文件 在C#环境,Unity3d开发中常用的工具

2017-12-04

splite3_x64.dll

splite3_x64.dll

2016-11-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除