#scriptableobject
no, but if you make a gdscript class that extends Resource then instances of it can be serialised/deserialised and created/edited in the inspector. (similar to ScriptableObject in unity iirc)
November 5, 2026 at 9:09 PM
ScriptableObject and custom editors let content be authored without programming. #gamedev #dev #architecture #indie
October 30, 2026 at 2:09 AM
ScriptableObject и custom editors позволяют наполнять мир без кода. #unity #геймдев #разработка #инди
November 1, 2026 at 3:50 AM
ScriptableObject и custom editors позволяют наполнять мир без программирования. #геймдев #разработка #архитектура #инди
October 31, 2026 at 11:44 AM
มาลองทำระบบ Dialogue ง่าย ๆ ใน Unity กัน 🎮
เดินเข้าไปหา NPC แล้วกดคุย
บทพูดจะค่อย ๆ แสดงทีละประโยค และปิดเมื่อคุยจบ
โดยเก็บบทพูดไว้ใน ScriptableObject แยกออกจากตัว NPC
อยากลองเริ่มทำเกม แต่ยังไม่รู้จะเริ่มตรงไหน ไว้มาทำเกมด้วยกันที่ Workshop กับเราได้นะครับ
codekrub.dev/workshop

#Unity #Unity2D #GameDev #IndieDev #สอนทำเกม #codekrubdev
October 28, 2026 at 11:44 AM
ScriptableObject and custom editors let content be built without programming. #unity3d #gamedev #dev #indie
October 23, 2026 at 1:14 PM
Ассеты хранятся в Git LFS, конфиги в ScriptableObject. #геймдев #devlog #процесс #инди
October 23, 2026 at 4:58 AM
Procedural Weapon Generator: A ScriptableObject-based weapon model generator, with support for adding your own weapon parts! 🪓⚔️

Asset Store -> af.unity.com/sr/camref:10... (Affiliate Link)
itch -> awtdev.itch.io/procedural-w...

#gamedev #unityassetstore #itchio #gameassets #unity
October 19, 2026 at 12:06 PM
Resources seria como um ScriptableObject, e as suas referências do editor como se fosse o [Serializable] de uma classe

Mas sim, é exatamente isso ^^^
September 22, 2026 at 4:54 PM
Procedural Weapon Generator Pack: A ScriptableObject-based procedural weapon generator for near-infinite weapon models! 🪓⚔️

Asset Store -> af.unity.com/sr/camref:10... (Affiliate Link)
itch -> awtdev.itch.io/procedural-w...

#gamedev #unity #unityassetstore #itchio #gameassets
September 21, 2026 at 3:49 PM
Procedural Weapon Generator: A ScriptableObject based procedural weapon generator, with support for adding your own weapon parts! 🪓⚔️

Asset Store -> af.unity.com/sr/camref:10... (Affiliate Link)
itch -> awtdev.itch.io/procedural-w...

#gamedev #unity #unityassetstore #itchio #gameassets
September 15, 2026 at 1:44 PM
Procedural Weapon Generator: A ScriptableObject based procedural weapon generator, with support for adding your own weapon parts! 🪓⚔️

Asset Store -> af.unity.com/sr/camref:10... (Affiliate Link)
itch -> awtdev.itch.io/procedural-w...

#gamedev #unityassetstore #itchio #gameassets #unity
September 7, 2026 at 2:30 PM
デバッグとか機能オンオフとかのフラグ管理、プロジェクト設定みたいなデカデカScriptableObjectを最初に1個作っておけばもっと楽だったな……と今になって思うなど
September 1, 2026 at 12:57 PM
A ScriptableObject-based procedural weapon generator, with support for adding your own weapon parts ! 🪓⚔️

Unity Asset Store -> af.unity.com/sr/camref:10... (Affiliate Link)
itch -> awtdev.itch.io/procedural-w...

