我有一个主代码,存储有关球员的所有信息:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[CreateAssetMenu(fileName = "CarData", menuName = "Data/Car/CarData")]
public class CarData : ScriptableObject
{
[SerializeField] public ScriptableObject carAttachmentData;
private int playerHealth;
void Start()
{
playerHealth = carBodyData.health;
}
}
我需要这个变量只接受两个类,即:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[CreateAssetMenu(fileName = "CarAttachment1Data", menuName = "Data/Car/CarAttachmentData")]
public class CarAttachment1Data : ScriptableObject
{
public int health; //for example
}
以及
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[CreateAssetMenu(fileName = "CarAttachment2Data", menuName = "Data/Car/CarBodyData")]
public class CarAttachment2Data : ScriptableObject
{
public int health; //for example
}
编译时单元报错:
“ScriptableObject”不包含“healthUp”的定义,并且找不到接受“ScriptableObject”类型的第一个参数的可访问扩展方法“healthUp”(是否缺少using指令或程序集引用?)
(in实际上,healthUp
变量存在,这是真正的错误代码)
这个问题可以通过接受数据CarAttachment1Data
或CarAttachment2Data
来解决,但是我需要变量同时接受两个可能的类,因为这个选项是允许的
类不能组合,因为在一个整体中它们是完全不同的对象,但它们包含在主脚本中获取它们所需的相同类
已尝试public interface
,但生成错误
我尝试询问chatGPT问题,但没有帮助
1条答案
按热度按时间n9vozmp41#
在C#中不可能声明两种不同类型的变量。可以将公共功能移到基类中:
子类:
以及
在编辑器中,您可以保存2个不同的资产“出租车”和“卡车”,并检查类型的调用代码: