SlideShare una empresa de Scribd logo
1 de 69
Descargar para leer sin conexión






問題を解決するときはいつも、もっとも抵抗の少
ない道を選んで行けばたやすく解決しそうに見え
る。 しかして、その易しそうな道こそが最も過酷
で残酷なものに変質するのだ…
-Winston Churchill
•
•
•
•
•
•
•
•
•
•
Unityプロジェクト 開発初週 - 直接参照
public class spawnCarFromDirectReference : MonoBehaviour
{
public GameObject carPrefab;
void Start ()
{
if(carPrefab != null)
GameObject.Instantiate(carPrefab, this.transform, false);
}
}
Unityプロジェクト,開発2週目 - Resources.Load
public class spawnCarFromResources : MonoBehaviour
{
public string carName;
void Start ()
{
var go = Resources.Load<GameObject>(carName);
if(go != null)
GameObject.Instantiate(go, this.transform, false);
}
}
Unityプロジェクト,開発3週目 - Resources.LoadAsync
public class spawnCarFromResourcesAsync : MonoBehaviour
{
public string carName;
IEnumerator Start ()
{
var req = Resources.LoadAsync(carName);
yield return req;
if(req.asset != null)
GameObject.Instantiate(req.asset, this.transform, false);
}
}
そして3ヶ月の時が流れた ...
Resourcesからアセットバンドルへの変更
public class MyBuildProcess
{
...
[MenuItem("Build/Build Asset Bundles")]
public static void BuildAssetBundles()
{
var outputPath = bundleBuildPath;
if(!Directory.Exists(outputPath))
Directory.CreateDirectory(outputPath);
var manifest = BuildPipeline.BuildAssetBundles(outputPath,
BuildAssetBundleOptions.ChunkBasedCompression,
EditorUserBuildSettings.activeBuildTarget);
var bundlesToCopy = new List<string>(manifest.GetAllAssetBundles());
// Copy the manifest file
bundlesToCopy.Add(EditorUserBuildSettings.activeBuildTarget.ToString());
CopyBundlesToStreamingAssets(bundlesToCopy);
}
...
}
Resourcesからアセットバンドルへの変更
public class spawnCarFromBuiltinAssetBundle : MonoBehaviour
{
public string carName;
public string carBundleName;
IEnumerator Start ()
{
if(!string.IsNullOrEmpty(carBundleName))
{
var bundleReq = AssetBundle.LoadFromFileAsync(carBundleName);
yield return bundleReq;
var bundle = bundleReq.assetBundle;
if( bundle != null)
{
var assetReq = bundle.LoadAssetAsync(carName);
yield return assetReq;
if(assetReq.asset != null)
GameObject.Instantiate(assetReq.asset, this.transform,
false);
}
}
}
}
そして3ヶ月後 ...
Asset BundlesをCDNからロードするよう書き換え
public class spawnCarFromRemoteAssetBundle : MonoBehaviour
{
public string carName;
public string carBundleName;
public string remoteUrl;
IEnumerator Start ()
{
var bundleUrl = Path.Combine(remoteUrl, carBundleName);
var webReq = UnityWebRequest.GetAssetBundle(bundleUrl);
var handler = webReq.downloadHandler as DownloadHandlerAssetBundle;
yield return webReq.Send();
var bundle = handler.assetBundle;
if(bundle != null)
{
var prefab = bundle.LoadAsset<GameObject>(carName);
if(prefab != null)
GameObject.Instantiate(prefab, this.transform, false);
}
}
}
Loading Asset Bundles from CDN
public class spawnCarFromRemoteAssetBundle : MonoBehaviour
{
public string carName;
public string carBundleName;
public string remoteUrl;
IEnumerator Start ()
{
var bundleUrl = Path.Combine(remoteUrl, carBundleName);
var webReq = UnityWebRequest.GetAssetBundle(bundleUrl);
var handler = webReq.downloadHandler as DownloadHandlerAssetBundle;
yield return webReq.Send();
var bundle = handler.assetBundle;
if(bundle != null)
{
var prefab = bundle.LoadAsset<GameObject>(carName);
if(prefab != null)
GameObject.Instantiate(prefab, this.transform, false);
}
}
}
こ
ん
な
コ
ー
ド
じ
ゃ
無
理
!
!
public class spawnCarFromRemoteAssetBundleWithDependencies : MonoBehaviour
{
// Simple class to handle loading asset bundles via UnityWebRequest
public class AssetBundleLoader
{
string uri;
string bundleName;
public AssetBundle assetBundle
{
get; private set;
}
public static AssetBundleLoader Factory(string uri, string bundleName)
{
return new AssetBundleLoader(uri, bundleName);
}
private AssetBundleLoader(string uri, string bundleName)
{
this.uri = uri;
this.bundleName = bundleName;
}
public IEnumerator Load()
{
var bundleUrl = Path.Combine(this.uri, this.bundleName);
var webReq = UnityWebRequest.GetAssetBundle(bundleUrl);
var handler = webReq.downloadHandler as
DownloadHandlerAssetBundle;
yield return webReq.Send();
assetBundle = handler.assetBundle;
}
}
public string carName;
public string carBundleName;
public string manifestName;
public string remoteUrl;
IEnumerator Start ()
{
var manifestLoader = AssetBundleLoader.Factory(remoteUrl,
bundleManifestName);
yield return manifestLoader.Load();
var manifestBundle = manifestLoader.assetBundle;
// Bail out if we can't load the manifest
if(manifestBundle == null)
{
Debug.LogWarning("Could not load asset bundle manifest.");
yield break;
}
var op =
manifestBundle.LoadAssetAsync<AssetBundleManifest>("AssetBundleManifest");
yield return op;
var manifest = op.asset as AssetBundleManifest;
var deps = manifest.GetAllDependencies(carBundleName);
foreach(var dep in deps)
{
Debug.LogFormat("Loading asset bundle dependency {0}", dep);
var loader = AssetBundleLoader.Factory(remoteUrl, dep);
yield return loader.Load();
}
var carLoader = AssetBundleLoader.Factory(remoteUrl, carBundleName);
yield return carLoader.Load();
if(carLoader.assetBundle != null)
{
op = carLoader.assetBundle.LoadAssetAsync<GameObject>(carName);
yield return op;
var prefab = op.asset as GameObject;
if(prefab != null)
GameObject.Instantiate(prefab, this.transform, false);
}
}
}
さらに求められる、アセットバンドルに必要な配慮:
• 一番効率的にアセットをバンドルに含める方法
• バンドル内のアセット重複回避
• バンドルに含まれているアセットの管理・確認
• バンドルのロードのメモリ管理


