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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy