Criar ScriptableObjects no Unity

ScriptableObject em Unity é um tipo especial de classe que permite a criação de objetos reutilizáveis ​​orientados a dados. É comumente usado para armazenar e gerenciar dados, configurações e configurações do jogo, mas também pode ser usado para uma variedade de propósitos, como gerenciar configurações do jogo, criar sistemas baseados em dados, definir habilidades do personagem, armazenar diálogo ou informações de missão, etc. Ele fornece uma maneira flexível e eficiente de organizar e gerenciar dados em Unity projetos.

A principal vantagem de ScriptableObjects é que eles fornecem uma maneira de criar contêineres de dados que podem ser facilmente compartilhados e reutilizados em várias instâncias de scripts. Eles podem ser considerados como "blueprints" para criar instâncias de um tipo de dados específico. É possível criar várias instâncias de um ScriptableObject e modificar seus dados independentemente.

Criar um ScriptableObject

ScriptableObject pode ser criado no editor Unity e salvo como ativos no projeto. Ao contrário dos scripts MonoBehaviour, ScriptableObject não é anexado ao GameObject na cena, mas pode ser referenciado e usado por outros scripts.

Para criar um ScriptableObject, siga os passos abaixo:

  • No Unity editor, clique com o botão direito do mouse na janela Projeto e navegue até "Criar -> C# ScriptableObject".
  • Dê a ele um nome significativo e abra o script no editor de código preferido.

Definindo a classe ScriptableObject:

  • No script, herde da classe ScriptableObject.
  • Defina campos ou propriedades públicas para representar os dados a serem armazenados no ScriptableObject.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    public string dataName;
    public int dataValue;
}

No exemplo acima, definimos uma classe ScriptableObject com dois campos públicos: 'dataName (string)' e 'dataValue (int)'.

Personalizando o ScriptableObject no Inspetor:

  • Use atributos como '[SerializeField]' para expor campos específicos ao Inspetor Unity para modificação enquanto mantém esses campos inacessíveis do script que irá use esse ScriptableObject.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    [SerializeField]
    private string dataName;

    [SerializeField]
    private int dataValue;
}

Criando instâncias de ScriptableObjects:

  • No editor Unity, clique com o botão direito do mouse na janela Projeto e selecione "Create" para criar uma instância do ScriptableObject.
  • Personalize os dados da instância criada no Inspetor.

Acessando dados ScriptableObject de outros scripts:

  • No script MonoBehaviour ou em qualquer outro script, crie um campo público ou serializado do tipo ScriptableObject e atribua-o na exibição do Inspetor.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • Os dados da instância ScriptableObject podem ser acessados ​​por meio do campo atribuído.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

    private void Start()
    {
        Debug.Log("Data Name: " + myData.dataName);
        Debug.Log("Data Value: " + myData.dataValue);
    }
}

Conclusão

ScriptableObjects são uma ferramenta versátil para gerenciar e organizar dados em projetos de jogos. Ao criar contêineres de dados reutilizáveis ​​e personalizáveis, o ScriptableObjects oferece uma maneira flexível e eficiente de armazenar configurações, configurações e outras informações não específicas da instância. Com a capacidade de criar várias instâncias de um ScriptableObject e modificar seus dados independentemente, torna-se fácil criar sistemas orientados a dados, gerenciar configurações de jogo, definir habilidades de personagens, armazenar diálogos ou informações de missões e muito mais. A utilização de ScriptableObjects aprimora a capacidade de reutilização, capacidade de manutenção e escalabilidade dos projetos Unity, simplificando o processo de desenvolvimento e capacitando a criação de jogos mais robustos e dinâmicos.

Artigos sugeridos
Unity Como criar um sombreador
Uma introdução ao GUILayout no Unity
Implementando temporizadores no Unity
Como fazer um objeto seguir o cursor do mouse no Unity
Criando um GrabPack no Unity inspirado em Poppy Playtime
Criando um efeito bullet time no Unity
Criando objetos interativos no Unity