• 

•


•
•
•
•
•
•
•
T


- heszkeWmeszke
•
•
•
•
•
•
•
•
•
•
•
•
•
• 

•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Unity 2017.1b (experimental)
https://github.com/Unity-Technologies/AssetBundles-BuildPipeline
UnityEditor.Experimental.Build.AssetBundle

Bundle Build Pipeline Overhaul Sneak Peak
public static AssetBundleBuildInput
GenerateAssetBundleBuildInput(
AssetBundleBuildSettings settings) { … }
public struct AssetBundleBuildInput
{
public struct Definition
{
public string name;
public string variant;
public GUID[] assets;
}
public AssetBundleBuildSettings settings;
public Definition[] bundles;
}
* Input generated from asset importer meta
data or any other source (external tools, etc.)


Bundle Build Pipeline Overhaul Sneak Peak
public static AssetBundleBuildCommandSet
GenerateAssetBuildCommandSet(
AssetBundleBuildInput buildInput) { … }
public struct AssetBundleBuildCommandSet
{
public struct Command
{
public AssetBundleBuildInput.Definition input;
public ObjectIdentifier[] objectsToBeWritten;
}
public AssetBundleBuildSettings settings;
public Command[] commands;
}
Command set generation gathers all
dependencies, handles object stripping, and
generates full list of objects to write.


Bundle Build Pipeline Overhaul Sneak Peak
public static void SaveAssetBundleOutput(AssetBundleBuildOutput output) { … }
Output can be serialized to JSON or any other
format as required.
Bundle Build Pipeline Overhaul Sneak Peak
public static void SaveAssetBundleOutput(AssetBundleBuildOutput output) { … }
Put it all together …
// Default build pipeline
SaveAssetBundleOutput(ExecuteAssetBuildCommandSet(GenerateAssetBuildComma
ndSet(GenerateAssetBundleBuildInput(settings))));

Unity 2017.1b
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
public class spawnCarFromRemoteAssetBundleWithDependencies : MonoBehaviour
{
// Simple class to handle loading asset bundles via UnityWebRequest
public class AssetBundleLoader
{
string uri;
string bundleName;
public AssetBundle assetBundle
{
get; private set;
}
public static AssetBundleLoader Factory(string uri, string bundleName)
{
return new AssetBundleLoader(uri, bundleName);
}
private AssetBundleLoader(string uri, string bundleName)
{
this.uri = uri;
this.bundleName = bundleName;
}
public IEnumerator Load()
{
var bundleUrl = Path.Combine(this.uri, this.bundleName);
var webReq = UnityWebRequest.GetAssetBundle(bundleUrl);
var handler = webReq.downloadHandler as
DownloadHandlerAssetBundle;
yield return webReq.Send();
assetBundle = handler.assetBundle;
}
}
public string carName;
public string carBundleName;
public string manifestName;
public string remoteUrl;
IEnumerator Start ()
{
var manifestLoader = AssetBundleLoader.Factory(remoteUrl,
bundleManifestName);
yield return manifestLoader.Load();
var manifestBundle = manifestLoader.assetBundle;
// Bail out if we can't load the manifest
if(manifestBundle == null)
{
Debug.LogWarning("Could not load asset bundle manifest.");
yield break;
}
var op =
manifestBundle.LoadAssetAsync<AssetBundleManifest>("AssetBundleManifest");
yield return op;
var manifest = op.asset as AssetBundleManifest;
var deps = manifest.GetAllDependencies(carBundleName);
foreach(var dep in deps)
{
Debug.LogFormat("Loading asset bundle dependency {0}", dep);
var loader = AssetBundleLoader.Factory(remoteUrl, dep);
yield return loader.Load();
}
var carLoader = AssetBundleLoader.Factory(remoteUrl, carBundleName);
yield return carLoader.Load();
if(carLoader.assetBundle != null)
{
op = carLoader.assetBundle.LoadAssetAsync<GameObject>(carName);
yield return op;
var prefab = op.asset as GameObject;
if(prefab != null)
GameObject.Instantiate(prefab, this.transform, false);
}
}
}
public class spawnCarFromRemoteAssetBundleWithDependencies : MonoBehaviour
{
// Simple class to handle loading asset bundles via UnityWebRequest
public class AssetBundleLoader
{
string uri;
string bundleName;
public AssetBundle assetBundle
{
get; private set;
}
public static AssetBundleLoader Factory(string uri, string bundleName)
{
return new AssetBundleLoader(uri, bundleName);
}
private AssetBundleLoader(string uri, string bundleName)
{
this.uri = uri;
this.bundleName = bundleName;
}
public IEnumerator Load()
{
var bundleUrl = Path.Combine(this.uri, this.bundleName);
var webReq = UnityWebRequest.GetAssetBundle(bundleUrl);
var handler = webReq.downloadHandler as
DownloadHandlerAssetBundle;
yield return webReq.Send();
assetBundle = handler.assetBundle;
}
}
public string carName;
public string carBundleName;
public string manifestName;
public string remoteUrl;
IEnumerator Start ()
{
var manifestLoader = AssetBundleLoader.Factory(remoteUrl,
bundleManifestName);
yield return manifestLoader.Load();
var manifestBundle = manifestLoader.assetBundle;
// Bail out if we can't load the manifest
if(manifestBundle == null)
{
Debug.LogWarning("Could not load asset bundle manifest.");
yield break;
}
var op =
manifestBundle.LoadAssetAsync<AssetBundleManifest>("AssetBundleManifest");
yield return op;
var manifest = op.asset as AssetBundleManifest;
var deps = manifest.GetAllDependencies(carBundleName);
foreach(var dep in deps)
{
Debug.LogFormat("Loading asset bundle dependency {0}", dep);
var loader = AssetBundleLoader.Factory(remoteUrl, dep);
yield return loader.Load();
}
var carLoader = AssetBundleLoader.Factory(remoteUrl, carBundleName);
yield return carLoader.Load();
if(carLoader.assetBundle != null)
{
op = carLoader.assetBundle.LoadAssetAsync<GameObject>(carName);
yield return op;
var prefab = op.asset as GameObject;
if(prefab != null)
GameObject.Instantiate(prefab, this.transform, false);
}
}
}
public class spawnCarFromResourcesAsync : MonoBehaviour
{
public string carName;
IEnumerator Start ()
{
var req = Resources.LoadAsync(carName);
yield return req;
if(req.asset != null)
GameObject.Instantiate(req.asset, this.transform, false);
}
}
•
•
•
•
•
•
• 

