《组合变身小宠物游戏》PetCombine宠物组合(修改更新中)【初学者】

原创 2016年08月29日 15:42:28

这个组合功能功能类似于角色扮演类游戏《妖精组合》中的组合功能,一般是用两个低等级的宠物合成更高等级的宠物。xml表中有合成的公式。

using UnityEngine;
using System.Collections;
using UnityEngine;
using System.Collections.Generic;
using UnityEngine.UI;

public class PetCombine : MonoBehaviour {
    public static PetCombine self;
    public GameObject parentObj;
    public GameObject Box1;
    public GameObject Box2;
    public GameObject Box3;
    public Text TextRemindTwoPets;
    public Text TextSorryData;
    public IEnumerator  WaitSecondShow(){//合成的宠物一秒后消失
	yield return new WaitForSeconds(1);
    if (Box3.transform.FindChild("petItem(Clone)")!=null)
        Destroy(Box3.transform.FindChild("petItem(Clone)").gameObject);
    InitPetHaveData();
        }

    public IEnumerator RemindChooseTwoPets()//选满两个宠物提示
    {

        TextRemindTwoPets.gameObject.SetActive(true);
        yield return new WaitForSeconds(1);
        TextRemindTwoPets.gameObject.SetActive(false);
    }
    public IEnumerator SorryNoData()//数据不足提示
    {
        TextSorryData.gameObject.SetActive(true);
        yield return new WaitForSeconds(1);
        TextSorryData.gameObject.SetActive(false);

    }
    public int ItemNumber
    {
        get
        {
            return Fighting.self.PlayerPetItemList.Count;
        }
    }
    private List<GameObject>gridItemobj = new List<GameObject>();
    private Hashtable recordPetData = new Hashtable();
    void Awake()
    {
        self = this;
    }
    void Start()
    {
        TextRemindTwoPets.gameObject.SetActive(false);
    }
    void OnEnable()
    {       
        InitPetHaveData();      
    }

