Tool

Ninito's Scriptable Architecture

year
2020
ABOUT THE PROJECT

Scriptable Architecture is my personal implementation of a popular Unity programming paradigm - utilizing ScriptableObjects as variables, events, and more to compose an architecture that is easily modified by designers and artists through the inspector. It is based on Ryan Hipple’s excellent Unite 2017 talk. This particular implementation focuses on being feature-rich and goes beyond what was presented originally in Ryan's talk.

DOWNLOAD

How It Empowers Designers To Add More Value

Ryan Hipple's 2017 Unite Austin talk is well-known for a reason. It introduces ScriptableObjects as a simple way of democratizing access to functionality creation to designers. It is, arguably, a simple form of visual scripting.

When used properly, this ScriptableObject-centric approach to architecture allows anyone, regardless of technical knowledge, to define when certain gameplay events occur, how other gameplay factors influence them, how and when certain UI is displayed, etc. The direct result of this is that designers can then create more content with less assistance from programmers.

My particular implementation of this ScriptableObject-based architecture expands a bit beyond the concepts presented in Ryan's talk by including additional tools:

  • ScriptableActions; a way for programmers to create modular behavior that a designer can then harness and combine to create sophisticated behavior of their own.
  • ScriptableEnums; an equivalent of SmartEnums for Unity, that make enum-reliant logic follow SOLID principles more closely, as well as making enums editable by designers.
  • RuntimeSets; a ScriptableObject-based approach to inspector dependency injection.

How It Impacted Projects

Here are some of the ways I've experienced it impact projects I've worked on, as well as some user feedback I've received:

  • It freed up programmers to focus on more valuable tasks by reducing the amount of direct support designers needed.
  • It increased designer value output by giving them greater control over gameplay logic.
  • It significantly reduced coupling in project code by adding ScriptableVariables and ScriptableEvents as an intermediate layer of code between classes.