• 

•
•
•
•
•
✓ 

✓
✓
✓


★
★


【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ

Más contenido relacionado

La actualidad más candente

今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]DeNA
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす増田 亨
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能TomomitsuKusaba
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてTatsuhiko Yamamura
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例UnityTechnologiesJapan002
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~UnityTechnologiesJapan002
 

La actualidad más candente (20)

今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 

Destacado

【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例
【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例
【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例Unity Technologies Japan K.K.
 
Unityでlinqを使おう
Unityでlinqを使おうUnityでlinqを使おう
Unityでlinqを使おうYuuki Takada
 
良くわかるMeta
良くわかるMeta良くわかるMeta
良くわかるMetadaichi horio
 
Gtmf2011 2011.06.07 slideshare
Gtmf2011 2011.06.07 slideshareGtmf2011 2011.06.07 slideshare
Gtmf2011 2011.06.07 slideshareHiroki Omae
 
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法Unity Technologies Japan K.K.
 
【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること
【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること
【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできることUnity Technologies Japan K.K.
 
Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Kouji Hosoda
 
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜Unity Technologies Japan K.K.
 
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単にUnite2017Tokyo
 
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろうUnity Technologies Japan K.K.
 
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能Unity Technologies Japan K.K.
 
AssetBundle (もどき) の作り方
AssetBundle (もどき) の作り方AssetBundle (もどき) の作り方
AssetBundle (もどき) の作り方Mori Tetsuya
 
【Unite 2017 Tokyo】VRで探り,活用する,人の知覚の仕組み
【Unite 2017 Tokyo】VRで探り,活用する,人の知覚の仕組み【Unite 2017 Tokyo】VRで探り,活用する,人の知覚の仕組み
【Unite 2017 Tokyo】VRで探り,活用する,人の知覚の仕組みUnite2017Tokyo
 
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術Unity Technologies Japan K.K.
 
【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~
【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~
【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~Unity Technologies Japan K.K.
 
【Unite 2017 Tokyo】Navmesh完全マスターへの道
【Unite 2017 Tokyo】Navmesh完全マスターへの道【Unite 2017 Tokyo】Navmesh完全マスターへの道
【Unite 2017 Tokyo】Navmesh完全マスターへの道Unity Technologies Japan K.K.
 
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityYoshifumi Kawai
 

Destacado (19)

【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例
【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例
【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例
 
Unityでlinqを使おう
Unityでlinqを使おうUnityでlinqを使おう
Unityでlinqを使おう
 
良くわかるMeta
良くわかるMeta良くわかるMeta
良くわかるMeta
 
Gtmf2011 2011.06.07 slideshare
Gtmf2011 2011.06.07 slideshareGtmf2011 2011.06.07 slideshare
Gtmf2011 2011.06.07 slideshare
 
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法
 
【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること
【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること
【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること
 
Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方
 
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜
 
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に
 
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
 
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能
 
AssetBundle (もどき) の作り方
AssetBundle (もどき) の作り方AssetBundle (もどき) の作り方
AssetBundle (もどき) の作り方
 
【Unite 2017 Tokyo】VRで探り,活用する,人の知覚の仕組み
【Unite 2017 Tokyo】VRで探り,活用する,人の知覚の仕組み【Unite 2017 Tokyo】VRで探り,活用する,人の知覚の仕組み
【Unite 2017 Tokyo】VRで探り,活用する,人の知覚の仕組み
 
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
 
【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~
【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~
【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~
 
【Unite 2017 Tokyo】Navmesh完全マスターへの道
【Unite 2017 Tokyo】Navmesh完全マスターへの道【Unite 2017 Tokyo】Navmesh完全マスターへの道
【Unite 2017 Tokyo】Navmesh完全マスターへの道
 
LINQ in Unity
LINQ in UnityLINQ in Unity
LINQ in Unity
 
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
 
Binary Reading in C#
Binary Reading in C#Binary Reading in C#
Binary Reading in C#
 

