Unity图集相关问题

2023-10-27

Unity图集相关问题


前言

最近查找图集相关资料的时候看到了Unity论坛上的一篇帖子,其中Unity官方技术人员解释了“Include In Build”究竟有什么作用。


Include In Build

简而言之,如果勾选了,就意味着Sprite直接引用SpriteAtlas;如果不勾选,就意味着Sprite没有直接引用SpriteAtlas。

也就是说,我们可以理解为“Include In Build”就是是否存储sprite和图集的引用关系。

当勾选的时候,Unity保证了使用者在任何时候都无需关注图集(不确定图集会不会被打进底包,官方没有细说,应该需要去找Unity源码才行)。当在运行时使用sprite的时候,Unity会自动进行图集管理。使用者无需手动加载图集。

当取消勾选的时候,使用者就需要使用Late-binding(后绑定)来加载图集。


问题

如果勾选了Include In Build,图集又打了单独的AB包。那么只要当图集AB包加载到内存中后,无需进行后绑定,即可正常显示sprite。

但根据不加载图集AB包,图片就无法正常显示的现象来看,我们可以进行一波推断。

对于既勾选了Include In Build,又打了图集AB包的情况,Unity虽然记录了sprite和图集的引用关系,但应该不会对图集进行任何管理了。所以说不想进行后绑定,又想对图集进行热更新,可以尝试开启Include In Build,并保证图集的AB包加载到内存中。

之前也怀疑过是不是这个版本Unity的Bug,所以上述问题的最终原因还需要查看Unity源码才能知道(埋一个坑,以后再说)。


Late-binding

所谓后绑定,就是Unity在加载资源时,对于引用到的sprite,Unity由于不知道sprite和图集的引用关系,所以会发送一个请求加载这个sprite的事件。作为使用者需要接收这个事件(即SpriteAtlasManager.atlasRequested回调),然后把这个sprite的图集返回给Unity。这也就意味着,使用者需要自己加载图集。

具体实现好像还有很多坑,因为没有淌坑,所以这里就不多说了。


platformSettings

对应图集Override部分,如果存在则说明有针对某平台的重写设置。

platformSettings:
- serializedVersion: 2
  m_BuildTarget: Standalone
  m_MaxTextureSize: 2048
  m_ResizeAlgorithm: 0
  m_TextureFormat: 47
  m_TextureCompression: 2
  m_CompressionQuality: 50
  m_CrunchedCompression: 0
  m_AllowsAlphaSplitting: 0
  m_Overridden: 1
  m_AndroidETC2FallbackOverride: 0
- serializedVersion: 2
  m_BuildTarget: Android
  m_MaxTextureSize: 1024
  m_ResizeAlgorithm: 0
  m_TextureFormat: 47
  m_TextureCompression: 1
  m_CompressionQuality: 50
  m_CrunchedCompression: 0
  m_AllowsAlphaSplitting: 0
  m_Overridden: 1
  m_AndroidETC2FallbackOverride: 0

totalSpriteSurfaceArea

没有查到具体含义,搜索引擎上相关信息太少。

有时候有值,有时候又是0。目前不知道具体原因和细节。

totalSpriteSurfaceArea: 17843

storedHash

storedHash表示Library\AtlasCache文件夹中可用的当前spriteatlas缓存的哈希。当生成的图集和缓存的图集资源一样、Pack平台一样(SpriteAtlasUtility.PackAllAtlases)、设置一样时,Unity通过缓存快速生成图集(确实非常快),并且将storedHash标记为缓存的哈希值。当不存在图集缓存信息的时候,storedHash为00000000000000000000000000000000。

有人说这个storedHash会经常变,反正我测试了,只要上述条件不变,storedHash就不会变。具体可以参考这个

(storedHash在2019的某个版本好像被去掉了,就是因为用户反馈老变,不好做版本控制。)

storedHash: 
  serializedVersion: 2
  Hash: 31ee8620a8a14d495f31dc7bae9d896e

另:batchmode

Unity在batchmode中切换了平台后,不会立即生效。所以对于UNITY_ANDROID、UNITY_IOS这类的宏,很有可能判断不到,写代码的时候需要注意一下。(坑!)

解决方法,可以将宏判断改为传参,通过不同参数来运行不同逻辑。


后记

这个学习记录实际上是由上一篇图集引用问题引出来的。总之,学就完事了。

(不好看源码,又想稍微了解一下Unity引擎底层,上Unity官方论坛!)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity图集相关问题 的相关文章

  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • UnityLuaMvvM Lua 带通知的Mode类

    实现数据更新UI自动刷新的核心代码 欢迎关注https gitee com xiongks UnityMVVM mode function modeType local obj obj modeType modeType obj filds
  • Unity中loading页加载的实现

    首先创建一个Global cs 使用单例用于存储场景的名字 便于后续脚本的调用 此脚本不必挂载在游戏物体上 using UnityEngine using System Collections public class Global Mon
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • unity网络资源导入

    1 找到需要导入的文件 这里导入fbx格式 2 打开unity界面 在Asset目录下创建文件夹FBX 将需要导入的fbx预制体或整个文件夹拖入创建的FBX文件夹下 3 选中需要的fbx预制体并拖至场景中 4 双击定位到当前物体 5 找到需
  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • c#获取cpu序列号

  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge

