我使用的是最新版本的Unity,我有一个属性为public AllStats BaseStats { get; set; }
的类,其中类AllStats的实现如下:
public class AllStats : IEnumerable<Stats>
{
private MagicPower magicPower;
public MagicPower MagicPower
{
get { return magicPower; }
set
{
magicPower = value;
Add("Magic Power", magicPower);
}
}
private DebuffDuration debuffDuration;
public DebuffDuration DebuffDuration
{
get { return debuffDuration; }
set
{
debuffDuration = value;
Add("Debuff Duration", debuffDuration);
}
}
private Defense defense;
public Defense Defense
{
get { return defense; }
set
{
defense = value;
Add("Defense", defense);
}
}
private MagicDefense magicDefense;
public MagicDefense MagicDefense
{
get { return magicDefense; }
set
{
magicDefense = value;
Add("Magic Defense", magicDefense);
}
}
private CriticalPower criticalPower;
public CriticalPower CriticalPower
{
get { return criticalPower; }
set
{
criticalPower = value;
Add("Critical Power", criticalPower);
}
}
private CriticalChance criticalChance;
public CriticalChance CriticalChance
{
get { return criticalChance; }
set
{
criticalChance = value;
Add("Critical Chance", criticalChance);
}
}
private Multistrike multistrike;
public Multistrike Multistrike
{
get { return multistrike; }
set
{
multistrike = value;
Add("Multistrike", multistrike);
}
}
private CooldownReduction cooldownReduction;
public CooldownReduction CooldownReduction
{
get { return cooldownReduction; }
set
{
cooldownReduction = value;
Add("Cooldown Reduction", cooldownReduction);
}
}
private Evasion evasion;
public Evasion Evasion
{
get { return evasion; }
set
{
evasion = value;
Add("Evasion", evasion);
}
}
private Resistance resistance;
public Resistance Resistance
{
get { return resistance; }
set
{
resistance = value;
Add("Resistance", resistance);
}
}
private readonly Dictionary<string, Stats> _items = new Dictionary<string, Stats>();
public void Add(string element, Stats config)
{
_items[element] = config;
}
public Stats this[string element]
{
get { return _items.ContainsKey(element) ? _items[element] : null; }
set { _items[element] = value; }
}
public IEnumerator<Stats> GetEnumerator()
{
return _items.Values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _items.Values.GetEnumerator();
}
}
但是,当我尝试像这样创建这个类的新实例时:
BaseStats = new AllStats()
{
MagicPower = new MagicPower(Level.CurrentLevel),
DebuffDuration = new DebuffDuration(Level.CurrentLevel),
Defense = new Defense(Level.CurrentLevel),
MagicDefense = new MagicDefense(Level.CurrentLevel),
CriticalPower = new CriticalPower(1),
CriticalChance = new CriticalChance(1),
Multistrike = new Multistrike(1),
CooldownReduction = new CooldownReduction(1),
Evasion = new Evasion(1),
Resistance = new Resistance(1)
};
我得到空引用异常。这是为什么 ?这曾经在普通的视觉工作室中工作,但似乎旧版的统一导致了一些问题。我该如何解决这个问题?
以下是Stats
类:
public enum StatsOrders
{
MagicPower,
DebuffDuration,
Defense,
MagicDefense,
CriticalPower,
CriticalChance,
Multistrike,
CooldownReduction,
Evasion,
Resistance
}
public abstract class Stats : IStats
{
public double PointsInStats { get; set; }
public bool IsSuccessfulHit(double baseStats)
{
return Increase(baseStats)*10 >= new RngCrypto().Next(1, 1001);
}
public double Increase(double baseInput)
{
return CalculateIncreament(baseInput, PointsInStats);
}
protected abstract double percentageIncrease { get; set; }
protected Stats(double pointsInStats)
{
PointsInStats = pointsInStats;
}
protected double CalculateIncreament(double baseInput, double pointsInStats)
{
string a = (baseInput * (pointsInStats / percentageIncrease)).ToString("N1");
return double.Parse(a);
}
}
只要你升级就会使用枚举,你会得到一个小的通知窗口,其中包含更新的统计数据,这个枚举有助于使它们按顺序排列。
IStats
界面:
public interface IStats
{
double PointsInStats { get; set; }
bool IsSuccessfulHit(double baseStats);
double Increase(double input);
}
答案 0 :(得分:1)
你在做什么,我可能会误解,但我看不到任何与Unity或游戏引擎的连接。
假设您正在处理,例如“不同种类的射弹”。好?这是一个有约300万玩家的游戏示例。你可以在游戏引擎中做的就是 GameObject 。在游戏引擎中没有任何其他内容。
没有“对象”,没有“继承” - 除了 GameObject 之外,根本没有任何东西。 (它带有转换张量,集成到GPU芯片和渲染周期,因此它是一个游戏引擎。)
除了“GameObject”之外,Unity中绝对没有任何内容。请注意,您不能以任何方式修改,更改,更改或确实对GameObject执行任何操作。 Unity甚至不是模糊 OO或结构化。 Unity就像我的厨房桌子一样OO。
不要忘记,游戏引擎与编程完全没有联系,你可能会有“类”这样的概念,可能会或可能不会“实例化”等等。游戏引擎中唯一的东西是 GameObjects - 这些都是实际的,特定的东西。
(你可以说它们是“实例化的”,但这完全没有意义 - 游戏引擎中只有只有单身,没有概念性的方法你可以拥有“实例化“ GameObject。说出来它甚至都没有意义。假设您使用的是Photoshop,并且在页面上放置了”彩色线条“。您不会说”哦,那是实例化的彩色线“ - 它只是..图像中的一条彩色线条。所有的Photoshop都是彩色线条。)
无论如何......在某个地方或其他地方,你将拥有每个射弹的**模型“,说有7个(炸弹,子弹,箭头......你明白了)。
稍后您将在游戏过程中根据需要复制并放置这些(以使机枪工作 - 或其他任何方式)。
所以你去“点击”并制作一个游戏对象,也许就是把它放在屏幕外,然后你把它命名为“炸弹”。
好的,所以你的工作已经完成。其他人,不是你,醉酒和艺术的人会来,并添加诸如“渲染”或“动画”之类的东西或“炸弹”,“箭头”等等。
你会(没有别的办法)把它设置成这样......
...以便您的老板或创意总监或任何人可以设置“损坏”,“速度因素”等值。
{注意。 Unity--目前 - 碰巧使用一种语言c#来编写行为,这是一种“OO语言”。这很棒,当然,你必须成为OO的主人,才能写出那种语言。 Unity可能会改为使用完全非OO语言(lisp或其他)。所使用的语言,目前用于编写行为,恰好是一种OO语言,与统一与OO完全没有联系的事实完全没有关系,它是一个ECS系统(“这就像使用Microsoft Word“)。}
因此,关于您提供的代码片段,我无法看到它与Unity中的密切关系。当然,这是一个有趣的抽象问题(“这在Unity当前正在使用的网络版本中是如何工作的......”或者其他什么)但距离预订还有很长的路要走,似乎浪费时间(你的业务,当然!)