Similar a 【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ

Android Loaders : Reloaded
Android Loaders : ReloadedAndroid Loaders : Reloaded
Android Loaders : Reloadedcbeyls
 
Pathfinding - Part 2: Examples in Unity
Pathfinding - Part 2: Examples in UnityPathfinding - Part 2: Examples in Unity
Pathfinding - Part 2: Examples in UnityStavros Vassos
 
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleThierry Wasylczenko
 
Introduction to CQRS and Event Sourcing
Introduction to CQRS and Event SourcingIntroduction to CQRS and Event Sourcing
Introduction to CQRS and Event SourcingSamuel ROZE
 
The Open Web and what it means
The Open Web and what it meansThe Open Web and what it means
The Open Web and what it meansRobert Nyman
 
03 page navigation and data binding in windows runtime apps
03   page navigation and data binding in windows runtime apps03   page navigation and data binding in windows runtime apps
03 page navigation and data binding in windows runtime appsWindowsPhoneRocks
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptSeok-joon Yun
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Sao Paulo
JavaScript APIs - The Web is the Platform - MDN Hack Day, Sao PauloJavaScript APIs - The Web is the Platform - MDN Hack Day, Sao Paulo
JavaScript APIs - The Web is the Platform - MDN Hack Day, Sao PauloRobert Nyman
 
JavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
JavaScript APIs - The Web is the Platform - MozCamp, Buenos AiresJavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
JavaScript APIs - The Web is the Platform - MozCamp, Buenos AiresRobert Nyman
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, ChileJavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, ChileRobert Nyman
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
JavaScript APIs - The Web is the Platform - MDN Hack Day, MontevideoJavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
JavaScript APIs - The Web is the Platform - MDN Hack Day, MontevideoRobert Nyman
 
Spring Orielly
Spring OriellySpring Orielly
Spring Oriellyjbashask
 
droidcon Transylvania - Kotlin Coroutines
droidcon Transylvania - Kotlin Coroutinesdroidcon Transylvania - Kotlin Coroutines
droidcon Transylvania - Kotlin CoroutinesArthur Nagy
 

Similar a 【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ (20)

Android workshop
Android workshopAndroid workshop
Android workshop
 
Android Loaders : Reloaded
Android Loaders : ReloadedAndroid Loaders : Reloaded
Android Loaders : Reloaded
 
Pathfinding - Part 2: Examples in Unity
Pathfinding - Part 2: Examples in UnityPathfinding - Part 2: Examples in Unity
Pathfinding - Part 2: Examples in Unity
 
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
 
Introduction to CQRS and Event Sourcing
Introduction to CQRS and Event SourcingIntroduction to CQRS and Event Sourcing
Introduction to CQRS and Event Sourcing
 
4.Spring IoC&DI(Spring Ioc실습_어노테이션 기반)
4.Spring IoC&DI(Spring Ioc실습_어노테이션 기반)4.Spring IoC&DI(Spring Ioc실습_어노테이션 기반)
4.Spring IoC&DI(Spring Ioc실습_어노테이션 기반)
 
The Open Web and what it means
The Open Web and what it meansThe Open Web and what it means
The Open Web and what it means
 
03 page navigation and data binding in windows runtime apps
03   page navigation and data binding in windows runtime apps03   page navigation and data binding in windows runtime apps
03 page navigation and data binding in windows runtime apps
 
Android Concurrency Presentation
Android Concurrency PresentationAndroid Concurrency Presentation
Android Concurrency Presentation
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScript
 
The evolution of asynchronous JavaScript
The evolution of asynchronous JavaScriptThe evolution of asynchronous JavaScript
The evolution of asynchronous JavaScript
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Sao Paulo
JavaScript APIs - The Web is the Platform - MDN Hack Day, Sao PauloJavaScript APIs - The Web is the Platform - MDN Hack Day, Sao Paulo
JavaScript APIs - The Web is the Platform - MDN Hack Day, Sao Paulo
 
JavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
JavaScript APIs - The Web is the Platform - MozCamp, Buenos AiresJavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
JavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, ChileJavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
JavaScript APIs - The Web is the Platform - MDN Hack Day, MontevideoJavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
JavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
 
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies
 
Spring Orielly
Spring OriellySpring Orielly
Spring Orielly
 
droidcon Transylvania - Kotlin Coroutines
droidcon Transylvania - Kotlin Coroutinesdroidcon Transylvania - Kotlin Coroutines
droidcon Transylvania - Kotlin Coroutines
 

Más de Unite2017Tokyo

【Unite 2017 Tokyo】スマートフォンゲーム「夢幻のラビリズ」開発秘話と動画・サウンドミドルウェアの使い処
【Unite 2017 Tokyo】スマートフォンゲーム「夢幻のラビリズ」開発秘話と動画・サウンドミドルウェアの使い処【Unite 2017 Tokyo】スマートフォンゲーム「夢幻のラビリズ」開発秘話と動画・サウンドミドルウェアの使い処
【Unite 2017 Tokyo】スマートフォンゲーム「夢幻のラビリズ」開発秘話と動画・サウンドミドルウェアの使い処Unite2017Tokyo
 
【Unite 2017 Tokyo】Virtual Design and Construction + AR/VR ~建築におけるUnity活用事例~
【Unite 2017 Tokyo】Virtual Design and Construction + AR/VR ~建築におけるUnity活用事例~【Unite 2017 Tokyo】Virtual Design and Construction + AR/VR ~建築におけるUnity活用事例~
【Unite 2017 Tokyo】Virtual Design and Construction + AR/VR ~建築におけるUnity活用事例~Unite2017Tokyo
 
