Skip to content

Thundernerd/Unity3D-SerializableInterface

Repository files navigation

Serializable Interface

GitHub package.json version GitHub issues GitHub pull requests GitHub license GitHub last commit

A wrapper that allows you to serialize interfaces. Both UnityEngine.Object and regular object implementers work!

Installation

  1. The package is available on the openupm registry. You can install it via openupm-cli.
openupm add net.tnrd.serializableinterface 
  1. Installing through a Unity Package created by the Package Installer Creator from Needle

Usage

Usage is pretty easy and straightforward. Assuming you have the following interface

public interface IMyInterface { void Greet(); }

You can add it to a behaviour like so

using TNRD; using UnityEngine; public class MyBehaviour : MonoBehaviour { [SerializeField] private SerializableInterface<IMyInterface> mySerializableInterface; private void Awake() { mySerializableInterface.Value.Greet(); } }

Back in the Unity inspector it will look like this

image

And when you click on the object selector button you will be shown a dropdown window with all possible options like this

image

As you can see you can select items from multiple locations:

  • Assets (Scriptable Objects and Prefabs that implement said interface)
  • Classes (custom classes that implement said interface)
  • Scene (objects in the scene that implement said interface)

For the sake of example for the image above I have created some simple implementations

using UnityEngine; public class MyComponent : MonoBehaviour, IMyInterface { /// <inheritdoc /> public void Greet() { Debug.Log("Hello, World! I'm MyComponent"); } }
using UnityEngine; public class MyPoco : IMyInterface { /// <inheritdoc /> public void Greet() { Debug.Log("Hello, World! I'm MyPoco"); } }
using UnityEngine; [CreateAssetMenu(menuName = "MyScriptable")] public class MyScriptable : ScriptableObject, IMyInterface { /// <inheritdoc /> public void Greet() { Debug.Log("Hello, World! I'm MyScriptable"); } }

Support

Serializable Interface is a small and open-source utility that I hope helps other people. It is by no means necessary but if you feel generous you can support me by donating.

ko-fi

Contributions

Pull requests are welcomed. Please feel free to fix any issues you find, or add new features.

About

A wrapper that allows you to serialize interfaces

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors 9

Languages