Unity C#Inherited Class Header

时间:2018-01-26 01:13:49

标签: c# unity3d

所以我正在开发一个带有一些.cs文件的项目,我不想修改它,因为它正由其他人更新。

所以我继承了这个课程。在基类中是标题:

public partial class BasePlayer : MonoBehaviour {    
    [Header("Stats")]
    [SyncVar] public int stat1 = 0;
    [SyncVar] public int stat2 = 0;
}

在我的课程中,我希望能够将另一个var添加到同一个标题中。我该怎么做呢?

public partial class MyPlayer : BasePlayer {    
   [SyncVar] public int stat3 = 0;
}

而且我知道这样做并不是很实际,但我真的无法触及基类。

3 个答案:

答案 0 :(得分:1)

答案较晚,但可能会帮助他人。而不是使用 Header 属性;您可以使用可序列化数据类对统计信息进行分组。例如:

[Serializable]
public class GroupOneData
{
    public int stat1;
    public int stat2;
}

[Serializable]
public class GroupTwoData
{
    public int stat3;
    public int stat4;
}

public abstract class BaseClass<T, U> : MonoBehaviour 
    where T : GroupOneData where U : GroupTwoData
{
    public T stats1;
    public U stats2;
}


[Serializable]
public class DerivedOneData : GroupOneData
{
    public int stat3;
}

[Serializable]
public class DerivedTwoData : GroupTwoData
{
    public string text = "yeeyy";
    public float stat3;
}

public class DerviedClass : BaseClass<DerivedOneData, DerivedTwoData>
{
      // You will see all stats in inspector as foldout 
}

一些现实生活中的例子是( GalleryVideoContent GalleryImageContent 都源自与上述BaseClass类似的 GalleryContent 类):

enter image description here

答案 1 :(得分:0)

你需要将属性放在你的类中,就像这样,

public partial class MyPlayer : BasePlayer {    
    [Header("Stats")]
    [SyncVar] public int stat3 = 0;
}
  

所以我正在开发一个项目,其中包含一些我不想要的.cs文件   修改,因为它正由其他人更新。

您的基类是Partial,您可以尝试以下代码。

public partial class BasePlayer : MonoBehaviour {
        [SyncVar] public int stat3 = 0;
}

编译器应将它们组合成一个类。

这是输出:

enter image description here

答案 2 :(得分:0)

我举了一个例子:

public class BasePlayer : MonoBehaviour {
    [Header("Stats")]
    public int stat1 = 0;
    public int stat2 = 0;
}

public class MyPlayer : BasePlayer {
    public int stat3 = 0;
    public string duck = "quak";

    [Header("Stats2")]
    public string cow = "mooooo";
}

unity example
希望能帮到你!据我所知,这就是你想要的。如果没有随意给我们提供更多信息,比如UnityEditor屏幕,你想要看到什么。

PS:当使用[SyncVar]时,你的基础游戏应该继承自NetworkBehaviour,对吗?