美文网首页
5.3背包系统(1)

5.3背包系统(1)

作者: 胤醚貔貅 | 来源:发表于2017-05-03 18:22 被阅读41次


    基类脚本

    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

    }


    相关文章

      网友评论

          本文标题:5.3背包系统(1)

          本文链接:https://www.haomeiwen.com/subject/kvlltxtx.html