    void Update()
    {
        if (Input.GetMouseButtonUp(0))//一旦有鼠标点击事件,判断合成
        {
            int id1 = 0, recordid1 = 0;
            int id2 = 0, recordid2 = 0;
            if ((Box1.transform.FindChild("PlayerPetChooseItem(Clone)") == null || Box2.transform.FindChild("PlayerPetChooseItem(Clone)")==null) && Box3.transform.FindChild("petItem(Clone)") != null)
                Destroy(Box3.transform.FindChild("petItem(Clone)").gameObject);
            if (Box1.transform.FindChild("PlayerPetChooseItem(Clone)") && Box2.transform.FindChild("PlayerPetChooseItem(Clone)"))//选择两个宠物才能组合
            {
                GameObject item1 = Box1.transform.FindChild("PlayerPetChooseItem(Clone)").gameObject;//获取第一个宠物数据
                id1 = item1.GetComponent<PlayerPetChooseItem>().data.id;//宠物id
                recordid1 = item1.GetComponent<PlayerPetChooseItem>().recordId;//拥有宠物索引id

                GameObject item2 = Box2.transform.FindChild("PlayerPetChooseItem(Clone)").gameObject;//获取第二个宠物数据
                id2 = item2.GetComponent<PlayerPetChooseItem>().data.id;//宠物id
                recordid2 = item2.GetComponent<PlayerPetChooseItem>().recordId;//拥有宠物的索引id
                PetCombineXmlData data = ConfigManager.Instance.GetPetCombineDicData(id1, id2);//确定符合id1和id2的一条数据
                if (data == null)//数据缺少,无法合成
                {
                    //Debug.Log("XML数据缺少,待增加");
                    //StartCoroutine(SorryNoData());
                    if (Box3.transform.FindChild("petItem(Clone)") != null) { Destroy(Box3.transform.FindChild("petItem(Clone)").gameObject); }
                }
                else
                {
                    int CombineId = 0;
                    CombineId = data.CombineId;//该条数据的combineId
                    GameObject gridItem = Resources.Load("Prefabs/item/petItem", typeof(GameObject)) as GameObject;//组合变化出第三个宠物数据

                    if (Box3.transform.FindChild("petItem(Clone)") != null)
                        Debug.Log("原有组合id" + Box3.transform.FindChild("petItem(Clone)").gameObject.GetComponent<PlayerPetChooseItem>().data.id);

                    Debug.Log("新组合id" + CombineId);

                    if (Box3.transform.FindChild("petItem(Clone)") != null && Box3.transform.FindChild("petItem(Clone)").gameObject.GetComponent<PlayerPetChooseItem>().data.id != CombineId)//box3已有宠物,但和现合成的不同》删除原来的并重新加载
                    {//为什么调换宠物没有运行这个判断????
                        Destroy(Box3.transform.FindChild("petItem(Clone)").gameObject);
                        GameObject obj = GameObject.Instantiate(gridItem) as GameObject;
                        obj.GetComponent<petItem>().UpdatepetItemData(CombineId);
                        obj.transform.parent = Box3.transform;
                        obj.transform.localPosition = Vector3.zero;
                        obj.transform.localScale = Vector3.one;
                    }
                    if (Box3.transform.FindChild("petItem(Clone)") == null)//box3为空,显示合成宠物
                    {
                        GameObject obj = GameObject.Instantiate(gridItem) as GameObject;
                        obj.GetComponent<petItem>().UpdatepetItemData(CombineId);
                        obj.transform.parent = Box3.transform;
                        obj.transform.localPosition = Vector3.zero;
                        obj.transform.localScale = Vector3.one;
                    }
                    if (Box3.transform.FindChild("petItem(Clone)").gameObject.GetComponent<PlayerPetChooseItem>().data.id == CombineId)//box3已有原宠物,且和现在合成宠物相同》不再加载
                    {

                    }


                }

            }
        }
       
    }
    public void InitPetHaveData()
    {
        recordPetData = DataRecord.GetPetList();
        foreach(GameObject obj in gridItemobj)
        {
            Destroy(obj);
        }
        gridItemobj.Clear();
        GameObject BoxgridItem = Resources.Load("Prefabs/item/BoxGrid", typeof(GameObject)) as GameObject;
        GameObject PetgridItem = Resources.Load("Prefabs/item/PlayerPetChooseItem", typeof(GameObject)) as GameObject; 
        foreach (DictionaryEntry itemx in recordPetData)//加载已拥有宠物
        {
           //GameObject BoxgridItem = Resources.Load("Prefabs/item/BoxGrid", typeof(GameObject)) as GameObject;
            if (itemx.Value == null)
                continue;
            //加载格子
            Hashtable data = itemx.Value as Hashtable;//类型转换
            GameObject gridobj = GameObject.Instantiate(BoxgridItem) as GameObject;
            gridobj.name = "BoxGrid" + (gridItemobj.Count + 1).ToString();//添加的预制体的名字,如“BoxGrid1”
            gridobj.transform.parent = parentObj.transform;
            gridobj.transform.localPosition = Vector3.zero;
            gridobj.transform.localScale = Vector3.one;

            gridItemobj.Add(gridobj);
            //加载数据
            GameObject petobj = GameObject.Instantiate(PetgridItem) as GameObject; ;//寻找如“BoxGrid1”父物体
            petobj.GetComponent<PlayerPetChooseItem>().UpdatePlayerPetChooseItemData(int.Parse(itemx.Key.ToString()), DataRecord.TranslateData(data));
            petobj.transform.parent = gridobj.transform;
            petobj.transform.localPosition = Vector3.zero;
            petobj.transform.localScale = Vector3.one;
        }
    }



    public void OnClickBtnBack()
    {
        UIManager.instance.HidePanel(UIPanelNames.PetCombinePanel);
        RoleControl.self.IsCanMove = false;
        RoleControl.self.IsInFight = false;//###
        if (Box1.transform.FindChild("PlayerPetChooseItem(Clone)")!=null)
            { Destroy( Box1.transform.FindChild("PlayerPetChooseItem(Clone)").gameObject); }

        if (Box2.transform.FindChild("PlayerPetChooseItem(Clone)")!=null)
            { Destroy( Box2.transform.FindChild("PlayerPetChooseItem(Clone)").gameObject); }

    }

   
    public void OnClickCombine()
    {
        int id1 = 0, recordid1=0;
        int id2 = 0, recordid2=0;
        if (Box1.transform.FindChild("PlayerPetChooseItem(Clone)") && Box2.transform.FindChild("PlayerPetChooseItem(Clone)"))//选择两个宠物才能组合
        {
            GameObject item1 = Box1.transform.FindChild("PlayerPetChooseItem(Clone)").gameObject;//获取第一个宠物数据
             id1 = item1.GetComponent<PlayerPetChooseItem>().data.id;//宠物id
             recordid1 = item1.GetComponent<PlayerPetChooseItem>().recordId;//拥有宠物索引id
  
            GameObject item2 = Box2.transform.FindChild("PlayerPetChooseItem(Clone)").gameObject;//获取第二个宠物数据
             id2 = item2.GetComponent<PlayerPetChooseItem>().data.id;//宠物id
             recordid2 = item2.GetComponent<PlayerPetChooseItem>().recordId;//拥有宠物的索引id
        }
        else
        {
         Debug.Log("error");
         StartCoroutine(RemindChooseTwoPets());
            return;
        }
        
        //根据xml表获取到第三个CombinId
        PetCombineXmlData data = ConfigManager.Instance.GetPetCombineDicData(id1, id2);//确定符合id1和id2的一条数据
        if (data == null)//数据缺少,无法合成
        {
            Debug.Log("XML数据缺少,待增加");
            StartCoroutine(SorryNoData());
        }
        else//可以合成
        {
            int CombineId = 0;
            CombineId = data.CombineId;//该条数据的combineId
            if (Box1.transform.FindChild("PlayerPetChooseItem(Clone)")) Destroy(Box1.transform.FindChild("PlayerPetChooseItem(Clone)").gameObject);//销毁原来item1
            if (Box2.transform.FindChild("PlayerPetChooseItem(Clone)")) Destroy(Box2.transform.FindChild("PlayerPetChooseItem(Clone)").gameObject);
            StartCoroutine(WaitSecondShow());//一秒后删除合成的宠物

            DataRecord.DelPet(recordid1);//数据更新
            DataRecord.DelPet(recordid2);
            DataRecord.AddPet(ConfigManager.Instance.GetPetData(CombineId));
        }

    }
}
运行动态图:



