Unity中能否为A<int>属性同时赋值B和C?序列化相关问题
Unity泛型类赋值与序列化问题解答
一、赋值兼容性问题
你的代码里:
B继承自A<int>,和prop的类型A<int>是父子类关系,所以B类的实例可以正常赋值给prop;C继承自A<float>,A<int>和A<float>是两个完全独立的泛型实例类型,不存在任何继承或兼容关系,所以C类的实例根本无法赋值给prop,编译阶段就会报错。
二、Unity序列化机制说明
Unity默认序列化系统不支持直接序列化泛型抽象类的字段,直接声明public A<int> prop;的话,Inspector面板里不会显示这个属性,无法通过编辑器赋值。
要实现多态序列化,需要给字段添加[SerializeReference]属性,修改后的代码如下:
public class D : MonoBehaviour { [SerializeReference] public A<int> prop; // 此时可在Inspector中选择B类实例赋值,C类仍无法选择(类型不匹配) }
添加[SerializeReference]后,Unity会启用引用类型的多态序列化,允许你在Inspector中选择符合类型要求的子类实例,但依然只能选类型兼容的对象——C类因为泛型参数不匹配,还是无法被选中赋值。
Unity不存在所谓的"隐式序列化"或类似"Serialize As"的机制,能强制将类型不兼容的对象序列化到该字段中,类型匹配是前提。
内容的提问来源于stack exchange,提问作者Panakvina321
相关产品推荐
相关产品推荐

