SDK接入记录和坑
ShareSDK在使用Unity接入shareSDK(版本:1690970592952126144.05)遇到的问题
按照官网中所说,只需在launcherTemplate.gradle中添加相应平台的id和key即可
但是在实际过程中,发现分享的时候(主要测了分享微信),提示包名不对,请与开放平台包名一致的错误.检查发现并没有问题, 后来发现也需要把挂到场景中脚本ShareSDK中devinfo中相应的平台id也要修改, 属实是坑, 官方文档也没写. shareSDK这个sdk做的还是比较差劲
Dotween的优化以及注意事项
方法记录优化记录注意事项:不要在OnDestory或者OnDisable中Kill123456789public Transform tf;void Start(){ tf.DoMove(Vector3.one,1f).SetLoops(-1);}void OnDisable(){ tf.DoKill();}
上述代码很容易引起 tf miss错误,原因就是tf可能在场景跳转销毁的比这个脚本所在的物体要早,那么此时就会找不到tf,随机报错
C# Linq
C# 中的语言集成查询 (LINQ) | Microsoft Learn
LINQ(Language Integrated Query)是一种C#语言中的查询技术,它允许我们在代码中使用类似SQL的查询语句来操作各种数据源。
Linq有两种查询语法
表达式查询 查询关键字 - C# reference | Microsoft Learn . 查询表达式基础 (LINQ) - C# | Microsoft Learn
链式查询
特性和注意点Linq具有延迟执行特性
123456789List<int> numbers = new List<int>() { 1, 2, 3, 4 };//此时这里的集合未执行 里面其实没有任何元素var values = numbers.Select(x => x);numbers.Add(5);//foreach 之后才执行 5也会输出foreach (var value in values){ Debug.Log(value);}
表达式查询…
链式查询Qu ...
Unity接入豆包AI
官网
火山方舟管理控制台 (volcengine.com)
Bot API V2–火山方舟大模型服务平台-火山引擎 (volcengine.com)
代码接入
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 ...
TextMeshPro
TextMeshPro文档[官方文档](TextMesh Pro Documentation | TextMeshPro | 4.0.0-pre.2 (unity3d.com))
Unity 中的 TextMesh Pro 简介 |科德科 — Introduction to TextMesh Pro in Unity | Kodeco
[UGUI图文混排一]TextMehPro(TMP)使用手册 - 知乎 (zhihu.com)
动态/静态字体区别动态字体资源 |文本网格专业版 |4.0.0-pre.2 — Dynamic fonts assets | TextMeshPro | 4.0.0-pre.2 (unity3d.com)
TextMeshPro现在又自动扩容机制,即指定字体自动使用字体中的文字,不用手动生成,代价是稍许消耗.
动态字体需要保留原来的字体文件(.ttf.otf),不然无法动态生成,这意味者会增大包体,而静态字体可以生成之后删除
制作中文字用得到的常用字
wy-luke/Unity-TextMeshPro-Chinese-Characters- ...
Unity中的内置资源以及打AB包注意事项
关于Unity中的内置资源内置资源主要分为两个来源:Resources/unity_builtin_extra 和Library/unity default resources
可以通过代码得到资源类型
12var assets = AssetDatabase.LoadAllAssetsAtPath("Resources/unity_builtin_extra");var assets2 = AssetDatabase.LoadAllAssetsAtPath("Library/unity default resources");
Resources/unity_builtin_extra下资源对应的guid始终为0000000000000000f000000000000000。
Library/unity default resources下资源对应的guid始终为0000000000000000e000000000000000。
Library/unity default resources这里面 ...
UnityEngine.Object和System.Object
由编辑器引发的思考,普通类是UnityEngine.Object? 起因是我想在Unity的Inspector界面绘制一个普通类(类似每个Mono脚本的Script字段),一个普通类应该默认继承的是System.Object,而使用EditorGUILayout.ObjectField绘制的是一个UnityEngine.Object,该如何绘制呢?
我写了个测试代码如下:
1234567public class NewClass { public void Print() { Debug.Log("this NewClass"); }}
1234public class NewMonoBehaviour2 : MonoBehaviour{ public UnityEngine.Object obj;}
此时我将新建的普通类拖上去居然能拖入!!!那么自己建的普通类属于UnityEngine.Object吗???
然后我又答应了一下这个obj所在的父类
12345678910111213141516 ...
书记:《Unity游戏优化第三版》
内容来自《Unity游戏优化第三版》,书中内容也不一定全对,有比较基础的部分,做个简要记录
第二章:脚本策略
获取组件采用泛型获取即:GetComponent<T>
移除MonoBehaviour中空定义,即如果不需要Update OnGUI等Unity的回调函数,直接删除
避免在运行时修改Transform的父对象
在Unity早期版本中,Transform组件的引用通常是在内存中随机排列的也就是在多个Transform迭代是相当慢的,会存在缓存丢失的可能
修改GameObject的父节点为另一个对象不会造成显著的性能下降,因为Transform操作起来像堆数据结构,插入和删除的速度相对较快
但是在Unity5.4以后,Transform组件的内存布局发生了很大的变化Transform组件的父子关系操作起来更像动态数组,Unity尝试将所有共享相同的父元素 Transform 按顺序存储在预先分配的内存缓冲区中的内存中,并在 Hierarchy 窗口下的深度进行排序这样做的好处就是可以进行更快的迭代,尤其是物理和动画系统。
缺点:1.如果将一个 GameObject ...
Unity&Zapworks
Unity使用zapworks开发webgl平台AR项目简介
Zapworks官网
支持webgl,android,ios三个平台
支持的技术有:
图像跟踪(Image Tracking)
面部跟踪(Face Tracking)
即时世界跟踪(Instant World Tracking)类似slma技术
其他具体看官网
注意事项图像识别需要训练自己的图片对象 打开Zappar->Editor->Open Image Trainer
选择使用即可
自定义开始模板语言官方的语言很多都不支持
根据办法:Camera Permission Message - Universal AR - ZapWorks Forum
下载回答中custom_permission.zip
然后修改对应的index.html文件,然后修改permission.js文件里面的注释(这段注释代码是插入html解释)
如下:
在unity中打开Zap ArSetting
1234567891011121314//修改index.html文件中代码<scrip ...
Unity小记
Camera.Main问题 camera.main是个静态属性,用起来好用,但是其中内部使用的是GameObject.FindGameObjectWithTag`
所以再Update或者经常使用这个函数的地方需要注意。
这个问题也直接导致了UGUI相关的耗时,在Canvas Renderer modes使用Screen Space-Camera或者World Space的时候如果要获取相机使用内部函数也会导致一些问题
12345678910111213141516171819namespace UnityEngine.UI{ [AddComponentMenu("Event/Graphic Raycaster")] [RequireComponent(typeof(Canvas))] public class GraphicRaycaster : BaseRaycaster {//…… public override Camera eventCamera { ...
常见设备分辨率
常见分辨率IOS
分辨率
比例
设备
960 x 640
3:2
iPhone 4S
1136 x 640
16:9
iPhone 5, iPhone 5C, iPhone 5S
1334 x 750
16:9
iPhone 6, iPhone 6S, iPhone 7, iPhone 8
1920 x 1080
16:9
iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus, iPhone 8 Plus
2208 x 1242
16:9
iPhone X, iPhone XS, iPhone 11 Pro
2436 x 1125
19.5:9
iPhone XR, iPhone 11
2688 x 1242
19.5:9
iPhone XS Max, iPhone 11 Pro Max
2532 x 1170
19.5:9
iPhone 12, iPhone 12 Pro
2778 x 1284
19.5:9
iPhone 12 Pro Max
2340 x 1080
19.5:9
iPhone 12 ...
Objective-C基础
来源于视频https://www.bilibili.com/video/BV1NJ411T78u
简要介绍
OC是扩充C的面向对象编程语言,本质上还是C语言
所以OC中是可以写C语言的,也是完全可以兼容C语言的(也就是可以在OC中写C语言)
OC文件名后缀是.m, m代表message 代表OC中的消息机制,OC大多以NS开头,是因为NextStep开发.
#Import指令
是c语言 #include的增强版 无论inport多少次 只会包含一次
作用是导入库
Foundation框架
基础 基本,提供了一些基础功能 一些数据类型
@autoreleasetpool 自动释放池 相当于c# using
一些占位符(c语言)
占位符
说明
示例
%d
int
%f
float 浮点类型
NSLog(@"num=%f",100f)
%lf
double类型
%hd
short int
%ld
long
%lld
long long
%u
unsigned
%c
char类型
%s
c ...
热更新系列(二)——HybridCLR(huatuo)
关于HybridCLR[官网](HybridCLR | HybridCLR (code-philosophy.com))
HybridCLR改进了unity的Il2cpp部分,使得其能”解释”执行一些代码,每个unity都可以在安装文件下找到\Data\il2cpp\libil2cpp, HybridCLR就是改进了这一部分.
具体查看:安装HybridCLR | HybridCLR (code-philosophy.com)
原始il2cpp是AOT运行时,不支持动态注册dll元数据。我们轻微改造了metadata管理模块,插入了一些hook代码,支持动态加载dll元数据
安装依赖模块安装HybridCLR
Unity Hub 安装相应的IL2cpp模块
Windows
Win下需要安装visual studio 2019或更高版本。安装时至少要包含 使用Unity的游戏开发 和 使用c++的游戏开发 组件。
安装git
Mac
要求MacOS版本 >= 12,xcode版本 >= 13,例如xcode 13.4.1, macos 12.4 ...
热更新系列(一)——.Net工作机制
Net 概念什么是.NET .NET framework .NET core .NET Standard
.NET framework是针对windows平台下的应用.现在的版本是.NET Framework 4.8,很有可能这是.NET Framework的最后一个版本了。在未来并没有计划有新的.NET Framework版本
.NET Core是开源跨平台开发,NET Core 3.0支持了WPF和Windows Forms。.NET Core 3.0 还支持UWP,WPF和Windows Forms三者的开发。
.Net Standard 是一个规范,它定义了Net Framewoek和Net Core必须实现的Api,它的出现为各种平台上开发的.Net人员解决了代码共享问题,但是仅用于开发类库,意思就是说如果你的类库是Net Standard规范的,那么此类库既可以是Net Framewoek也可以是Net Core类库.
.NET是.NET Framework和.NET Core核心的结合,旨在统一.NET平台,微软将其描述为“.NET的未来”
Net工作过程原理
...
Unity & IOS
准备工作设备苹果电脑安装Xcode,苹果手机或者ipad
Unity安装IOS模块
其他证书:development证书或者distribute证书和对应描述文件(.mobileprovision)
打包苹果流程注意:不要有中文路径!!!我使用的是windows电脑发布工程,然后使用Mac电脑发布,为了方便,我在window磁盘添加了一个共享文件夹,使用Mac访问共享文件夹,Xcode直接打开工程,这样就不用传来传去了. 当然也可以直接使用MacUnity发布
Win中Unity中发布到共享文件夹
Mac中XCode直接打开共享文件夹中工程
Unity中发布工程设置Icon,最好用一个1024*1024的图,直接设置为DefaultIcon就行了
设置Bundle Identifier,一定要和证书保持一致(也就是和你苹果后台app包名一致)
然后直接Build就可以了,打出的是一个Xcode工程,要求发布的文件夹是一个空文件,所以重复打包同一个文件夹,最好删除原来的或者把里面的文件都删了
XCode打包一定要注意磁盘空间够用,不然有很多问题,确保有10G以上
我使用的 ...
Unity & Android
Unity调用Android这么做方便,但是对于一般人而言,不太会写,而且容易拼写错误
所有还是使用AS导出jar包或者aar包,亦或者直接把写好的java代码放在unity/plugins/android目录下面
新建AS工程然后导入unity下路的classes.jar包, 2019版本及以上版本中classes.jar包中可能没有UnityPlayerActivity,需要单独重新导入
classes.jar路径:xx/Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
UnityPlayerActivity:xx/Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player
新建一个Activity继承UnityPlayerActivity,然后在里面写一些逻辑代码
如果只是工具类 不想继承UnityPlayerActivity,那么自己规定好包名使用静态方法调用即可
如 ...
UnityEditor合集
MenuItemMenuItem(string itemName, bool isValidateFunction, int priority)
“itemName:菜单名称路径
“isValidateFunction:默认为false,如果为true则是一个验证函数,方法返回值必须是bool类型 表示是否可以执行这个命令
“priority:菜单项显示排序 如果相差间隔大于=11 就会有一个下划线
“快捷键 %(ctrl)、# (shift)、& (alt) _w(按下w, 单一字母)
参考:Unity Editor 基础篇(十一):MenuItem属性_庸人自扰Eam的博客-CSDN博客_unity menuitem
Unity Editor自定义菜单排序(MenuItem Order) - 赵青青 - 博客园 (cnblogs.com)
Unity SerializedProperty和Target 区别
优点
缺点
SerializedProperty
1.可以多选 2.自动Undo3.预制体重写4.可以修改私有 ...
AppScheme技术
什么是Schemescheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面
1.通过小程序,利用Scheme协议打开原生app
2.H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面
3.APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
4.APP根据URL跳转到另外一个APP指定页面
5.通过短信息中的url打开原生app
Unity使用使用Application.OpenURL();填入对应参数即可
构建别的app 打开unity 会响应Application.deepLinkActivated
Application-deepLinkActivated - Unity 脚本 API
Android可以看看之前的文章
Android导出aar插件供Unity使用以及通过android scheme启动unityApp_Zero_LJ的博客-CSDN博客
利用URLScheme实现Unity跳转到其他app - cancantrbl - 博客园 (cnblogs.co ...
Unity Asset一生
选自Unity官方直播 高川
Unity Asset的一生
[知乎]([Unity]Asset简介 - 知乎 (zhihu.com))
Scene场景相同的物体,最好是用Prefab,这样场景的描述文件要小得多,prefab指向的都是同一个内存,占用小
Meta
AssetBundle
结构 总的来说,一个AB包括2个部分:包头和数据段
包头:包含有关AssetBundle 的信息,比如标识符、压缩类型和内容清单(manifest:manifest是一个用对象名字做key的查找表),每个条目都提供一个字节索引,该索引指示在AssetBundle的数据段中可以找到给定对象的位置。在大多数平台,这个查找表是用平衡搜索树实现的。(除了Windows和OSX派生的平台(包括IOS平台)是用红黑树实现)。因此,构建这个清单的时间消耗会随着ab内的资源数量的增加而线性增加。
数据段:通过序列化AB内的资源的原生数据。- 如果用LZMA压缩,将压缩所有序列化资产的完整字节数组;- 如果是LZ4压缩,每个资源都是分开压缩的;- 如果没有压缩,就都保存原生字节流。
Scene,它是一个单独的 ...