如何解决Unity / C#我对这个问题的看法是怎么回事
我有一个抽象的父类,称为Item 从此我成为装备固有的,从这里成为武器与装甲。因为我希望我的武器具有不同的行为,所以我希望我的逻辑可以在类上进行操作。我还从Item类继承到Resource类,该类应该是静态的。我的“装备”课程不应该而且应该是可实例化的,因为例如一把单独的剑。可以被削尖或损坏,以在不更改所有其他剑的情况下将其从基本类别更改。所以我需要克隆这些类实例。但是由于克隆类是一件非常不切实际的事情,所以我想知道我的体系结构是否做错了什么,并以错误的方式思考问题?有人有什么想法吗? / Mikael
解决方法
我认为您应该考虑为文件(xml或类似文件)中的项目设置“统计信息”,然后创建一个Factory类,该类可以为您提供一个已设置所有统计信息的文件。
即
public abstract ItemFactory{
public static Sword GetSword(){
var sword = new Sword();
//Set stats for sword from file
return sword;
}
}
,
为什么只能使用引用就使用克隆?如果我正确理解了您的问题,我将利用ScriptableObjects来定义您的项目对象,这使它们成为您项目中的资产。然后可以通过检查员进行分配。 通用的类布局可能看起来像这样。
class Equipment : ScriptableObject
{
public int goldCost;
}
class Weapon : Equipment
{
public intDefaultSharpness;
}
这些是您的定义类,请记住,它们是用来定义每个项目类别的常规属性的。因此,您可能拥有一把剑,但没有“火烈龙杀手之剑”。如果您查看有关ScriptableObjects
的链接,您将找到允许您从这些定义类实例化新资产的代码。现在,您可以创建更多的Broadsword和Ofc。现在,您的对象就变成了纹理和3D模型之类的资产。您可以在检查器中轻松地对其进行编辑(并且可能希望使用自定义编辑器使其更加美观)
类似于纹理或3D模型,我们不会在每次使用时都复制它,而是引用它。因此,当您的玩家角色持有武器时,您会拥有一个GameObject
子,它仅保留对原始对象和任何其他“本地”数据的引用。
class PlayerWeapon : GameObject
{
public Weapon template;
public int durability;
}
令人高兴的是,template
武器可以通过编辑器中的检查器进行分配,因为它只是普通资产。并且durability
属性是该playerWeapon的本地属性,GameObject
可以多次使用。
当然,可以根据需要扩展任意数量。我可能会添加getter / setter来隐藏基于buff / debuff的其他计算。像
public int AttackStrength
{
get
{
return owner.strength + template.strength
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。