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调用AndroidUnity中可以直接调用Android代码.例如:
123456789101112//c#代码 private void toastText(object str) { AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity= UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast"); AndroidJavaObject context =currentActivity.Call<AndroidJavaObject>("getApplication ...
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,它是一个单独的 ...
Unity C# News
C#
C#版本
.NET版本
发布日期
特性
C# 1.0
.NET Framework 1.0
2002-02-13
委托、事件
C# 1.1
.NET Framework 1.1
2003-04-24
APM(异步编程模型)
C# 2.0
.NET Framework 2.0
2005-11-07
泛型、匿名方法、迭代器、可空类型
C# 3.0
.NET Framework 3.0
2007-11-06
隐式类型
.NET Framework 3.5
2007-11-19
对象集合初始化、自动实现属性、匿名类型、扩展方法、查询表达式、Lambda表达式、 表达式树、分部类和方法、Linq
C# 4.0
.NET Framework 4.0
2010-04-12
动态绑定、命名和可选参数、泛型的协变和逆变、互操作性
C# 5.0
.NET Framework 4.5
2012-08-15
异步和等待(async和await)、调用方信息(Caller Information)
C# 6.0
.NET Framework 4.6
2015-07- ...
Audio In Unity
Audio In UnityUnity中支持的音频格式
MPEG layer 3
.mp3
Ogg Vorbis
.ogg
Microsoft Wave
.wav
音频交换文件格式
.aiff / .aif
Ultimate Soundtracker 模块
.mod
Impulse Tracker 模块
.it
Scream Tracker 模块
.s3m
FastTracker 2 模块
.xm
WAV:微软公司开发的一种声音文件格式,简单的编/解码、普遍的认同/支持以及无损耗存储,目前Windows上最流行的声音文件格式,资源大,不推荐
MP3:是MPEG标准中的音频部分,大小只有WAV文件的1/10,是一种有损压缩数字音频格式,失真小,适合音质要求高的文件,例如BGM
OGG:是一种新的音频压缩格式,类似MP3的音乐格式,它是完全免费、开放和没有专利限制的。压缩比高,适合人声、音效等
Unity Audio设置
Unity音频优化实践 - 知乎 (zhihu.com)
ProjectSetting- ...
Unity上架GooglePlay 未完待续...
前期设置
科学上网 谷歌账户 成为Google开发者Google Play 管理中心 | Google Play 管理中心
JDK 安装
SDK 按照 务必添加
Android Support Repository
Google Play Services
Google Repository
unity接入googleplay
Android 环境搭建与Android SDK目录介绍 - Charles-MQ - 博客园 (cnblogs.com)
Android SDK Manager和AVD Manager使用 - 康建伟 - 博客园 (cnblogs.com)
Unity中设置
只有IL2CPP才有64位
关于ARMv7 ARM64
arm64、armv7、armv7s是指什么? - 简书 (jianshu.com)
支持 64 位架构 | Google Play | Android Developers
设置keystone用Unity自带工具就可以,切记打包出来的APK和keystore签名确保一致
keytool -list -v -keystore ...
C#知识总结
泛型
泛型类
1234567891011121314//声明泛型类 T 表示一个占位 也可以声明多个public class TTest<T>{ public T value;}private void Start(){ TTest<int> testint = new TTest<int>(); testint.value = 10; TTest<string> teststr = new TTest<string>(); teststr.value = "aa";}
泛型方法
123public void TestFun<T>(T t){}
泛型接口
泛型约束
where
有6种
where T : struct类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。
12345678910111213public class TTest<T> where ...