SlideShare a Scribd company logo
1 of 61
ASSETBUNDLE含む
UNITY3Dの基礎知識
花田 恒一
13年5月31日金曜日
自己紹介
九州大学芸術工学部音響設計学科3年
Lisp/Scheme/Haskellが好きです。
Unity3dでBooのSchemeR5RSの処理系のAssetを作成
中
@nobkz
http://www.facebook.com/nobukazu.hanada
13年5月31日金曜日
THE 前置き
13年5月31日金曜日
ある日のこと
13年5月31日金曜日
花田君、AssetBundleに
ついて話してよ?
13年5月31日金曜日
僕:「いいですよー」
13年5月31日金曜日
.。oO( アセットバンドルってそん
な話す事あったっけ? )
心の声
13年5月31日金曜日
.。oO( まあいいか )
13年5月31日金曜日
とりあえず資料を作る。
13年5月31日金曜日
案の上、ボリュームが立りないかなぁ?
13年5月31日金曜日
うーん。
13年5月31日金曜日
うん!
13年5月31日金曜日
Unity3dのアーキテクチャやら
メモリ管理やら
そっちの話追加しちゃえー!
13年5月31日金曜日
というわけで....
13年5月31日金曜日
話す事
13年5月31日金曜日
今回の内容
Unity3dのアーキテクチャについて
Unity3dのメモリ管理
Unity3dのアセットバンドル
13年5月31日金曜日
目的
Webの情報などは、凄く断片的すぎる
以外と、アーキテクチャやらメモリの話がない(みん
なわかってること?)
Unity3dの中身から、何となく理由が分かるようにす
る
13年5月31日金曜日
アーキテクチャ
13年5月31日金曜日
アーキテクチャ
UnityEngine UnityEditor
Unity
.NET
Mono
13年5月31日金曜日
UnityEngine
Unity3dゲーム実行時に関するフレームワーク
基本的に、これを読み込んでゲームを作る
13年5月31日金曜日
UnityEditor
Unityエディタのフレームワーク
エディタ拡張のために使う
Editorフォルダ内で編集する必要がある。
13年5月31日金曜日
.NETについて
C#, CLIの仕様は公開されている
Microsoft .NET Frameworkは商用実装
Monoは.NETのオープンソース実装
13年5月31日金曜日
Monoとは?
.NETのオープンソースの実装
CLIやC#コンパイラが含まれる
Unity3dでは2.0までは動く?(情報が古いかも)
13年5月31日金曜日
使用できる言語
C#、UnityScript(JavaScript)、Boo
僕はBooが好きです。
USはBooをホスト言語にしたDSL
ぜーんぶ、.NET上で走るよ!
13年5月31日金曜日
Unity3dのデータについて
素材のAssetフォルダ
Assetのメタデータとして、Libraryフォルダ
基本的にUnity3dはインデックス管理
13年5月31日金曜日
シーンのデータ
Unity3dのパッケージにあるbinary2textを使用してバ
イナリをHumanReadableにして読んでみる
13年5月31日金曜日
いつビルドされるか?
基本的に、Unity3dが修正を検知すればビルドされ
る。
Play中であっても、無くても修正があればビルドさ
れる。
コンパイルされる順番に注意。
13年5月31日金曜日
スペシャルフォルダ
Standard Assets、Resources、Editor、Plugings,
Gizmosなどは、スペシャルフォルダ
Standard Assets、Plugingsは先にビルドされる。
Editorは最後にビルドされる。
13年5月31日金曜日
良くハマるエラー
スペシャルフォルダが原因で、ちょくちょく質問さ
れること。
GetComponentのデモをする。
13年5月31日金曜日
環境の違い
Unity3dはクロスプラットフォーム。
だからと言ってUnity3dの知識さえあれば良いのか?
どこまでがUnity3dが違い吸収してくれて、どのよう
に吐き出されるか知る必要がある。
13年5月31日金曜日
iOS/Andoridに関して
iOSは、Appleの制限が多い。
Androidは結構緩い。
(例: AndroidはJITコンパイルできるが、iOSは出来な
い。)
また、iOSは動的にコードを生成できない
13年5月31日金曜日
メモリ
13年5月31日金曜日
C#erが落ちる罠
「GCされるからメモリ管理必要ないよね!」
(実際にC#erが言ってました)
13年5月31日金曜日
Unity3dでの開発では
GCされない場合がある。
13年5月31日金曜日
メモリ基礎知識
Systemのメモリ管理
Unityのメモリ管理
Monoのメモリ管理
System
Unityの
メモリ
Mono
13年5月31日金曜日
Unity3dのメモリ管理
基本的に自分で管理しないと行けない場合が多い。
基本的にシーンが生成して、最後にGCが走る。
GG.Collectを呼んでも、Finalizerに入るだけで解放されな
いことがある
よってDispose()を使う。これによってFinalizerに入らず解放
される。
13年5月31日金曜日
続き。
ClassよりStructを使う
OnGUIはかなりのメモリを消費ので避ける
AssetBundleに関しては後述する。
13年5月31日金曜日
GCされるタイミング。
LoadLevelが呼ばれ、シーンを構築
前のSceneの使用してないObjectをDestroy
Awakeが呼ばれる
GC
13年5月31日金曜日
ASSET BUNDLEとは?
13年5月31日金曜日
AssetBundleとは?
アセットをパッケージして外部で持てるようにした
ファイル
Prefab, Material, GameObjectなどが入る
Proのみ。
13年5月31日金曜日
AssetBundle利点
アプリケーションサイズを小さくできる。
アプリ本体と、Assetbundleで分けることができる。
キャッシュが利用できる(WebPlayer 50MB, iOS/
Android 4GB)
13年5月31日金曜日
欠点
プラットフォームごとにAsset Bundleをビルドしない
と行けない。
通信状況が悪いと読み込めない
Scriptが消失する。
13年5月31日金曜日
作り方
13年5月31日金曜日
AssetBundlesの作り方
基本的に3つのクラスメソッドがある
BuildPipeline.BuildAssetBundle
BuildPipeline.BuildStreamedSceneAssetBundle
BuildPipeline.BuildAssetBundleExplicitAssetNames
13年5月31日金曜日
とりあえずやってみる
デモ(Asset Bundleを作成するデモ)
13年5月31日金曜日
注意
このデモによるAssetBundleでは、一つづつビルドし
ています
運用時では、UnityEditorを拡張し、一発ビルドする
ようにするのがおすすめ。
13年5月31日金曜日
読み込み方
13年5月31日金曜日
AssetBundleをLoad
LoadFromCacheOrDownloadを使う。
13年5月31日金曜日
とりあえずやってみる
デモ(AssetBundleを読みこむ。)
13年5月31日金曜日
4つのLOAD
13年5月31日金曜日
4つのLoad
実はAssetBundleの読み込みには4つの方法がある
LoadFromCacheOrDownload
CreateFromFile
WWW、CreateFromMemory
13年5月31日金曜日
LoadFromCacheOrDownload
一番おすすめ
ダウンロードし、展開された状態でストレージに保
存される。
実行時に展開用のメモリが少ない。
ストレージは圧迫する
13年5月31日金曜日
CreateFromFile
次におすすめ
圧縮されてないAssetBundleしか使えない
前と同様、メモリは少なく、ストレージを圧迫する
13年5月31日金曜日
WWW:CreateFromMemory
あまりおすすめしない。
展開に使う分、メモリが必要。
ストレージは節約できる
13年5月31日金曜日
補足、注意点、小ネタ
13年5月31日金曜日
使用時の注意点
プラットフォームでの互換性が無い
AssetBundle作成時にプラットフォームをそれぞれ
指定する。
スクリプトは使用できない(iPhoneのみ)
13年5月31日金曜日
AssetBundleのメモリ管理
AssetBundleの読み込みは1つずつ実行すること
展開用に確保されるメモリが複数確保されること
を防ぐため
ロード直後はUnload(false)する。WWWのDisposeも
忘れずに。
不要になったときassetBundle.Unload(true) か
UnloadUnusedAssets() で解放
13年5月31日金曜日
複数でのAssetBundle
複数でAssetBundleを使用時において、重複した
Assetがある場合、その分メモリに乗ってしまう。
PushAssetDependenciesを使用する
ずれる可能性がある
13年5月31日金曜日
AssetBundle
DeterministicAssetBundleでインデックス管理からID
管理へと
この場合ディスクメディアでシークに時間がかか
る。
13年5月31日金曜日
まとめ
13年5月31日金曜日
ご清聴ありがとうございました
13年5月31日金曜日

More Related Content

Viewers also liked

Unityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknightsUnityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknightsKouji Hosoda
 
Unity 5 の AssetBundle について (浅く) まとめてみた - 2015/05/22 第31回 Unity 勉強会
Unity 5 の AssetBundle について (浅く) まとめてみた - 2015/05/22 第31回 Unity 勉強会Unity 5 の AssetBundle について (浅く) まとめてみた - 2015/05/22 第31回 Unity 勉強会
Unity 5 の AssetBundle について (浅く) まとめてみた - 2015/05/22 第31回 Unity 勉強会Mori Tetsuya
 
Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Kouji Hosoda
 
[UniteKorea2013] Memory profiling in Unity
[UniteKorea2013] Memory profiling in Unity[UniteKorea2013] Memory profiling in Unity
[UniteKorea2013] Memory profiling in UnityWilliam Hugo Yang
 
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundleYusuke HIDESHIMA
 
Unity scene file collaboration
Unity scene file collaborationUnity scene file collaboration
Unity scene file collaborationNoam Gat
 
【UnityFukuoka13】エディタ拡張をし易くするエディタ拡張
【UnityFukuoka13】エディタ拡張をし易くするエディタ拡張【UnityFukuoka13】エディタ拡張をし易くするエディタ拡張
【UnityFukuoka13】エディタ拡張をし易くするエディタ拡張Tomioka Yusei
 

Viewers also liked (9)

Unityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknightsUnityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknights
 
Unity 5 の AssetBundle について (浅く) まとめてみた - 2015/05/22 第31回 Unity 勉強会
Unity 5 の AssetBundle について (浅く) まとめてみた - 2015/05/22 第31回 Unity 勉強会Unity 5 の AssetBundle について (浅く) まとめてみた - 2015/05/22 第31回 Unity 勉強会
Unity 5 の AssetBundle について (浅く) まとめてみた - 2015/05/22 第31回 Unity 勉強会
 
Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方
 
[UniteKorea2013] Memory profiling in Unity
[UniteKorea2013] Memory profiling in Unity[UniteKorea2013] Memory profiling in Unity
[UniteKorea2013] Memory profiling in Unity
 
Extending the Unity Editor
Extending the Unity EditorExtending the Unity Editor
Extending the Unity Editor
 
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
 
Unity scene file collaboration
Unity scene file collaborationUnity scene file collaboration
Unity scene file collaboration
 
LINQ in Unity
LINQ in UnityLINQ in Unity
LINQ in Unity
 
【UnityFukuoka13】エディタ拡張をし易くするエディタ拡張
【UnityFukuoka13】エディタ拡張をし易くするエディタ拡張【UnityFukuoka13】エディタ拡張をし易くするエディタ拡張
【UnityFukuoka13】エディタ拡張をし易くするエディタ拡張
 

Asset bundleなどの、Unity3d基礎知識