【Unite 2017 Tokyo】2017年の注目アセット100連発
【Unite 2017 Tokyo】2017年の注目アセット100連発【Unite 2017 Tokyo】2017年の注目アセット100連発
【Unite 2017 Tokyo】2017年の注目アセット100連発Unite2017Tokyo
 
【Unite 2017 Tokyo】VR MAGIC! ~キャラクターに命を吹き込んだこの4年間の記録~
【Unite 2017 Tokyo】VR MAGIC! ~キャラクターに命を吹き込んだこの4年間の記録~【Unite 2017 Tokyo】VR MAGIC! ~キャラクターに命を吹き込んだこの4年間の記録~
【Unite 2017 Tokyo】VR MAGIC! ~キャラクターに命を吹き込んだこの4年間の記録~Unite2017Tokyo
 
【Unite 2017 Tokyo】Unity+WebGLでゲームを開発・運用して見えてきたメリット・デメリット
【Unite 2017 Tokyo】Unity+WebGLでゲームを開発・運用して見えてきたメリット・デメリット【Unite 2017 Tokyo】Unity+WebGLでゲームを開発・運用して見えてきたメリット・デメリット
【Unite 2017 Tokyo】Unity+WebGLでゲームを開発・運用して見えてきたメリット・デメリットUnite2017Tokyo
 
【Unite 2017 Tokyo】Anima2Dについて語るで!2Dアニメーションの未来
【Unite 2017 Tokyo】Anima2Dについて語るで!2Dアニメーションの未来【Unite 2017 Tokyo】Anima2Dについて語るで!2Dアニメーションの未来
【Unite 2017 Tokyo】Anima2Dについて語るで!2Dアニメーションの未来Unite2017Tokyo
 
【Unite 2017 Tokyo】“Game Jam x VR x Unity”『Dead Hungry』のレシピ
【Unite 2017 Tokyo】“Game Jam x VR x Unity”『Dead Hungry』のレシピ【Unite 2017 Tokyo】“Game Jam x VR x Unity”『Dead Hungry』のレシピ
【Unite 2017 Tokyo】“Game Jam x VR x Unity”『Dead Hungry』のレシピUnite2017Tokyo
 
【Unite 2017 Tokyo】「オルタナティブガールズ」〜50cmの距離感で3D美少女を最高にかわいく魅せる方法〜
【Unite 2017 Tokyo】「オルタナティブガールズ」〜50cmの距離感で3D美少女を最高にかわいく魅せる方法〜【Unite 2017 Tokyo】「オルタナティブガールズ」〜50cmの距離感で3D美少女を最高にかわいく魅せる方法〜
【Unite 2017 Tokyo】「オルタナティブガールズ」〜50cmの距離感で3D美少女を最高にかわいく魅せる方法〜Unite2017Tokyo
 
【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜
【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜
【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜Unite2017Tokyo
 
【Unite 2017 Tokyo】EditorVRの設計から学んだこと:使えるVRエディターのためのデザイン
【Unite 2017 Tokyo】EditorVRの設計から学んだこと:使えるVRエディターのためのデザイン【Unite 2017 Tokyo】EditorVRの設計から学んだこと:使えるVRエディターのためのデザイン
【Unite 2017 Tokyo】EditorVRの設計から学んだこと:使えるVRエディターのためのデザインUnite2017Tokyo
 
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~Unite2017Tokyo
 
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側Unite2017Tokyo
 
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法Unite2017Tokyo
 
【Unite 2017 Tokyo】3次元CAD VR化最速ツールの秘密
【Unite 2017 Tokyo】3次元CAD VR化最速ツールの秘密【Unite 2017 Tokyo】3次元CAD VR化最速ツールの秘密
【Unite 2017 Tokyo】3次元CAD VR化最速ツールの秘密Unite2017Tokyo
 
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来Unite2017Tokyo
 
【Unite 2017 Tokyo】Unityライティング最新情報
【Unite 2017 Tokyo】Unityライティング最新情報【Unite 2017 Tokyo】Unityライティング最新情報
【Unite 2017 Tokyo】Unityライティング最新情報Unite2017Tokyo
 
【Unite 2017 Tokyo】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unite 2017 Tokyo】スマホゲーム開発者なら知っておくべきチートのリスク&対策【Unite 2017 Tokyo】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unite 2017 Tokyo】スマホゲーム開発者なら知っておくべきチートのリスク&対策Unite2017Tokyo
 
【Unite 2017 Tokyo】VIVEとUnityで、1週間で作る漫才VR
【Unite 2017 Tokyo】VIVEとUnityで、1週間で作る漫才VR【Unite 2017 Tokyo】VIVEとUnityで、1週間で作る漫才VR
【Unite 2017 Tokyo】VIVEとUnityで、1週間で作る漫才VRUnite2017Tokyo
 
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくりUnite2017Tokyo
 
【Unite 2017 Tokyo】VRコンテンツを気持ちよくプレイさせるためのUI実装ガイド
【Unite 2017 Tokyo】VRコンテンツを気持ちよくプレイさせるためのUI実装ガイド【Unite 2017 Tokyo】VRコンテンツを気持ちよくプレイさせるためのUI実装ガイド
【Unite 2017 Tokyo】VRコンテンツを気持ちよくプレイさせるためのUI実装ガイドUnite2017Tokyo
 

Más de Unite2017Tokyo (20)

【Unite 2017 Tokyo】スマートフォンゲーム「夢幻のラビリズ」開発秘話と動画・サウンドミドルウェアの使い処
【Unite 2017 Tokyo】スマートフォンゲーム「夢幻のラビリズ」開発秘話と動画・サウンドミドルウェアの使い処【Unite 2017 Tokyo】スマートフォンゲーム「夢幻のラビリズ」開発秘話と動画・サウンドミドルウェアの使い処
【Unite 2017 Tokyo】スマートフォンゲーム「夢幻のラビリズ」開発秘話と動画・サウンドミドルウェアの使い処
 