#unityassetstore #itchio #gameassets #gamedev
August 31, 2026 at 1:29 PM
How We Reduced Unity Mobile Memory by 35% & Eliminated GC Spikes: An Addressables & ScriptableObject Architecture Guide
> **TL;DR:** Scaling a production mobile title to 300K+ players across heterogeneous Android and iOS devices requires absolute mastery of runtime memory management. Uncontrolled Garbage Collection (GC) sweeps cause perceptible frame hitches, while unmanaged asset references trigger fatal Out-Of-Memory (OOM) crashes. This deep-dive outlines the production architecture—leveraging **Unity Addressables** , **ScriptableObject event channels** , **zero-allocation pooling** , and **ASTC texture pipelines** —that reduced our memory footprint by **35%** , eliminated GC frame drops, and locked a steady 60 FPS. ## 1. The Mobile Memory Bottleneck: Why Games Crash on 3GB RAM On mobile platforms, the OS aggressively terminates apps exceeding memory thresholds. In Unity mobile development, the two primary causes of failure are: 1. **Mono Managed Heap Fragmentation:** In Unity's non-compacting Boehm GC, the managed heap only expands—it **never shrinks** back to the operating system during gameplay. A single spike in allocations permanently balloons the heap footprint. 2. **Monolithic Asset Retention:** Direct `SerializeField` inspector links force all referenced prefabs, 4K textures, and audio clips into RAM upon initial scene loading. Managed Heap Expansion Behavior (Non-Compacting GC) ├── Initial Allocation: [ 24 MB Heap ] ├── Spike Frame (String concats, LINQ in Update): [ 140 MB Heap Expands! ] └── After GC Sweep: Free memory is fragmented; heap remains at 140 MB! ## 2. Replacing Direct References with Unity Addressables Migrating from direct inspector references and `Resources.Load` to **Unity Addressables** allows on-demand asynchronous streaming and explicit GPU/RAM unloading. ### Production Asynchronous Spawner (`AddressableSpawner.cs`) using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class AddressableSpawner : MonoBehaviour { [SerializeField] private AssetReferenceGameObject enemyPrefabReference; private AsyncOperationHandle<GameObject> loadHandle; private GameObject spawnedInstance; public async Task<GameObject> SpawnEnemyAsync(Vector3 spawnPosition, Quaternion spawnRotation) { // 1. Asynchronously load asset into memory only when required loadHandle = Addressables.LoadAssetAsync<GameObject>(enemyPrefabReference); await loadHandle.Task; if (loadHandle.Status == AsyncOperationStatus.Succeeded) { spawnedInstance = Instantiate(loadHandle.Result, spawnPosition, spawnRotation); return spawnedInstance; } Debug.LogError($"[Addressables] Failed to load prefab reference: {enemyPrefabReference}"); return null; } public void UnloadAndCleanup() { // 2. Destroy instance and release memory handle if (spawnedInstance != null) { Destroy(spawnedInstance); } if (loadHandle.IsValid()) { Addressables.Release(loadHandle); } } } ### Best Practices for Addressable Asset Bundles: * **Pack by Update Frequency:** Divide bundles into `Core_Static_Packed` (shipped in APK/IPA) and `Remote_LiveOps_Dynamic` (streamed from CDN on demand). * **Enforce Strict Handle Lifecycles:** Every `LoadAssetAsync` MUST have an associated `Addressables.Release` when the asset is destroyed. ## 3. Decoupled Architecture via ScriptableObject Events Direct manager singletons (`GameManager.Instance.OnPlayerDied()`) create hidden memory retention webs that prevent Garbage Collection. We replaced singletons with **ScriptableObject Event Channels** : // VoidEventChannelSO.cs - Asset stored in Project Window using System; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(fileName = "NewVoidEventChannel", menuName = "Events/Void Event Channel")] public class VoidEventChannelSO : ScriptableObject { private readonly List<Action> listeners = new List<Action>(); public void RaiseEvent() { for (int i = listeners.Count - 1; i >= 0; i--) { listeners[i]?.Invoke(); } } public void RegisterListener(Action listener) { if (!listeners.Contains(listener)) listeners.Add(listener); } public void UnregisterListener(Action listener) { if (listeners.Contains(listener)) listeners.Remove(listener); } } // PlayerDeathBroadcaster.cs - Zero GC Allocations public class PlayerDeathBroadcaster : MonoBehaviour { [SerializeField] private VoidEventChannelSO playerDeathChannel; public void KillPlayer() { // Broadcasts state changes with ZERO heap allocations playerDeathChannel.RaiseEvent(); } } ## 4. Zero-Allocation Object Pooling with `UnityEngine.Pool` Instantiating and destroying GameObjects during gameplay causes severe GC pauses. We implemented pre-warmed generic pooling using `UnityEngine.Pool.ObjectPool<T>`: using UnityEngine; using UnityEngine.Pool; public class ProjectilePool : MonoBehaviour { [SerializeField] private GameObject projectilePrefab; private IObjectPool<GameObject> pool; private void Awake() { pool = new ObjectPool<GameObject>( createFunc: () => Instantiate(projectilePrefab, transform), actionOnGet: (instance) => instance.SetActive(true), actionOnRelease: (instance) => instance.SetActive(false), actionOnDestroy: (instance) => Destroy(instance), collectionCheck: false, defaultCapacity: 50, maxSize: 200 ); } public GameObject Spawn(Vector3 position, Quaternion rotation) { GameObject projectile = pool.Get(); projectile.transform.SetPositionAndRotation(position, rotation); return projectile; } public void Despawn(GameObject projectile) => pool.Release(projectile); } ## 5. Texture & Shader Optimization Pipeline Textures represent **60–75% of total mobile memory**. We enforced the following compression rules: * **ASTC 6x6:** Standard for UI elements, background props, and environment textures. * **ASTC 4x4:** Reserved strictly for hero character models and high-detail focal assets. * **MaterialPropertyBlocks:** Replaced all `meshRenderer.material.color` calls with `MaterialPropertyBlock` to prevent accidental runtime material cloning and preserve GPU static/dynamic batching. ## 6. Production Benchmarks (300K+ User Scale) Benchmark Metric | Before Optimization | After Addressables & SO Architecture ---|---|--- **Peak RAM Consumption** | 890 MB | **578 MB (-35%)** **Garbage Collection Allocations** | 42 KB / frame | **0 Bytes / frame (Steady State)** **Frame Rate on Low-Tier Devices** | 42 FPS (Frequent Spikes) | **Locked 60 FPS** **Crash Rate (OOM on Low-End Android)** | 2.8% | **< 0.12%** **Initial Download Size (Store APK)** | 215 MB | **72 MB (Balance streamed dynamically)** ## 7. The Performance Checklist for Senior Unity Devs * [x] Profile with **Memory Profiler** to identify duplicated textures and leaked unmanaged buffers. * [x] Replace all `Resources.Load` dependencies with **Addressables**. * [x] Enforce `UnityEngine.Pool` for all runtime spawned entities (projectiles, particles, VFX). * [x] Use `MaterialPropertyBlock` instead of modifying `Renderer.material` directly. * [x] Eliminate per-frame LINQ, string concatenation, and lambda closures in `Update()`. _Find more architectural patterns on my GitHub or connect on LinkedIn!_
dev.to
August 28, 2026 at 7:10 PM
* Not willing to jump in engine and tweak numbers.
** I'm not saying code the feature but if you don't like how something feels, try adjusting the values but be willing to open Unity and click a ScriptableObject and test things...again can't read your mind and don't mind teaching it...
August 22, 2026 at 12:20 AM
Procedural Weapon Generator: A ScriptableObject based procedural weapon model generator, with support for adding your own weapon parts! 🪓⚔️

