Asset
Asset は Unity プロジェクト内のあらゆるリソースです。テクスチャ・モデル・音声・スクリプト・マテリアルなどが Assets/ に置かれ、ファイルパスではなく GUID で参照されます。Import Settings、Resources.Load、Addressables の基礎を学べます。
想像してみてください...
Asset は厨房のパントリー(食材庫)のようです。料理する(ゲーム実行)前に、シェフ(Unity Editor)は野菜(テクスチャ)、香辛料(マテリアル)、レシピ(スクリプト)、BGM(オーディオ)を集めます。すべて Assets パントリー にあります。生ファイルを直接調理するのではなく 参照 し、元の食材を変えるとそれを使う料理すべてが更新されます。
概念の詳細
Asset はプロジェクトの
Assets/ フォルダ配下のあらゆるファイルです。インポート時、Unity は GUID
(グローバル一意 ID)付きの .meta を作ります——これが、壊れやすいファイルパスに頼らず
GameObject やスクリプトが Asset を参照する仕組みです。
Asset Database(AssetDatabase)が
Editor 内の Asset を管理します。ファイル変更時に再インポートされます。ランタイムでは
Resources.Load() または
Addressables で動的に読み込みます。
主な Asset 種別: .png/.jpg
(Texture2D)、.fbx/.obj(Mesh)、.mp3/.wav(AudioClip)、
.cs(MonoScript)、.prefab(Prefab)、.mat(Material)、
.asset(ScriptableObject)。
Import Settings:Asset 種別ごとに設定があります—— Texture Compression / Max Size、Audio Load Type(Decompress on Load / Streaming)など。 正しい設定でメモリと読み込み時間を大きく削減できます。
ダイアグラム:Asset カテゴリ
Textures
.png .jpg .tga .psd
Texture2D · RenderTexture
Audio
.mp3 .wav .ogg
AudioClip
Models
.fbx .obj .blend
Mesh · Avatar
Scripts
.cs
MonoScript
Materials
.mat .shader
Material · Shader
Data Assets
.prefab .asset .anim
Prefab · SO · AnimClip
ハンズオン手順
プロジェクトへ Asset をインポート
Explorer/Finder から Project ウィンドウへドラッグ、または Assets → Import New Asset...
Import Settings を設定
Asset を選択 → Inspector → Compression、Max Size、Load Type… を調整 → Apply。
SerializeField で参照
Project の Asset を Inspector の [SerializeField] フィールドへドラッグ。
Addressables でオンデマンド読み込み
Asset を Addressable にし、必要なときに Addressables.LoadAssetAsync<T>(key)。
フォルダを整理する
明確なパスを使う:Assets/Art/Textures/、Assets/Scripts/… Assets 直下への大量配置は避けます。
インタラクティブシミュレーター
Import で Asset を追加。クリックしてプロパティを確認し、SerializeField に割り当てて GUID 参照を体験しましょう。
📁 Assets/
Asset がありません — "Import Asset" を押す
Inspector
Asset を選択
SerializeField
Asset をここにドロップ...
—
GUID: —
コード例
基本SerializeField で Asset を参照し、ランタイムで使う。
using UnityEngine;
public class WeaponController : MonoBehaviour
{
// Drag Assets from Project onto these fields in the Inspector
[SerializeField] private Sprite weaponIcon;
[SerializeField] private AudioClip shootSound;
[SerializeField] private GameObject bulletPrefab;
[SerializeField] private Material glowMaterial;
void Start()
{
// Use the assigned Asset — no runtime search needed
GetComponent<SpriteRenderer>().sprite = weaponIcon;
}
public void Shoot()
{
Instantiate(bulletPrefab, transform.position, transform.rotation);
AudioSource.PlayClipAtPoint(shootSound, transform.position);
}
}コード例
上級Resources.Load でランタイムに Asset を読み込みキャッシュする。
using UnityEngine;
using System.Collections.Generic;
// Runtime asset manager — load by key, cache for reuse
public class AssetCache : MonoBehaviour
{
private static Dictionary<string, Object> _cache = new();
public static T Load<T>(string path) where T : Object
{
if (_cache.TryGetValue(path, out var cached))
return cached as T;
// Resources.Load looks under Assets/Resources/
T asset = Resources.Load<T>(path);
if (asset != null)
_cache[path] = asset;
else
Debug.LogWarning($"Asset not found: {path}");
return asset;
}
public static void Unload(string path)
{
if (_cache.TryGetValue(path, out var asset))
{
Resources.UnloadAsset(asset);
_cache.Remove(path);
}
}
}
// Usage:
// var tex = AssetCache.Load<Texture2D>("Textures/hero_sprite");📌 要点
- ▸各 Asset の
.metaに GUID——安易に削除しない - ▸
SerializeField= 静的参照;Resources.Load= 動的読み込み - ▸Import Settings(Compression、Max Size)がビルドサイズに直結
- ▸大きなゲームでは Resources.Load より Addressables を優先
⚠️ よくあるミス
❌ .meta を削除・無視する
GUID が変わり → Scene/Prefab 参照が Missing
✅ Asset と一緒に .meta を必ず Git にコミット
❌ すべての Asset を Resources/ に突っ込む
Resources 配下はすべてビルドに含まれる → 肥大化
✅ 動的読み込みが必要なものだけ;それ以外は SerializeField