【Unite 2017 Tokyo】Virtual Design and Construction + AR/VR ~建築におけるUnity活用事例~
【Unite 2017 Tokyo】Virtual Design and Construction + AR/VR ~建築におけるUnity活用事例~【Unite 2017 Tokyo】Virtual Design and Construction + AR/VR ~建築におけるUnity活用事例~
【Unite 2017 Tokyo】Virtual Design and Construction + AR/VR ~建築におけるUnity活用事例~
 
【Unite 2017 Tokyo】2017年の注目アセット100連発
【Unite 2017 Tokyo】2017年の注目アセット100連発【Unite 2017 Tokyo】2017年の注目アセット100連発
【Unite 2017 Tokyo】2017年の注目アセット100連発
 
【Unite 2017 Tokyo】VR MAGIC! ~キャラクターに命を吹き込んだこの4年間の記録~
【Unite 2017 Tokyo】VR MAGIC! ~キャラクターに命を吹き込んだこの4年間の記録~【Unite 2017 Tokyo】VR MAGIC! ~キャラクターに命を吹き込んだこの4年間の記録~
【Unite 2017 Tokyo】VR MAGIC! ~キャラクターに命を吹き込んだこの4年間の記録~
 
【Unite 2017 Tokyo】Unity+WebGLでゲームを開発・運用して見えてきたメリット・デメリット
【Unite 2017 Tokyo】Unity+WebGLでゲームを開発・運用して見えてきたメリット・デメリット【Unite 2017 Tokyo】Unity+WebGLでゲームを開発・運用して見えてきたメリット・デメリット
【Unite 2017 Tokyo】Unity+WebGLでゲームを開発・運用して見えてきたメリット・デメリット
 
【Unite 2017 Tokyo】Anima2Dについて語るで!2Dアニメーションの未来
【Unite 2017 Tokyo】Anima2Dについて語るで!2Dアニメーションの未来【Unite 2017 Tokyo】Anima2Dについて語るで!2Dアニメーションの未来
【Unite 2017 Tokyo】Anima2Dについて語るで!2Dアニメーションの未来
 
【Unite 2017 Tokyo】“Game Jam x VR x Unity”『Dead Hungry』のレシピ
【Unite 2017 Tokyo】“Game Jam x VR x Unity”『Dead Hungry』のレシピ【Unite 2017 Tokyo】“Game Jam x VR x Unity”『Dead Hungry』のレシピ
【Unite 2017 Tokyo】“Game Jam x VR x Unity”『Dead Hungry』のレシピ
 
【Unite 2017 Tokyo】「オルタナティブガールズ」〜50cmの距離感で3D美少女を最高にかわいく魅せる方法〜
【Unite 2017 Tokyo】「オルタナティブガールズ」〜50cmの距離感で3D美少女を最高にかわいく魅せる方法〜【Unite 2017 Tokyo】「オルタナティブガールズ」〜50cmの距離感で3D美少女を最高にかわいく魅せる方法〜
【Unite 2017 Tokyo】「オルタナティブガールズ」〜50cmの距離感で3D美少女を最高にかわいく魅せる方法〜
 
【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜
【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜
【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜
 
【Unite 2017 Tokyo】EditorVRの設計から学んだこと:使えるVRエディターのためのデザイン
【Unite 2017 Tokyo】EditorVRの設計から学んだこと:使えるVRエディターのためのデザイン【Unite 2017 Tokyo】EditorVRの設計から学んだこと:使えるVRエディターのためのデザイン
【Unite 2017 Tokyo】EditorVRの設計から学んだこと:使えるVRエディターのためのデザイン
 
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
 
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
 
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
 
【Unite 2017 Tokyo】3次元CAD VR化最速ツールの秘密
【Unite 2017 Tokyo】3次元CAD VR化最速ツールの秘密【Unite 2017 Tokyo】3次元CAD VR化最速ツールの秘密
【Unite 2017 Tokyo】3次元CAD VR化最速ツールの秘密
 
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
 
【Unite 2017 Tokyo】Unityライティング最新情報
【Unite 2017 Tokyo】Unityライティング最新情報【Unite 2017 Tokyo】Unityライティング最新情報
【Unite 2017 Tokyo】Unityライティング最新情報
 
【Unite 2017 Tokyo】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unite 2017 Tokyo】スマホゲーム開発者なら知っておくべきチートのリスク&対策【Unite 2017 Tokyo】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unite 2017 Tokyo】スマホゲーム開発者なら知っておくべきチートのリスク&対策
 
【Unite 2017 Tokyo】VIVEとUnityで、1週間で作る漫才VR
【Unite 2017 Tokyo】VIVEとUnityで、1週間で作る漫才VR【Unite 2017 Tokyo】VIVEとUnityで、1週間で作る漫才VR
【Unite 2017 Tokyo】VIVEとUnityで、1週間で作る漫才VR
 
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
 
【Unite 2017 Tokyo】VRコンテンツを気持ちよくプレイさせるためのUI実装ガイド
【Unite 2017 Tokyo】VRコンテンツを気持ちよくプレイさせるためのUI実装ガイド【Unite 2017 Tokyo】VRコンテンツを気持ちよくプレイさせるためのUI実装ガイド
【Unite 2017 Tokyo】VRコンテンツを気持ちよくプレイさせるためのUI実装ガイド
 

Último

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 

Último (20)

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 