版权声明:本文为博主“爱吃木鱼的猫”原创文章,转载请注明出处 http://blog.csdn.net/u012761191

PET重建技术 MLEM迭代法(C++)(一) 原理及成像

PET重建 MLEM迭代原理 讲解 以及C++成像代码 如有错误请在留言中指正 如有学习需要, 不懂得可以再留言...
  • qq_27664383
  • qq_27664383
  • 2015年11月09日 18:39
  • 1658

游戏修改器制作流程

以休闲游戏“植物大战僵尸”为例,制作无限阳光修改器。 制作游戏修改器,应该有很多人对这类内容感兴趣吧。 发现这个游戏纯属巧合,一日我在百度搜索“植物”这个词时,搜索框下方就列出一大堆“植物大战僵尸...
  • hpp24
  • hpp24
  • 2016年08月30日 16:39
  • 785

全能安卓手机修改器,能使你的手机变成无数款不同的手机

无限多真机数据一键生成,修改了所有能够修改的多达80多项参数,包括机型,安卓版本,定位,联网方式,WIFI信息,MAC地址,IMEI,串号,驱动ID,手机硬件码,安卓ID等等所有信息,是修改最全的手机...
  • neil201501
  • neil201501
  • 2016年06月30日 16:38
  • 18760

dump烧饼修改器的实现代码

刚和网友聊天,分享了下自己怎么得到的烧饼修改器的实现代码。这里发个文章分享下这个小技巧,linux系统提供了一个/proc文件系统,相应的每个linux进程都有一个/proc/[pid]目录,该目录下...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2014年06月17日 11:17
  • 4987

SPECT、PET、CT与MRI成像原理及其特点的比较

SPECT、PET、CT与MRI成像原理及其特点的比较 - 橘子香水的日志 - 网易博客 收藏人:asia1233321     ...
  • JJRFJYFJYFJDFJRUJDJD
  • JJRFJYFJYFJDFJRUJDJD
  • 2014年10月18日 02:01
  • 3393

Mongodb修改器

Mongodb修改器
  • nohaoye
  • nohaoye
  • 2016年07月29日 13:53
  • 3385

## 红色警戒共和国之辉金钱修改器 1

红色警戒共和国之辉金钱修改器 1作者:qq5w修改器也就是外挂,感觉好像很神秘的样子,其实也是蛮简单的,因为我们大部分的端游都是基于电脑上面运行的。所以数据我们都能自己找到,并且完成修改,老一辈的玩家...
  • wang735164515
  • wang735164515
  • 2016年10月24日 17:39
  • 406

星际争霸2免修改器修改绝对一劳永逸

废话不多说,现在先看看怎么修改游戏吧! 首先进入游戏的根目录,找到TriggerLibs文件夹 这就是我们要下手的菜,动手之前建议先备份一下。 进入文件夹可以看到一堆galaxy格式的文件,这些就...
  • xmh19936688
  • xmh19936688
  • 2016年06月12日 11:18
  • 4010

《java解惑》读书笔记6——类谜题

1.方法重载: 问题: 下面的程序演示方法重载,代码如下: public class Test{ public static void main(String[] args) { ...
  • chjttony
  • chjttony
  • 2014年02月19日 13:56
  • 2178

Laravel修改器取出原始值

Laravel的ORM有个强大的功能,可以在数据库查询或者插入的时候进行干涉。 分两种情况:1、修改器:修改器顾名思义就是从数据库取出来的时候修改某个字段的实际值,例如我们存在数据库一般都用代号来存...
  • zhezhebie
  • zhezhebie
  • 2017年10月25日 12:03
  • 196
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《组合变身小宠物游戏》PetCombine宠物组合(修改更新中)【初学者】
举报原因:
原因补充:

(最多只允许输入30个字)