Unity3d - RPG项目学习笔记(九)

现在开始处理游戏的背包系统。

处理背包系统的第一步是读取物品信息,即将我们设计好的物品读取到内存中,实现调用。

思路:①建立txt文本,设计物品信息;②建立ObjectsInfo类,在类中读取txt文本中的信息。

脚本如下:

①建立txt文本

序号      名称      icon名称    类型  hp mp price_sell.price_buy

1001,生命药水,icon_01,Drug,100,0, 50,100

1002,魔法药水,icon_02,Drug,0,100, 60,120

②建立ObjectsInfo类

Class ObjectsInfo

{

public static ObjectsInfo _intance;

public TextAsset objectText;

public Dictionary <int,ObjectInfo> ObjectInfoDict = new Dictionary<int,ObjectInfo>();

void Awake()

{

_intance = this;

}

public ObjectInfo GetObjectInfoById(int id)

{

ObjectInfo = null;

ObjectInfoDict.TryGetValue(id,out info);

return info;

}

public void ReadInfo( )

{

string text = objectText.text;

string[ ] strArray = text.Split(‘\n‘);

foreach( string str in strArray )

{

ObjectInfo info = new ObjectInfo( );

stringp[] strPro = str.Split(‘,‘);

int id = int.Parse(strPro[0]);

string name = strPro[1];

string icon_name = strPro[2];

string strType = strPro[3];

info.id = id; info.name = name; info.icon_name = icon_name;

ObjectType type = ObjectType.Drug;

switch( strType)

{

case "Drug":

type = Object.Drug;

break;

case "Equip":

type = Object.Equip;

break;

case "Mat":

type = Object.Mat;

break;

}

info.type = type;

if(type == Object.Drug)

{

int hp = strPro[4];

in mp = strPro[5];

int price_sell = strPro[6];

int price_buy = strPro[7];

info.hp = hp;info.mp =mp;info.price_sell = price_sell; info.price_buy = price_buy;

}

ObjectInfoDict.Add(id,info);

}

}

public eunm ObjectType{Drug,Equip,Mat}

public Class ObjectInfo

{

public int id,hp,mp,price_sell,price_buy;

public string name,icon_name,type;

}

以上便实现了物品信息存储到内存空间,本日总结到此为止。

时间: 2024-10-24 19:34:51

Unity3d - RPG项目学习笔记(九)的相关文章

Unity3d - RPG项目学习笔记(二十九)

好了接上期工程,我们本期来实现图标拖动到快捷栏的方法. 需求:当技能图标拖动到快捷栏时,放开鼠标后,快捷栏对应的格子会显示技能图标. 思路:很简单,我们在每个快捷栏下设置一个任意icon,将其尺寸调整到合适大小,并且使其默认不显示,当技能图标拖动至快捷栏时,使该icon显示出来,并设置为该技能的icon. 注意:为了后续使用快捷栏的技能/物品,我们需要建立以一个enum,管理快捷栏内的物品类型. public enum ShortCutType { Skill,Inventory,None }

Unity3d - RPG项目学习笔记(二十)

前期工程将装备信息导入到了工程中,且实现了在背包内鼠标移动显示物品提示信息,本次工程开始构建装备穿戴功能. 项目需求: 右键点击背包内的装备,使其穿戴在身上. 需求分析: 右键点击背包内的装备,注意,此时的装备还是背包内的一个物品,即是工程所定义的id为2001-2010的InventoryItem而已:需求可以抽象为右键点击背包内的一个物品,如果该物品是装备类,则在角色的EquipmentUI相应的位置生成一个与之图标相同的EquipmentItem,则视为“装备”了该物品. 具体实现: ①右

Unity3d - RPG项目学习笔记(二十三)

前期建立了装备信息及装配功能,现在开始着手建立技能系统. 类似于物品信息,我们首先需要设计好技能系统文本,设计好技能的分类. 设计过程中还是需要把技能作用及释放目标的分类做好,技能文本如下: 4001,致命一击,skill-02,伤害250%,SinglTarget,Attack,250,0,6,1,Swordman,1,Enemy,1.54002,格挡精通,skill-07,防御130%,Buff,Def,130,5,3,5,Swordman,3,Self,04003,战神咆哮,skill-0

Unity3d - RPG项目学习笔记(二十一)

上期工程实现了装备的穿上功能,但是还有些不完善,我们必须进行进一步完善. 需要完善的内容主要有2个: ①如果穿带前该栏有装备,那么需要将原装备退回至背包内: ②成功穿戴装备后,需要使背包内的相应装备数量-1,如果数量为0了,那么删除该格内的物品. 脚本如下: 实现功能①,只需要在Class EquipmentUI中的Dress方法中检测格子内是否有物品的条件的代码块更新为: if(item != null) { Inventory._instance.GetId(item.id); item.S

Unity3d - RPG项目学习笔记(十一)

前期工程已经构建了背包.格子.物品三者的关系.简单概括,就是背包管理格子,格子管理(生成.消除)物品,物品根据id或icon_name变更sprite.现在开始进行模拟物品的拾取功能.对Inventory脚本进行添加: Class Inventory { public GameObject InventoryItem; void Update( ) { if(Inpt.GetKeyDown(keycode.x)) { GetId(Randam.Range(1001,1004)); } } pub

Unity3d - RPG项目学习笔记(八)

上期工程实现了任务UI的构建与交互,本日总结指针的处理. 需求:在不同物体上指针不同.具体分类有:常规.NPC.攻击.锁定.拾取五种. 首先设定前两种,思路:设置更换指标方法,在NPC类中调用方法,脚本如下: ①创建GameSetting类,构建一个单例模式应用 Class GameSetting { public static GameSetting _instance; public Texture2D normal_cursor; public Texture2D NPC_Talk_cur

Unity3d - RPG项目学习笔记(二十八)

前期工程我们终于实现了技能列表的显示,嗯,终于可以看到角色的技能啦.但是依照现在的尿性,你不做出快捷栏的话,这些技能都是只能看的.为了更好的释放技能/使用物品,现在开始制作快捷栏. 那么首先,我们必须持有一个快捷栏. 一.建立快捷栏 首先现建立一个Invisiable Wiedgt,命名为ShortCutUI,然后在内部建立6个UISprite,将图标定义为Grid,加上BoxCollider,这样我们初步的快捷栏就做好了. 二.实现技能的拖动 先明确一个概念,基于最优方案,一定是将技能的图标拖

Unity3d - RPG项目学习笔记(四)

经过上述工程,实现了角色的移动功能.但是经过测试,发生了BUG,当角色因地形或其他遮蔽无法顺利抵达TargetPosition时,角色就会一直朝面向方向走下去. 这明显是不符合要求的. 我们把角色运动过程进行分解如下: 鼠标按下 → 确定目标点 → 鼠标松开 → 角色转向 → 计算角色与目标点距离 → 角色前进 → 角色到达目标范围 → 角色停止 明显,角色到达目标范围永远返回false,因为角色的朝向在鼠标松开那一刻便已经决定了,如果沿此方向不能达到目标点,那么角色就会超过最小范围圈,一直运动

Unity3d - RPG项目学习笔记(二十二)

上期工程完成了装备的穿戴功能,本期开始创建装备的卸下功能. 需求: 右键点击装备栏上的装备图标,使其返回至背包中. 需求拆解: 鼠标移动至装备图标上,右键点击,销毁装备,在背包中生成该装备的镜像,完毕. 根据上述思路,这个功能实现起来比较简单: ①首先为EquipmentItem添加BoxCollider,使装备栏中的装备可以被点击: ②对该EquipmentItem添加脚本如下: Class EquipmentItem { private bool isHovering = false; vo