はじめに
先日のUniteで発表されたAddressableAssetsを早速使ってみようと意気込んで触っていましたが、ビルドして動かすまでに色々とトラップがあったので、とりあえずビルドしてローカルで動かすところまでのやり方をまとめておきます。
基本的には下記のスライドを参考に触っていきます。
https://www.slideshare.net/UnityTechnologiesJapan/unite-2018-tokyo-96499382/UnityTechnologiesJapan/unite-2018-tokyo-96499382
環境
Unity2018.2.0b4
※AddressableAssetsは現状Preview状態なので、正式にリリースされたら本記事は恐らく役に立たなくなるので注意
まぁそのときには公式ドキュメントも出てくるので大丈夫でしょう。
ハマりポイントその1
Proxyの設定によっては、UnityEditorの起動中にTimeOutしてEditorが起動しないことがあります。
どうやら起動時にPackageManagerがサーバとやり取りしているようで、対象のポートが空いてないとTimeOutしてしまうようです。
会社でProxyを使っている場合は、管理者の人になんとかしてもらいましょう!
準備
まずは、AddressableAssetsを導入します。
AddressableAssetsは現状Preview状態なので、Unity2018から導入されたPackageManagerではインストールできません。
そのため、[ProjectRoot]/Packages/manifest.jsonを直接編集してAddressableAssetsをインストールします。
以下を貼り付けてください。
当たり前ですが、Typoすると通りません!(1回それで微妙にハマりました)
{
"dependencies": {
"com.unity.addressables":"0.0.22-preview"
}
}
上記を保存するとEditor上でAddressableAssetsSystemのインストールが始まります。
AddressableAssetsでローカルパスの豆腐をロードしてみる
Editorが開いたら、Assets/StreamingAssetsフォルダを作りましょう。
次にとりあえずなんでもいいのでPrefabを作りましょう。
めんどくさいので、今回はCubeを作ってPrefab化します。
ハマりポイントその2
このとき、PrefabはStreamingAssetsフォルダに配置します。
その他のフォルダに置くと、Editor上では動くけどビルドしたら動かないので注意。
冒頭の資料だとStreamingAssetsに置いてないので、その辺もAddressableAssetsがいい感じに処理してくれるのかと期待してハマりました。
次に上記画像の通り、AddressableのチェックボックスをOnにします。
これで、CubeのPrefabをAddressableAssets化することができました。
次に、以下のコードを適当なGameObjectに貼り付けます。
using UnityEngine;
using UnityEngine.AddressableAssets;
public class AddressableTest : MonoBehaviour
{
public AssetReference m_Ref = null;
private GameObject m_Obj = null;
private void Update()
{
if( Input.GetKeyDown(KeyCode.Space) )
{
Addressables.Instantiate<GameObject>( m_Ref )
.Completed += op => m_Obj = op.Result;
}
if( Input.GetKeyDown(KeyCode.Delete) )
{
Addressables.ReleaseInstance( m_Obj );
}
}
}
Refには先ほど作ったCubeを設定しましょう。
AssetReferenceにはAddressableAssetsとして登録してあるオブジェクトが登録できるようになっています。
ハマりポイントその3
上記までで動きそうなもんですが、実はこのままでは動きません。
実際にEditor上で動かしてみると良いと思いますが、恐らくCubeのロードに失敗して動かないと思います。
ただしこの状態でもBuildすると動きます。
これはAddressableAssetsのPlayMode設定(冒頭の資料p37を参照)が誤っているためです。
そのため、下記の通り設定していきましょう。
まずは、AddressableAssetsWindowを表示します。
下記の通りPlayModeをVirtualからPackedに変更します。
以上で設定は完了です。
Editor上及び、Buildして実行してみてください。
きっと動くはずです。
最後に
やっていることは非常にシンプルなのですが、正式なドキュメントが無い中、
冒頭の資料と現状のUIが違っていて結構混乱しました。
そのうちリモート上でのAddressableAssetsSystemの利用についても書きたいですが、
その前に正式版でちゃうかも。