1.Editor编写
public
override
void
OnInspectorGUI ()
{
// target是Editor里的一个属性,指的就是我们需要改变的那个类,这里做强转换,不解释。
Item_Profile item = target
as
Item_Profile;
// 序列化更新,不解释。
serializedObject.Update();
// Add your code here.
// ……
// 更新编辑后的数据。
serializedObject.ApplyModifiedProperties();
}
item.item_id = EditorGUILayout.IntField("auto_id", item.item_id);
item.icon = EditorGUILayout.ObjectField ("icon", item.icon, typeof(Texture2D)) as Texture2D;
item.name = EditorGUILayout.IntField("name", item.name);
EditorGUILayout.PropertyField(serializedObject.FindProperty(“type")); 枚举、Color、Class、数组、NGUI、AudioClip、KeyCode
2.设计Item
新建一个C#脚本,重命名为:Item_Profile
作为道具的一员,之间肯定有某些共同的元素,例如名字,买卖价格,稀有程度等等。所以,我们首先要设计的是这些共同的元素。
item_id ID,这个ID有系统自动分配,所以不需要对齐作出设计,保留为public,只是为了方便查看而已。
icon 2D图标。
comment 道具的描述。
type 道具类型,武器或护甲之类的。
rare 稀有度。
color 颜色,关联稀有度,白色到紫色之类的可视化等级。[size=13.63636302948px]
buy,sell 买卖价格。
limit_stack 堆栈上线,例如20个一组的面包,或且无法叠加的武器或护甲。
model 3D模型。
然后就是武器属性的设计
weapon_type 武器的类型,单手剑或双手剑。
damage 攻击力,物理攻击或各种元素攻击。
damage_r 攻击力的波动范围。
接着就是护盾和护驾的设计了,将他们放一起,是因为他们都属于防具,属性都一样。
clan 种族,精灵或且兽人,如果装备有指定种族的话,这个属性能帮上忙。
armor_type 护甲类型,头部,手部还是护盾。
def 防御力,各种元素防御力。
主要的道具我们都已经设计好了,下面让我们来搞点新意。小弟就拿大家都比较感兴趣的合成配方这个部分来举例吧。
parts 合成所需的道具及数量。这里可能大家会有个疑问,为什么不用item_id 而要使用 Item_Profile 来关联道具,这个问题在设计道具管理器的时候会有解释。
final_product 终于的合成品。
3.Item的管理器
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Item_Database_Manager : MonoBehaviour
{
public Item_Profile empty_item;
public Item_Profile[] items;
static Item_Database_Manager idm;
// Use this for initialization
void Awake()
{
DontDestroyOnLoad(gameObject);
idm = gameObject.GetComponent<Item_Database_Manager>();
// auto assign the id to item
ReSort();
}
public void ReSort()
{
// auto assign the id to item
for (int i = 0; i < items.Length; i++)
{
items[i].item_id = i;
}
}
public static Item_Database_Manager Get_Manager()
{
if (idm == null)
{
Global_Manager.InitAll();
}
return idm;
}
// also referr to item id
public Item_Profile Get_Item(int index)
{
index = Mathf.Clamp(index, 0, items.Length);
return items[index];
}
public void Create_Empty_Item()
{
if (empty_item)
{
GameObject go = Instantiate(empty_item.gameObject) as GameObject;
go.name = "item";
}
}
}
4.背包系统
————————————————————————————————————————————
Type,背包的类型
6.就是茶水编写的脚本 UI_Item_Slot
7.设计最简单的 UI Description Weapon
Icon, 就一个纹理而已,用于显示道具的图标而已无压力。
Name,一个label和一个属性绑定的组件,用于显示道具名字和匹配道具的等级颜色,请小心如图配置好各项。
Text Area - Status,又一个label,用于显示道具属性。
Text Area - Description,又一个label,用于显示道具的描述。
8.UI Description Recipe