TGViewer
SpellSinger - разработчик игр на Unity SpellSinger - разработчик игр на Unity @spellsingergames · 548 subscribers
Post #53 648
В дополнение к предыдущему посту, реальный пример с реальной проблемой.

Есть сущность CollectableType, это базовый класс, SO, описывающий параметры предметов, которые можно найти на карте.
public interface ICollectable
{
CollectableSkin Skin { get; }
}
public abstract class CollectableType<TSkin> : ScriptableObject, ICollectable where TSkin : CollectableSkin
{
// Property 'Skin' cannot implement property from interface 'Game.SO.Gems.ICollectable'. Type should be 'Game.SO.CollectableSkin'.
[field: SerializeField] public TSkin Skin { get; private set; }
}


Есть сущность CollectableSkin, это SO, описывающий внешний вид предметов.
public class CollectableSkin : ScriptableObject
{
[field: SerializeField] public TileBase Tile { get; private set; }
}


Среди предметов, бывают, например, бомбы. Бомбы наследуются от CollectableType
public class BombType : CollectableType<BombSkin>
{
[field: SerializeField] public float Damage { get; private set; }
}


И используют свой дочерний класс внешнего вида, BombSkin, в котором есть поля, специфичные для бомб.
public class BombSkin : CollectableSkin
{
[field: SerializeField] public AnimationClip Explosion { get; private set; }
}


В тех местах, где я работаю с базовым типом CollectableType, мне достаточно только базовых полей CollectableSkin. Но там, где я работаю конкретно с бомбами, мне нужно, чтобы свойство Skin возвращало именно BombSkin, так как там есть конкретные поля для бомб.

P. S. Мы же не всерьёз считаем принудительный каст безопасным решением проблемы?

P. P. S. Залетайте на стрим, обсудим проблему вживую, покажу, как я её решил.
  • 🤡 4
  • 🍓 4
  • 👍 3
  • 🤔 1
More from @spellsingergames
  1. Oct 1, 2026Автор
  2. Aug 31, 2026Post #235
  3. Aug 25, 2026Прошли модерацию на Crazy Games. Basic Launch продлится до 15 сентября или пока не наберет…
  4. Aug 24, 2026А мы, тем временем, идём покорять #crazy_games Вчера ночью отправили билд на модерацию. Мо…
  5. Aug 24, 20262 недели нужно рекоммендеру Яндекс игр, чтобы как-то отреагировать на изменения метрик. AR…
  6. Aug 14, 2026Шестой эпизод подкаста ГЕЙМДЕВ ПОД ПИВОМ уже во вторник, в 22:30МСК! Хорошенечко отоспитес…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →