我知道,通过扩展类,您可以创建一个子类,该子类可以访问其父代的所有变量和方法。但是,我试图实现的是一类具有许多必需变量的类,这些变量都可以在编辑器窗口中进行编辑。另一个具有所有相同的变量,但其中一些不可编辑,而是具有默认值。
我的具体示例是一个具有许多公共变量的对话类:
public class Dialogue : MonoBehaviour
{
// Public variables for determining whether the dialogue has automatic or manual triggering; and whether it's single use
public bool isAutomatic, isSingleUse;
// Public variables for determining whether an unlocked discovery is required in order to trigger the dialogue at all
public bool requiresDiscovery;
public string requiresDiscoveryType;
public int requiresDiscoveryId;
// Public lists for general conversations and default topic sentences
public List<Conversation> generalConversations;
public List<Sentence> defaultTopicSentences;
// Public variable for holding the optional topics in our conversation (can be left empty if desired)
public List<Topic> topics;
/* Methods here... */
}
以上类在Dialogue事件和Cutscene事件中都可以使用(其中可以包含角色移动和其他更复杂内容的多个对话)。它非常适合对话事件,但是我可以创建一个变量类,其中某些变量(例如isAutomatic,isSingleUse,requiresDiscovery等)会自动设置为false,而没有在编辑器中更改它们的选项。这是因为某些变量与过场事件无关,如果设置为true,可能会引起问题。
我遇到的问题是我是否可以将Dialogue用作父级,并以某种方式覆盖子类中某些变量的公共访问;或者如果还有另一种方法必须这样做。如果有人可以给我一个如何实现上述目标的代码示例,那将真的很有帮助。
谢谢。
答案 0 :(得分:0)
带有继承关系,否则您将要么在两个类中得到具有相同属性的代码重复,要么尝试将单个类合在一起用于两种用途,这与SRP背道而驰。将它们分开可以使您的生活更加轻松。
这样做,您将能够在一个过场动画中拥有多个Dialogue类,但是仍然在过场动画本身中具有Dialogue的功能。
创建一个名为Cutscene
的新类,并设置创建Dialogue
的新实例时所需的任何Cutscene
变量。
public class Cutscene : Dialogue
{
// Set whatever you need to false to prevent any issues
public Cutscene() {
this.isAutomatic = false;
this.isSingleUse = false;
this.requiresDiscovery = false
// etc...
}
}
如果您想了解有关继承的更多信息,请MSDN has a great page on it