Unity3D Asset-Bundles Reader with Java
用Java读取Unity3D资源文件的库
即开即用版:https://github.com/Aloento/UnityABStudio
本库是 ArknightsAssetStudio 的一部分
与 @FaterLinLi 合作完成
最简使用案例请看 App.java
目前运行本库的 App.java 文件,可读取 /resources 目录下的 .ab 文件,并在控制台输出其中包含文件的种类、大小以及其资源定位ID(PathID)
万分感谢Aloento肯带我这个四年编程小白菜走这个项目,多数时候我基本都在菜到想remake的程度,剩下的时间在想让Java先去remake的路上。
虽然基本完成了这个库,但是后续依然还有很多工作要做,您还不能休息,这些都只是计划的一部分。
最后感谢移不动、电不信对本项目的大力支持
AssetsManager
的 LoadFilesAsync
与 LoadFolderAsync
方法
此类用来管理Asset文件,支持加载文件和文件夹
public List<SerializedFile> AssetsFileList;
本List中储存了所有用户导入的AssetFile
假设我们调用 LoadFilesAsync
方法时传入了 string[0]
则该 AssetsFileList
中的元素个数为 1个,每个元素为 SerializedFile
类型
此类用于储存Asset的各种信息
public AssetsManager assetsManager;
此成员代表是哪个 AssetsManager
对象创建了此 SerializedFile
public string fullName;
public string fileName;
public string originalPath;
fullName
成员是 SerializedFile
实例的 Aseet
路径,包含内部文件名
src\main\resources\CAB-b126f940f479be82fda32e2b675c8b7f
fileName
成员是 SerializedFile
实例的文件名,不包含路径
CAB-b126f940f479be82fda32e2b675c8b7f
originalPath
成员是 SerializedFile
实例的原始路径,包含实际文件名
src\main\resources\char_1012_skadi2.ab
public string unityVersion;
public int[] version;
public BuildType buildType;
public BuildTarget m_TargetPlatform;
unityVersion
成员是 SerializedFile
实例的 Unity3D 版本号,如 2017.4.39f1
version
成员是 unityVersion
的拆分,包含四个整数,如 [2017, 4, 39, 1]
buildType
成员是 Unity3D 的编译类型,如 f
m_TargetPlatform
成员是 Unity3D 的编译目标平台,如 StandaloneWindows
public List<UObject> Objects;
public Dictionary<long, UObject> ObjectsDic;
Objects
成员是 SerializedFile
实例的 UObject
列表,重要且常用
ObjectsDic
成员中,key 对应 UObject
的 m_PathID
,不常用
public List<SerializedType> m_Types;
public List<ObjectInfo> m_Objects;
m_Type
与 m_Objects
是为 Objects
服务的
它们在 AssetsManager
中的 readAssets
方法中使用
用于生成对应的 UObject
实例
此类是所有有关于 Unity3D 的类的基类,包含了一些基本的属性和方法
被 EditorExtension
/ ResourceManager
/ PlayerSettings
/ BuildSettings
直接继承
public SerializedFile assetsFile;
此成员代表 UObject
对应的 SerializedFile
实例
意为:这个对象存在于哪个Aseet文件中
public long m_PathID;
Unity3D
中的全局文件索引ID,每一个 UObject
都有一个全局唯一的ID
public ClassIDType type;
type
成员代表这个 UObject
在 ClassIDType
中对应的类型
表明了这是一个什么类型的对象,如 GameObject
、MonoBehaviour
、Texture2D
等
public uint byteSize;
byteSize
成员代表这个 UObject
的一般大小,单位为字节
根据不同的 type
值可能不同
如 AudioClip
在 m_Source
不为空时的大小为 byteSize + AudioClip.m_Size
抽象类,被 Component
/ NamedObject
/ GameObject
直接继承
所有有实际意义的实例对象都是它的子类
Unity3D
中所有的游戏物件都是这个类型的对象,场景中所有实体的基类
可以导出为 .fbx
文件,没有类继承它
public PPtr<Component>[] m_Components;
m_Components
成员是 GameObject
的组件列表,每个元素是 Component
的指针
public string m_Name;
m_Name
成员是 GameObject
的名称
抽象类,附加到 GameObject
的所有内容的基本类
被 Behaviour
/ MeshFilter
/ Transform
/ Renderer
直接继承
public PPtr<GameObject> m_GameObject;
m_GameObject
成员是 Component
对应的 GameObject
指针
表示此 Component
在这个 GameObject
中
抽象类,是指可启用或禁用的组件
被 Animator
/ MonoBehaviour
/ Animation
直接继承
抽象类,所有渲染器的常规功能
渲染器是使对象显示在屏幕上的工具
使用该类可以访问任何对象、网格或粒子系统的渲染器
被 MeshRenderer
/ SkinnedMeshRenderer
直接继承
命名的对象,表示这个对象有名字
一般从 AssetBundle
中获取的有用对象都是 NamedObject
的子类
public string m_Name;
m_Name
是这个对象的名字
资源管理器,用于获取资源的名称
其中,m_Container
会向 AssetItem
中 Container
赋值
在 Unity
中构建的最终游戏定义各种参数的地方
在 UnityABStudio
中没有实际意义
productName = m_PlayerSettings.productName;
便可获得游戏的名字
这是一个结构,其中包含关于如何构建内容的信息
在 UnityABStudio
中没有实际意义
用于控制 Mecanim
动画系统的接口
可以导出为 .fbx
文件,对象名称为对应 GameObject
的名称
是一个基类,所有 Unity3D
脚本都派生自该类
可以导出为 .json
文件
对象名称在 m_Name
为空,且 m_Script
不为空时为 m_Script.m_ClassName
public PPtr<MonoScript> m_Script;
指向 MonoScript
的指针,表示这个 MonoBehaviour
的脚本
动画组件用于播放动画
本身不能导出,但是其成员 AnimationClip
可以导出为 .fbx
文件
public PPtr<AnimationClip>[] m_Animations;
用于访问mesh filter的 Mesh 的类
这与程序化网格接口一起使用
本身不能导出,但是其成员 Mesh
可以导出为 .obj
文件
public PPtr<Mesh> m_Mesh;
对象的位置、旋转和缩放,不能导出
场景中的每个对象都有一个变换
它用于存储和操作对象的位置、旋转和缩放
每个变换都可以有一个父级
public Quaternion m_LocalRotation;
public Vector3 m_LocalPosition;
public Vector3 m_LocalScale;
public PPtr<Transform>[] m_Children;
public PPtr<Transform> m_Father;
m_LocalRotation
相对于父级变换旋转的变换旋转
m_LocalPosition
相对于父变换的变换位置
m_LocalScale
相对于父对象的变换缩放
m_Children
此变换的子变换集合
m_Father
此变换的父级变换
渲染由 MeshFilter 或 TextMesh 插入的网格
不可导出,在 UnityABStudio
中无意义,本质是 Renderer
蒙皮网格过滤器
本身不能导出,但是其成员 Mesh
可以导出为 .obj
文件
public PPtr<Mesh> m_Mesh;
材质类
本身不能导出,但是其成员 Shader
可以导出为 .shader
文件
public PPtr<Shader> m_Shader;
表示在 2D 游戏中使用的精灵对象
精灵 是一种 2D 图形对象,用于 2D 游戏元素
图形是从位图图像 Texture2D
获取的
Sprite
类主要标识应该用于特定精灵的图像部分
GameObject
上的 SpriteRenderer
组件可以使用该信息来实际显示图形
可以导出为 Jpeg
、Png
、Bmp
或 Tga
图像文件
表示一个 Mecanim
化身,用于游戏中的角色
它可以是一个通用化身,也可以是一个人形化身
不可导出,在 UnityABStudio
中无意义
一种视频数据的容器
在 m_OriginalPath
不为空时可以导出
导出格式为 m_OriginalPath
中的扩展名
数据的大小为 byteSize + m_ExternalResources.m_Size;
已弃用,电影纹理可用于播放电影序列的动画,或将电影渲染到场景中
可以导出为 .ogv
文件
用于纹理处理的类
当 m_OriginalPath
不为空时
数据的大小为 byteSize + m_StreamData.size;
可以导出为 Jpeg
、Png
、Bmp
、Tga
或 .tex
文件
AssetBundle
即是 .ab
资源文件
不可导出,其中 m_Container
会向 AssetItem
中的 Container
赋值
public KeyValuePair<string, AssetInfo>[] m_Container;
该类表示存储在项目中的 C#、JavaScript 和 Boo 文件
在对应的 MonoBehaviour
中导出
font assets 的脚本接口
可使用此类动态切换 GUI 文本或文本网格上的字体
可以导出为 .ttf
或 .otf
文件
AnimatorController
的运行时表示
使用此表示可在运行时期间更改 Animator Controller
不可导出,在 UnityABStudio
中没有意义
文本文件资源,可以将项目中的原始文本文件用作资源,通过此类获取其内容
可以导出为 .txt
文件
用于通过脚本创建或修改网格的类
可以导出为 .obj
文件
存储压缩为 Ogg Vorbis
或未压缩的音频文件
当 m_Source
不为空时
数据的大小为 byteSize + m_Size;
可以导出为 .m4a
.aif
.it
.mod
.mp3
.ogg
.s3m
.wav
.xm
.wav
.vag
.fsb
文件
用于所有渲染的着色器脚本
对象名称为 m_ParsedForm?.m_Name ?? m_Name;
可以导出为 .shader
文件
保存基于关键帧的动画
可以导出为 .fbx
文件
通过具有状态机(由参数控制)的层来控制的动画控制器
本身不能导出,但是成员 AnimationClip
可以导出
public PPtr<AnimationClip>[] m_AnimationClips;
动画器重写控制器的用途是重写某个控制器的动画剪辑,从而为给定化身定制动画
不能导出
精灵图集是在 Unity 中创建的一种资源
它是内置精灵打包解决方案的一部分
本身不能导出,但是成员 Sprite
可以导出
public PPtr<Sprite>[] m_PackedSprites;