5.3背包系统(1)


基类脚本

usingUnityEngine;

usingSystem.Collections;

publicclassBaseScript{

publicintindex;

publicfloatattackValue;

publicfloatHp;

publicstringname;

publicstringdescription;

publicstringiconName;

publicBaseScript(intindex,floatattackValue,floatHp,stringname,stringdescription,stringiconName){

this.index=index;

this.attackValue=attackValue;

this.Hp=Hp;

this.name=name;

this.description=description;

this.iconName=iconName;

}

}

物品子类脚本

usingUnityEngine;

usingSystem.Collections;

//武器类

publicclassWeaponScript:BaseScript{

publicWeaponScript(intindex,floatattackValue,floatHp,stringname,stringdescription,stringiconName):base(index,attackValue,Hp,name,description,iconName){

}

}

添加物品脚本(挂载在canvas)

usingUnityEngine;

usingSystem.Collections;

usingSystem.Collections.Generic;

usingUnityEngine.UI;

publicclassAddGoodScript:MonoBehaviour{

publicGameObject[]cells;//所有存放装备的单元格

publicDictionaryItems=newDictionary();

voidStart(){

//测试代码

WeaponScriptdragon_Seord=newWeaponScript(1,20,10,"屠龙刀","屠龙一出,谁与争锋","m4");

ArmorsScriptSteelShield=newArmorsScript(2,0,20,"铁盾","一个盾牌","m7");

MagicScriptFireMagic=newMagicScript(3,30,0,"火焰药水","喝了可以释放火焰的药水","m3");

ConsumeScriptadd_Hp=newConsumeScript(4,0,40,"餐风饮露","药品","m1");

Items.Add(dragon_Seord.index,dragon_Seord);

Items.Add(SteelShield.index,SteelShield);

Items.Add(FireMagic.index,FireMagic);

Items.Add(add_Hp.index,add_Hp);

}

voidUpdate(){

if(Input.GetKeyDown(KeyCode.Space)){

intindex=Random.Range(1,5);//半闭半开(左闭右开)

PickUp(Items[index]);

}

}

voidPickUp(BaseScriptbaseScript){

//获取当前拾取/购买的装备应该存放在哪个单元格

for(int i=0;i<cells.Length;++i){

if(cells[i].transform.childCount>0){

//子物体不为空

//判断当前子物体是否和将要添加的子物体相同

//获取已经在这个单元格上的子物体

GameObject  item=cells[i].transform.GetChild(0).gameObject;

if(baseScript.iconName==item.GetComponent<Image>( ).overrideSprite.name){

//将要添加的是和当前单元格相同的物体

//获取文本组件,更改数字

Text   indexText=item.transform.GetChild(0).gameObject.GetComponent<Text>( );

int  indexNumber=int.Parse(indexText.text);

++indexNumber;

indexText.text=indexNumber.ToString( );;

break;

}

}else  if(cells[i].transform.childCount==0){

//当前子物体为空

//从Resources文件夹中加载预设体

GameObject  itemPrefabs=Resources.Load("Item")as  GameObject;

//使用预设体

GameObject  item1

=Instantiate(itemPrefabs,cells[i].transform.position,cells[i].transform.rotation)asGameObject;

//获取预设体Image组件

Image  image=item1.GetComponent<Image>( );

//设置图片

print(baseScript.iconName);

image.overrideSprite=Resources.Load("Texture/"+baseScript.iconName);

image.transform.SetParent(cells[i].transform);//设置父物体

image.transform.localPosition=Vector3.zero;//放到中心点

break;

}

}

}

}

使用物品脚本(挂载在canvas)

usingUnityEngine;

usingSystem.Collections;

usingUnityEngine.UI;

usingUnityEngine.EventSystems;

publicclassusing2:MonoBehaviour,IPointerClickHandler{

private GameObject  item;

voidStart(){

}

voidUpdate(){

}

#regionIPointerClickHandlerimplementation

public void  OnPointerClick(PointerEventData  eventData)

{

if(eventData.button==PointerEventData.InputButton.Right){

//得到当前鼠标射线所检测到的游戏物体

item=eventData.pointerPressRaycast.gameObject;

if(item.name.Contains("Item")){

Text  indexText=item.transform.GetChild(0).gameObject.GetComponent<Text>( );

int indexNumber=int.Parse(indexText.text);

--indexNumber;

if(indexNumber>0){

indexText.text=indexNumber.ToString( );

}

else{

Destroy(item);

UIManager.Instance.panel.SetActive(false);//物品消失后将描述信息隐藏

}

}

}

}

#endregion

}

拖拽物品移动脚本(挂载在canvas)

usingUnityEngine;

usingSystem.Collections;

usingUnityEngine.EventSystems;

usingUnityEngine.UI;

