如何以有条理且易于管理的方式构建项目(因为有不同类型的项目)。
我的想法是让一个ItemManager加载所有项目并存储它们。但是,这是我不确定的。只有武器才有最小和最大伤害。只有盔甲才有盔甲。我真的应该将它们全部存储为Item吗?
凭借传承,我可以解决这个问题(我想!)。
ItemManager.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ItemManager : MonoBehaviour {
private static List<Item> items;
public ItemManager () {
items = new List<Item> ();
}
void Awake () {
DontDestroyOnLoad (this);
// load all items from file
}
public static int Length {
get {return items.Count;}
}
public static Item Item (int index) {
return items [index];
}
}
Item.cs
using UnityEngine; // only used for debug purposes
public class Item : MonoBehaviour { // : MonoBehaviour are for debug purposes
private string _name;
private string _desc;
private int _maxQuantity; // quest items wont have one
private int _category;
private bool _dropable; // quest items wont have one
private int _price; // quest items wont have one
public Item () {
_name = string.Empty;
_desc = string.Empty;
_quantity = 0;
_maxQuantity = 0;
_category = 0;
_dropable = false;
_price = 0;
}
#region Setters and Getters
public string Name {
get {return _name;}
set {_name = value;}
}
public string Desc {
get {return _desc;}
set {_desc = value;}
}
public int MaxQuantity {
get {return _maxQuantity;}
set {_maxQuantity = value;}
}
public int Category {
get {return _category;}
set {_category = value;}
}
public bool Dropable {
get {return _dropable;}
set {_dropable = value;}
}
public int Price {
get {return _price;}
set {_price = value;}
}
#endregion
}
// enum used to identify categories by name
public enum ItemCategory {
Miscellaneous,
Quest,
Consumable,
Weapon,
Armor,
Gem,
Resource,
};
我通常(尝试!)当变量具有getter和/或setter时使用_作为前缀。
存储项目的“实例”将在角色/队伍级别完成。持有项目和数量。
以此作为开始,我遇到了很多关于如何处理变量的实际存储和访问的问题。
如何实际包装物品存储和加载过程?
答案 0 :(得分:1)
只有武器才有最小伤害和最大伤害。只有盔甲才有盔甲。我真的应该将它们全部存储为Item吗?
您可以为从Weapons
类继承的Armors
和Item
定义另一个类。创建Item
类abstract
,并在其中定义公共属性它
只是为了得到并设置一个变量,你不需要像这样的属性:
public string Desc {
get {return _desc;}
set {_desc = value;}
}
如果在获取和设置值时没有不同的逻辑,请使用auto-implemented属性:
public string Desc { get; set; }
答案 1 :(得分:1)
我会使用Interfaces:一个基本接口,用于常见的东西,如ID,名称等,以及其他用于武器/装甲等的接口。 然后,您可以在运行时测试实现哪些接口可以按行动(即显示损坏或护甲值)。 遗传的主要好处是组合的容易性和鸭子打字的可能性,例如有一些东西是椅子和需要的武器。