Asset Store -> af.unity.com/sr/camref:10... (Affiliate Link)
itch -> awtdev.itch.io/procedural-w...

#gamedev #unity #assetstore #itchio #gameassets
August 18, 2026 at 2:15 PM
最後の難関は、フライトに行ったとたんに、クラッシュ。

これは、とある ScriptableObject の OnEnable()でテクスチャを読んでいるのだが、
PlayImage = Addressables.LoadAssetAsync<Texture2D>(PlayButtonImage).WaitForCompletion();
と書いたのが原因。
April 8, 2024 at 12:15 PM
機体データをScriptableObject化した (本当は空力パラメタのほうが調整多く必要なのでそっちをScriptableObject化したいが)。
スパゲッティ状態だったコンポーネント間のやりとりを整理した。1機にAircraftGameLogicコンポーネントひとつ、その下に純粋なC#クラス群を持つ。
February 26, 2024 at 12:52 PM
Unityエディタ上でテストも通してマニュアルでも普通にプレイできるのに、WebGLビルドしてwebブラウザでプレイしてみたらボコスカ不具合が出てなんやと思ったら、ScriptableObjectのフィールド配列の要素にmissingなprefabがあると、ビルド時にその要素より後ろ側の要素だけが欠落する謎挙動になるのね…(前側の要素は普通にあるから長時間ハマった…)
August 20, 2024 at 3:24 PM
Lol, old Battle High ScriptableObject asset had the win quotes, boss battles, AND challenges combos all in the same asset.

Also, damn Klein is an asshole, lol
December 1, 2024 at 11:21 PM
ScriptableObject, UnityEvent, UIToolkit の基本的な使いかたを覚えたのが大きい。
これで次はもっと楽に作れそう。
September 23, 2024 at 1:46 PM
#Unity
github.com/tadosuke/uni...
先日公開した『斜方蹴射』の改良・リファクタリングが一通り終わりました。
(※ゲームの見た目はさほど変わっていないので省略します)

- GameManager スクリプトを分割
- 定数・ゲーム内変数について、ScriptableObject を使うようにした
- イベント通知に UnityEvent を使うようにした
- タイトルテキストを日本語化(そのためのフォントアセットを作成)
- タイトル・リザルト画面に UIToolkit を使うようにした
Release v2.1 · tadosuke/unity_shahou
タイトルテキストを日本語化 タイトル・リザルト画面に UIToolkit を使うようにした
github.com
September 23, 2024 at 1:46 PM