publicclassItemDragScript:MonoBehaviour,IDragHandler,IBeginDragHandler,IEndDragHandler{

public  Transform  lastImage;

private Transform  itemTransform;//当前鼠标拖拽的物体的Transform

Transform   startTransform;//开始时的父物体Transform

Transform   endTransform;//结束时的父物体Transform

voidStart( ){

}

voidUpdate( ){

}

#regionIBeginDragHandlerimplementation

void IBeginDragHandler.OnBeginDrag(PointerEventData  eventData)

{   //2

if(eventData.button==PointerEventData.InputButton.Left){

if(eventData.pointerCurrentRaycast.gameObject.name.Contains("Item")){   //1

itemTransform=eventData.pointerCurrentRaycast.gameObject.transform;

//让当前item在被拖动的时候不再遮挡射线的检测

itemTransform.GetComponent<CanvasGroup>( ).blocksRaycasts=false;

startTransform=itemTransform.parent;

itemTransform.parent=lastImage;

itemTransform.localScale=new Vector3(0.5f,0.5f,0);//拖拽途中物品缩放

}   //1

else{

itemTransform=null;

}

} //2

else{

itemTransform=null;

}

}

#endregion

#regionIDragHandlerimplementation

void IDragHandler.OnDrag(PointerEventData  eventData)

{

if(eventData.button==PointerEventData.InputButton.Left&&itemTransform){

itemTransform.position=Input.mousePosition;

}

}

#endregion

#regionIEndDragHandlerimplementation

void  IEndDragHandler.OnEndDrag(PointerEventData  eventData)

{

if(eventData.button==PointerEventData.InputButton.Left&&itemTransform){

if(eventData.pointerCurrentRaycast.gameObject.name.Contains("cell")){

//移动位置

//更改当前正在移动的item的父物体

if(eventData.pointerCurrentRaycast.gameObject.transform.childCount>0){

itemTransform.SetParent(startTransform);

itemTransform.localPosition=Vector3.zero;

}else{

itemTransform.SetParent(eventData.pointerCurrentRaycast.gameObject.transform);

itemTransform.localPosition=Vector3.zero;

}

}elseif(eventData.pointerCurrentRaycast.gameObject.name.Contains("Item")){

//交换

Transform   otherItemTransform=eventData.pointerCurrentRaycast.gameObject.transform;

//获得将要交换物品栏中物品的数量

Text   itemText=eventData.

pointerCurrentRaycast.gameObject.transform.GetChild(0).GetComponent

<Text>( );

int number_1=int.Parse(itemText.text);

//当前拖拽物品的数量

Text   itemTransformText=itemTransform.GetChild(0).GetComponent

<Text>( );

intnumber_2=int.Parse(itemTransformText.text);

intsum=number_1+number_2;

//一个物品栏物品数量为30,小于30合并,大于30,一份30,一份sum-30

if(sum<=30){

itemTransformText.text=sum.ToString();

itemTransform.SetParent(otherItemTransform.parent);

Destroy(eventData.pointerCurrentRaycast.gameObject);

}else{

itemTransformText.text=30.ToString();

itemText.text=(sum-30).ToString();

}

//拖拽结束时,当前Item应该放置的位置

endTransform=otherItemTransform.parent;

//把当前正在拖拽的Item放到结束的位置

itemTransform.SetParent(endTransform);

itemTransform.localPosition=Vector3.zero;

//把结束拖拽时的cell上的Item放到所交换的Item的开始的cell上

otherItemTransform.SetParent(startTransform);

otherItemTransform.localPosition=Vector3.zero;

}else{

//返回原来的父物体

itemTransform.SetParent(startTransform);

itemTransform.localPosition=Vector3.zero;

}

////设置到cell的中心点

//itemTransform.localScale=Vector3.zero;

itemTransform.GetComponent<CanvasGroup>( ).blocksRaycasts=true;

itemTransform.localScale=new  Vector3(1,1,0);

}

}

#endregion

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容

  • 显示物品的描述信息 用一个单例存放信息 usingUnityEngine; usingSystem.Collect...
    胤醚貔貅阅读 354评论 0 0
  • 首先,导入NGUI插件 1、创建一个Sprite,创建一个空物体,也可以是图片,我这里创建的是空物体,2、创建一个...
    周joe阅读 470评论 0 0
  • Unity工程结构: Assets文件夹:存储工程所需的所有资源文件 Library:工程所需要的所有资源库(类库...
    斗魁阅读 1,789评论 0 3
  • 在Autolayout之前,Autoresizing可以作屏幕适配,但局限性较大有些任务根本无法完成相比之下,Au...
    RadioWaves阅读 125评论 0 0
  • 4月,伴着一天与家人、同学、亲戚的欢声笑语,平静收尾了。 4月的尾声是春的离去,夏的初始。2013年已经过去1/3...
    袁春楠阅读 927评论 0 0