Skip to content

Commit 9c20b1d

Browse files
add shallow assetbundle mode
instead of copying scene files, only insert Asset references to external files
1 parent d8ed49a commit 9c20b1d

File tree

5 files changed

+287
-60
lines changed

5 files changed

+287
-60
lines changed

Cargo.lock

Lines changed: 89 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindings/src/lib.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub struct CStats {
2626
enum Mode {
2727
SceneBundle = 0,
2828
AssetBundle = 1,
29+
AssetBundleShallow = 2,
2930
}
3031
impl Mode {
3132
fn needs_typetree_generator(&self) -> bool {
@@ -100,7 +101,8 @@ fn export_inner(
100101
let mode = match mode {
101102
0 => Mode::SceneBundle,
102103
1 => Mode::AssetBundle,
103-
_ => bail!("Expected 0=SceneBundle or 1=AssetBundle, got {mode}"),
104+
2 => Mode::AssetBundleShallow,
105+
_ => bail!("Expected 0=SceneBundle, 1=AssetBundle or 2=AssetBundleShallow, got {mode}"),
104106
};
105107

106108
let tpk_raw = TpkTypeTreeBlob::embedded();
@@ -115,6 +117,8 @@ fn export_inner(
115117

116118
let disable = true;
117119

120+
let mut out = Cursor::new(Vec::new());
121+
118122
let game_files = GameFiles::probe(game_dir)?;
119123
let mut env = Environment::new(game_files, tpk);
120124
let unity_version = env.unity_version()?;
@@ -147,7 +151,18 @@ fn export_inner(
147151
monobehaviour_node,
148152
),
149153
};
150-
};
154+
}
155+
156+
if let Mode::AssetBundleShallow = mode {
157+
let stats = unity_scene_repacker::pack_to_shallow_asset_bundle(
158+
&env,
159+
&mut out,
160+
name,
161+
repack_settings,
162+
compression,
163+
)?;
164+
return Ok((stats, out.into_inner()));
165+
}
151166

152167
let mut repack_scenes = unity_scene_repacker::repack_scenes(
153168
&env,
@@ -156,8 +171,6 @@ fn export_inner(
156171
matches!(mode, Mode::AssetBundle),
157172
)?;
158173

159-
let mut out = Cursor::new(Vec::new());
160-
161174
let stats = match mode {
162175
Mode::SceneBundle => {
163176
let (stats, header, files) = unity_scene_repacker::pack_to_scene_bundle(
@@ -190,6 +203,7 @@ fn export_inner(
190203
repack_scenes,
191204
compression,
192205
)?,
206+
Mode::AssetBundleShallow => unreachable!(),
193207
};
194208

195209
Ok((stats, out.into_inner()))

0 commit comments

Comments
 (0)