【Unity】非推奨のResouceを使わずInstantiateする(Addressableの使い方)
目的
Instantiateを使う際Resourceを使ってインスタンスを作る方法が主流ですが、Resourceは以前から非推奨となっています。にもかかわらずResource以外でInstantiateを使う方法が見つからないので、今回新機能のAddressableを使ってInstantiateを使う方法をご紹介しようと思います。
Addressableとは
Addressableとは新しいリソース管理システムです。興味のない方のために簡単に言うと、アセットをローカルとかネットからとか気にせずに読み込めるシステムです。詳細は公式を見てください。
Addressable Asset System(Addressables)は、複雑なライブコンテンツを提供する大規模な制作チーム向けのサポートを向上する Unity エディターおよびランタイムのアセット管理システムです。このシステムでは、非同期ロードを使用して、あらゆる依存関係のコレクションが存在する、任意の場所からロードを行うことができます。Addressables では、アセットバンドルをより効率的にパッキングし、イテレーション時間を減らすことで、ダイナミックなゲームをシンプルに作成できます。
Addressables を使用すれば、イテレーション時間、依存関係管理、メモリ管理、コンテンツパッキングなど、開発者が抱えるさまざまな課題に対応することができます。
Unity公式ホームページより https://unity.com/ja/how-to/simplify-your-content-management-addressables#:~:text=Cloud%20Content%20Delivery-,Addressables%20%E3%81%AE%E6%A6%82%E8%A6%81,%E3%81%AE%E3%82%A2%E3%82%BB%E3%83%83%E3%83%88%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%A7%E3%81%99%E3%80%82
使用方法
Addressablesを有効にする
メニューバーの「Window」→「PackageManager」でパッケージマネージャ画面が表示されるので、右上の検索欄に「add」
Addressablesが表示されたら選択して右下の「Install」をおす。
オブジェクトの追加
新規プロジェクトで「3D」を選択し、画面に「Plane」と「Sphere」を追加します。
プレハブの作成
SphereにRigidBodyを加え、Assetsにドラッグ&ドロップしてPrefabにします。
Addressableで使用するアドレスの設定
Prefabを選択し「Inspector」から「Addressable」にチェックを入れます。そうすると右側にアドレスが表示されます。
スクリプト作成
C#スクリプトをAssetsの中に作り、
新しいC#スクリプトを作って以下のコードを書き、ドラッグ&ドロップで「Plane」に加える。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.EventSystems;
using UnityEngine.ResourceManagement.AsyncOperations;
public class NewBehaviourScript : MonoBehaviour
{
private AsyncOperationHandle<GameObject> handle;
void Start()
{
handle = Addressables.LoadAssetAsync<GameObject>("Assets/Sphere.prefab");
}
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
Instantiate(handle.Result);
}
}
private void OnDestroy()
{
if(handle.IsValid())
Addressables.Release(handle);
}
}
実行する
中央上の矢印ボタンを押して、実行させてみましょう。
スペースキーを押すと、たくさんのボールが一気にぶわーっと出てきます。
こういう画面になれば成功です。
まとめ
以前からResourceは非推奨でしたが、代替の方法について言及されている物が少なく、何を使えばいいのかわかりませんでした。
今回は今回はAddressableを使うことにより代替の方法を提供し、簡単にInstantiateが使える方法を紹介しました。
アセットを事前に呼び出すことにさえ気を付ければ簡単に利用することができるので、ぜひResourceからの脱却を図っていただけたらと思います。
ロボットコーダーズの生徒のみサンプルプロジェクトの提供をしています。欲しい方は各教室の先生に連絡してください。