10月 31

【Unity小贴士】关于Addressable的压缩格式

Addressable 1.21在打包的时候可以选择LZ4,LZMA或者Uncompression(不压缩)三种形式。

其中LZMA是压缩后尺寸最小的格式,但是相对来说load需要的时间就很长。

所以Unity默认当LZMA格式的assetbundle下载后,在本地会先转成LZ4格式放在Cache文件夹里,这样在load的时候就可以节省时间。
https://docs.unity3d.com/Packages/com.unity.addressables@1.21/manual/ContentPackingAndLoadingSchema.html?q=LZMA

这个默认设置也可以在Cache initialization objects里修改
https://docs.unity3d.com/Packages/com.unity.addressables@1.21/manual/InitializeAsync.html

 

分类: Tech, Unity | 留下评论
9月 29

【Unity小贴士】关于Addressable的热更新

本篇会比较乱,边写边整理思路。

起因是用户说用LoadResourceLocationsAsync 一个Key获取到了两个同样的location,经查后,原因是在LoadResourceLocation之前调用了LoadContentCatalogAsync把远程的catalog导入,导致catalog重复了。(由于用户用的是Editor模式,不确定是否是本地的catalog和远程的重复还是单纯的导入远程catalog两次)

其实Unity关于热更新有一套方案,文档里面已经写的比较详细,但是文档里只写了要怎么做,没有写不可以怎么做(当然,哪个文档都不会这么写)所以用户可能误解了读取远程catalog需要用API手动读取。
https://docs.unity3d.com/Packages/com.unity.addressables@1.20/manual/RemoteContentDistribution.html

因为不太确定到底是怎么回事,查阅了很多内部外部资料,发现关于catalog说的都很模糊,但是文档里几乎是很明确的说,catalog的管理是自动管理的

By default, the Addressables system manages the catalog automatically at runtime. If you built your application with a remote catalog, the Addressables system automatically checks to see if you have uploaded a new catalog, and, if so, downloads the new version and loads it into memory.

那么问题来了,catalog到底是怎么自动从remote下载的?

继续阅读
分类: Tech, Unity | 留下评论
6月 28

【Unity小贴士】关于OnCollisionEnter和OnTriggerEnter

这两个事件其实大家都很熟悉了,一个检测碰撞,一个检测物体通过Collider。文档里基本把这两个事件对应。

最近有人问,在一个项目里,物体设置成Trigger的情况下,项目启动后并不会调用OnTriggerEnter事件,只有在物体运动到和对象接触的时候事件才被调用。但是同一个物体设置成刚体(Is Tigger不打勾)的话OnCollisionEnter在启动时就会被调用。

我再利用OnCollisionEnter的参数把接触点都打印出来并且生成object之后发现,接触点并没有被检测碰撞的对象。也就是说,检测对象在视觉上并没有和被检测对象相撞,但是却调用了OnCollisionEnter。

造成这种情况是因为这个Default Contact Offset参数,如果两个物体的距离小于Default Contact Offset就会默认两个物体碰撞。默认设置的0.01已经很小了几乎肉眼看不出,但是如果项目整体的scale也设置的很小就会出问题。

同时我测试了一下这个参数确实只影响刚体碰撞而不会对Trigger造成影响。下图我建了两个同高度的Cube,其中一个设置成IsTrigger = true,取消Use Gravity,Default Contact Offset设置了比较大的参数,启动后只有刚体的事件被调用。当调整高度Tigger的物体接触到Plane之后OnTriggerEnter才会被调用。

分类: Unity | 留下评论
3月 9

【Unity小帖士】GameObject.CreatePrimitive创建的物体在打包后显示成粉色

GameObject.CreatePrimitive是直接在runtime的时候创建一个Unity基本的的物体,比如:

运行之后在Editor里显示如下图。

但是在build之后显示却出现了问题,Cube显示成粉色。

继续阅读

分类: Tech, Unity | 留下评论
9月 30

【Unity小贴士】content size fitter

Unity的Layout提供了几种自适应方式。
一个是通过LayoutGroup来确保子物体的自适应方式。一种是给物体直接加上content size fitter。
但是如果不注意,非常容易造成冲突,导致自适应没办法达成效果

比如上图这种nest,Overlap和Layout Group都有一个Vertical Layout Group的组件,Text123则都有一个content size fitter组件。但是如果Text2文本过长,从脚本控制Text2显示的时候,就会和Text3和Text1有Overlap的现象。

继续阅读
分类: Unity | 留下评论