К sealed классу свои данные не добавить же, но можно вешать на объект компонент со своими данными и с помощью расширяющих методов упростить работу с этим компонентом. Сейчас написал небольшой пример, который реализует то что вы хотите получить)
Создаем класс(компонент), который будет хранить необходимые переменные-атрибуты для объекта. Самостоятельно вешать его на объект не нужно.
Используется csharp
using UnityEngine;
using System.Collections;
public class AttributesHolder : MonoBehaviour
{
public int Attribute01 = 0;
public int Attribute02 = 0;
public int Attribute03 = 0;
}
Далее создаем статический класс, который реализует расширяющий метод для GameObject. (Вешать его тоже на объект не нужно))
Используется csharp
using UnityEngine;
using System.Collections;
public static class GameObjectExtension
{
public static AttributesHolder Attribute(this GameObject go)
{
if (!go.GetComponent<AttributesHolder>())
{
go.AddComponent<AttributesHolder>();
}
return go.GetComponent<AttributesHolder>();
}
}
Все. Теперь для любого объекта типа GameObject можно получать доступ к свои аттрибутам просто написав gameObject.Attribute().Attribute01
Вот пример использования (его можно повесить на объект))
Используется csharp
using UnityEngine;
using System.Collections;
public class CollTester : MonoBehaviour {
public int ourCounter1 = 0;
public int ourCounter2 = 0;
public int ourCounter3 = 0;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
ourCounter1 = gameObject.Attribute().Attribute01;
ourCounter2 = gameObject.Attribute().Attribute02;
ourCounter3 = gameObject.Attribute().Attribute03;
}
[ContextMenu("SetAttribute1")]
void SetAttribute1()
{
gameObject.Attribute().Attribute01 = 101;
}
[ContextMenu("SetAttribute2")]
void SetAttribute2()
{
gameObject.Attribute().Attribute02 = 202;
}
[ContextMenu("SetAttribute3")]
void SetAttribute3()
{
gameObject.Attribute().Attribute03 = 303;
}
}