【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 10.
  • 13.
  • 14.
  • 15. Unityプロジェクト 開発初週 - 直接参照 public class spawnCarFromDirectReference : MonoBehaviour { public GameObject carPrefab; void Start () { if(carPrefab != null) GameObject.Instantiate(carPrefab, this.transform, false); } }
  • 16. Unityプロジェクト,開発2週目 - Resources.Load public class spawnCarFromResources : MonoBehaviour { public string carName; void Start () { var go = Resources.Load<GameObject>(carName); if(go != null) GameObject.Instantiate(go, this.transform, false); } }
  • 17. Unityプロジェクト,開発3週目 - Resources.LoadAsync public class spawnCarFromResourcesAsync : MonoBehaviour { public string carName; IEnumerator Start () { var req = Resources.LoadAsync(carName); yield return req; if(req.asset != null) GameObject.Instantiate(req.asset, this.transform, false); } }
  • 19. Resourcesからアセットバンドルへの変更 public class MyBuildProcess { ... [MenuItem("Build/Build Asset Bundles")] public static void BuildAssetBundles() { var outputPath = bundleBuildPath; if(!Directory.Exists(outputPath)) Directory.CreateDirectory(outputPath); var manifest = BuildPipeline.BuildAssetBundles(outputPath, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget); var bundlesToCopy = new List<string>(manifest.GetAllAssetBundles()); // Copy the manifest file bundlesToCopy.Add(EditorUserBuildSettings.activeBuildTarget.ToString()); CopyBundlesToStreamingAssets(bundlesToCopy); } ... }
  • 20. Resourcesからアセットバンドルへの変更 public class spawnCarFromBuiltinAssetBundle : MonoBehaviour { public string carName; public string carBundleName; IEnumerator Start () { if(!string.IsNullOrEmpty(carBundleName)) { var bundleReq = AssetBundle.LoadFromFileAsync(carBundleName); yield return bundleReq; var bundle = bundleReq.assetBundle; if( bundle != null) { var assetReq = bundle.LoadAssetAsync(carName); yield return assetReq; if(assetReq.asset != null) GameObject.Instantiate(assetReq.asset, this.transform, false); } } } }
  • 22. Asset BundlesをCDNからロードするよう書き換え public class spawnCarFromRemoteAssetBundle : MonoBehaviour { public string carName; public string carBundleName; public string remoteUrl; IEnumerator Start () { var bundleUrl = Path.Combine(remoteUrl, carBundleName); var webReq = UnityWebRequest.GetAssetBundle(bundleUrl); var handler = webReq.downloadHandler as DownloadHandlerAssetBundle; yield return webReq.Send(); var bundle = handler.assetBundle; if(bundle != null) { var prefab = bundle.LoadAsset<GameObject>(carName); if(prefab != null) GameObject.Instantiate(prefab, this.transform, false); } } }
  • 23. Loading Asset Bundles from CDN public class spawnCarFromRemoteAssetBundle : MonoBehaviour { public string carName; public string carBundleName; public string remoteUrl; IEnumerator Start () { var bundleUrl = Path.Combine(remoteUrl, carBundleName); var webReq = UnityWebRequest.GetAssetBundle(bundleUrl); var handler = webReq.downloadHandler as DownloadHandlerAssetBundle; yield return webReq.Send(); var bundle = handler.assetBundle; if(bundle != null) { var prefab = bundle.LoadAsset<GameObject>(carName); if(prefab != null) GameObject.Instantiate(prefab, this.transform, false); } } } こ ん な コ ー ド じ ゃ 無 理 ! !
  • 24.
  • 25. public class spawnCarFromRemoteAssetBundleWithDependencies : MonoBehaviour { // Simple class to handle loading asset bundles via UnityWebRequest public class AssetBundleLoader { string uri; string bundleName; public AssetBundle assetBundle { get; private set; } public static AssetBundleLoader Factory(string uri, string bundleName) { return new AssetBundleLoader(uri, bundleName); } private AssetBundleLoader(string uri, string bundleName) { this.uri = uri; this.bundleName = bundleName; } public IEnumerator Load() { var bundleUrl = Path.Combine(this.uri, this.bundleName); var webReq = UnityWebRequest.GetAssetBundle(bundleUrl); var handler = webReq.downloadHandler as DownloadHandlerAssetBundle; yield return webReq.Send(); assetBundle = handler.assetBundle; } } public string carName; public string carBundleName; public string manifestName; public string remoteUrl; IEnumerator Start () { var manifestLoader = AssetBundleLoader.Factory(remoteUrl, bundleManifestName); yield return manifestLoader.Load(); var manifestBundle = manifestLoader.assetBundle; // Bail out if we can't load the manifest if(manifestBundle == null) { Debug.LogWarning("Could not load asset bundle manifest."); yield break; } var op = manifestBundle.LoadAssetAsync<AssetBundleManifest>("AssetBundleManifest"); yield return op; var manifest = op.asset as AssetBundleManifest; var deps = manifest.GetAllDependencies(carBundleName); foreach(var dep in deps) { Debug.LogFormat("Loading asset bundle dependency {0}", dep); var loader = AssetBundleLoader.Factory(remoteUrl, dep); yield return loader.Load(); } var carLoader = AssetBundleLoader.Factory(remoteUrl, carBundleName); yield return carLoader.Load(); if(carLoader.assetBundle != null) { op = carLoader.assetBundle.LoadAssetAsync<GameObject>(carName); yield return op; var prefab = op.asset as GameObject; if(prefab != null) GameObject.Instantiate(prefab, this.transform, false); } } }
  • 27.
  • 28.
  • 31.
  • 32.
  • 34.
  • 35.
  • 36.
  • 45. Bundle Build Pipeline Overhaul Sneak Peak public static AssetBundleBuildInput GenerateAssetBundleBuildInput( AssetBundleBuildSettings settings) { … } public struct AssetBundleBuildInput { public struct Definition { public string name; public string variant; public GUID[] assets; } public AssetBundleBuildSettings settings; public Definition[] bundles; } * Input generated from asset importer meta data or any other source (external tools, etc.) 

  • 46. Bundle Build Pipeline Overhaul Sneak Peak public static AssetBundleBuildCommandSet GenerateAssetBuildCommandSet( AssetBundleBuildInput buildInput) { … } public struct AssetBundleBuildCommandSet { public struct Command { public AssetBundleBuildInput.Definition input; public ObjectIdentifier[] objectsToBeWritten; } public AssetBundleBuildSettings settings; public Command[] commands; } Command set generation gathers all dependencies, handles object stripping, and generates full list of objects to write. 

  • 47. Bundle Build Pipeline Overhaul Sneak Peak public static void SaveAssetBundleOutput(AssetBundleBuildOutput output) { … } Output can be serialized to JSON or any other format as required.
  • 48. Bundle Build Pipeline Overhaul Sneak Peak public static void SaveAssetBundleOutput(AssetBundleBuildOutput output) { … } Put it all together … // Default build pipeline SaveAssetBundleOutput(ExecuteAssetBuildCommandSet(GenerateAssetBuildComma ndSet(GenerateAssetBundleBuildInput(settings))));

  • 54.
  • 55. public class spawnCarFromRemoteAssetBundleWithDependencies : MonoBehaviour { // Simple class to handle loading asset bundles via UnityWebRequest public class AssetBundleLoader { string uri; string bundleName; public AssetBundle assetBundle { get; private set; } public static AssetBundleLoader Factory(string uri, string bundleName) { return new AssetBundleLoader(uri, bundleName); } private AssetBundleLoader(string uri, string bundleName) { this.uri = uri; this.bundleName = bundleName; } public IEnumerator Load() { var bundleUrl = Path.Combine(this.uri, this.bundleName); var webReq = UnityWebRequest.GetAssetBundle(bundleUrl); var handler = webReq.downloadHandler as DownloadHandlerAssetBundle; yield return webReq.Send(); assetBundle = handler.assetBundle; } } public string carName; public string carBundleName; public string manifestName; public string remoteUrl; IEnumerator Start () { var manifestLoader = AssetBundleLoader.Factory(remoteUrl, bundleManifestName); yield return manifestLoader.Load(); var manifestBundle = manifestLoader.assetBundle; // Bail out if we can't load the manifest if(manifestBundle == null) { Debug.LogWarning("Could not load asset bundle manifest."); yield break; } var op = manifestBundle.LoadAssetAsync<AssetBundleManifest>("AssetBundleManifest"); yield return op; var manifest = op.asset as AssetBundleManifest; var deps = manifest.GetAllDependencies(carBundleName); foreach(var dep in deps) { Debug.LogFormat("Loading asset bundle dependency {0}", dep); var loader = AssetBundleLoader.Factory(remoteUrl, dep); yield return loader.Load(); } var carLoader = AssetBundleLoader.Factory(remoteUrl, carBundleName); yield return carLoader.Load(); if(carLoader.assetBundle != null) { op = carLoader.assetBundle.LoadAssetAsync<GameObject>(carName); yield return op; var prefab = op.asset as GameObject; if(prefab != null) GameObject.Instantiate(prefab, this.transform, false); } } }
  • 56. public class spawnCarFromRemoteAssetBundleWithDependencies : MonoBehaviour { // Simple class to handle loading asset bundles via UnityWebRequest public class AssetBundleLoader { string uri; string bundleName; public AssetBundle assetBundle { get; private set; } public static AssetBundleLoader Factory(string uri, string bundleName) { return new AssetBundleLoader(uri, bundleName); } private AssetBundleLoader(string uri, string bundleName) { this.uri = uri; this.bundleName = bundleName; } public IEnumerator Load() { var bundleUrl = Path.Combine(this.uri, this.bundleName); var webReq = UnityWebRequest.GetAssetBundle(bundleUrl); var handler = webReq.downloadHandler as DownloadHandlerAssetBundle; yield return webReq.Send(); assetBundle = handler.assetBundle; } } public string carName; public string carBundleName; public string manifestName; public string remoteUrl; IEnumerator Start () { var manifestLoader = AssetBundleLoader.Factory(remoteUrl, bundleManifestName); yield return manifestLoader.Load(); var manifestBundle = manifestLoader.assetBundle; // Bail out if we can't load the manifest if(manifestBundle == null) { Debug.LogWarning("Could not load asset bundle manifest."); yield break; } var op = manifestBundle.LoadAssetAsync<AssetBundleManifest>("AssetBundleManifest"); yield return op; var manifest = op.asset as AssetBundleManifest; var deps = manifest.GetAllDependencies(carBundleName); foreach(var dep in deps) { Debug.LogFormat("Loading asset bundle dependency {0}", dep); var loader = AssetBundleLoader.Factory(remoteUrl, dep); yield return loader.Load(); } var carLoader = AssetBundleLoader.Factory(remoteUrl, carBundleName); yield return carLoader.Load(); if(carLoader.assetBundle != null) { op = carLoader.assetBundle.LoadAssetAsync<GameObject>(carName); yield return op; var prefab = op.asset as GameObject; if(prefab != null) GameObject.Instantiate(prefab, this.transform, false); } } }
  • 57. public class spawnCarFromResourcesAsync : MonoBehaviour { public string carName; IEnumerator Start () { var req = Resources.LoadAsync(carName); yield return req; if(req.asset != null) GameObject.Instantiate(req.asset, this.transform, false); } }
  • 58.
  • 63.
  • 64.
  • 65.
  • 67.
  • 68.