随机推荐

  • Bluetooth 蓝牙介绍(七):低功耗蓝牙HCI规范

    HOST CONTROLLER INTERFACE HCI 功能规范 如果Controller支持 table 表中列出的任何传统广播命令或事件 并且还支持 LE 功能 扩展广播 则它应支持表中同一行中相应的扩展广播命令或事件 如果自上次上
  • css 上下左右居中(9种)

    Technique Browser Support Responsive Overflow resize both Variable Height Major Caveats Absolute Centering Modern IE8 Ye
  • golang测试技术

    golang测试技术 一 基础测试技术 1 测试Go代码 Go语言内置测试框架 内置的测试框架通过testing包以及go test命令来提供测试功能 下面是一个完整的测试strings Index函数的完整测试文件 strings tes
  • 2018年LeetCode高频算法面试题刷题笔记——求众数(开始之前)

    1 解答之前的碎碎念 又是一道没有思路的题 but我现在觉得 学习新知识过程都是从模仿开始的 比如先看别人的代码是怎么优雅的解决一个问题的 然后探究为什么要这么写 然后慢慢学着也这么做 最后知识就变成自己的啦 哈哈哈 给自己灌了一大壶鸡汤呢
  • Ubuntu安装Mysql启用远程连接

    1 用apt get安装mysql 更新一下apt 仓库 sudo apt get update 安装mysql service sudo apt get install mysql server y 也可以指定版本 可选 sudo apt
  • 详解在spring boot中配置多个DispatcherServlet

    spring boot为我们自动配置了一个开箱即用的DispatcherServlet 映射路径为 但是如果项目中有多个服务 为了对不同服务进行不同的配置管理 需要对不同服务设置不同的上下文 比如开启一个DispatcherServlet专
  • String类的codePointAt()方法

    工作中遇到一段代码 1 private static String getClassNameWithoutPackage Class cl 2 String className cl getName 3 int pos className
  • iOS音视频—FFmepg基础知识:命令行工具使用&封装格式&视频编码音频编码数据了解&视频像素音频采样数据格式

    iOS音视频相关目录 FFmepg基础知识 封装格式 1 封装格式 mp4 mov flv wmv等等 2 作用 视频流 音频流按照格式进行存储在一个文件中 3 MPEG2 TS格式 传输流 又称TS TP MPEG TS或M2T 用于音效
  • 入侵XXX学校教务管理系统过程记录

    by prettysky 以前的女朋友告诉我 她在学校 教务管理系统 报网上选修课的帐号密码丢了 或许是被别人修改了 入侵开始 1 扫描学校所在的整个C类IP段在线的主机 结果出来了 共有4个存活主机 经过测试得知 211 3 gt 学校网
  • 【Git】Git国内官网下载地址、淘宝镜像下载地址以及卸载安装

    Git官网下载地址 打开官网Git git scm com 进行相对应的操作系统下载即可 官网下载速度 大约需要二十多分钟 2 国内镜像 淘宝 Git下载国内镜像地址 CNPM Binaries Mirror npmmirror com G
  • 5 个有用的 Mac 终端技巧

    深藏在你的Mac 漂亮的界面下面是一个有几十年历史的叫做 UNIX 的骨干 你可以使用它的老式终端来运行无法从应用程序或菜单访问的简单命令 这些不仅对开发人员和黑客有用 即使您以前从未深入研究过终端 也有一些调整可以让您的 Mac 变得更好
  • Linux centos8安装redis

    centos 8 0 redis 安装教程 1 将安装包上传到指定目录 我这里放在 usr local src 目录 2 进入 usr local src 目录 cd usr local src 3 解压源码包 tar zxvf redis
  • hive使基本使用

    文章目录 1 hive创建表 2 查看建表语句 2 hive使用load加载数据到表中 3 hive删除表数据 4 hive查看版本信息 1 hive创建表 0 jdbc hive2 10 0 xxx 162 10000 default g
  • 网络编程 详解

    概述 计算机网络 将不同地理区域的计算机 广义 通过通信线路 光纤 连接起来 通过功能完备的软件实现数据共享 信息传递 网络编程 使程序借助网络在不同计算机间传输数据 Java提供的网络类库 可以实现网络连接 且Java支持网络传输 2 网
  • 你真的会开发测试框架?

    基本概念 库 英文单词叫Library 库是由代码集合成的一个产品 供程序员调用 面向对象的代码组织形成的库叫类库 面向过程的代码组织形成的库叫函数库 框架 英文单词叫Framework 框架是为解决一个或一类问题而开发的产品 用户一般只需
  • 【简单又详细】Unity实现拖拽3D物体旋转,UI面板显示角色

    预览效果 一 创建环境 1 创建一个Panel 把人物放到Panel之下 2 创建一个Camera命名为UICamera UICamera相机添加 physics RayCaster组件 修改遮罩层级 UI 注意 把player的层级也改为
  • windows10下安装docker,并且安装ubuntu环境

    1 系统要求 支持 64 位版本的 Windows 10 Pro 且必须开启 Hyper V 若版本为 v2004 及以上则无需开启 Hyper V 或者 64 位版本的 Windows 10 Home v2004 及以上版本 我的版本 w
  • 如何用一篇文章生成知识图谱

    https www zhihu com question 355473263
  • sockjs-web实时通信协议

    sockjs web实时通信应用解决方案 socksjs 客户端和服务器端api尽可能简洁 尽量靠近websocket api 支持服务端扩展和负载均衡技术 传输层应该全面支持跨域通信 如果受到代理服务器的限制 传输层能优雅地从一种方式回退
  • Unity图集相关问题

    Unity图集相关问题 前言 最近查找图集相关资料的时候看到了Unity论坛上的一篇帖子 其中Unity官方技术人员解释了 Include In Build 究竟有什么作用 Include In Build 简而言之 如果勾选了 就意味着S