《组合变身小宠物游戏》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

相关文章推荐

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

using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Secur...

剑指XX游戏读后感(2):网易2011笔试题详解/sizeof和strlen/交换双向链表节/dll和lib和exe/8叉树减色/11盆花组合/宠物技能遗传/看virtual继承代码写输出

请区分sizeof和strlen? char array[] = "0123456789"; char* pointArray = "0123456789"; char arrayBig[100] =...

[过游戏保护]之第一讲[背包、怪物、技能地面物品、任务、队友、装备、宠物、周围玩家]

相信很多成天在网上混的朋友都有想自己做WG乃至自己卖自己做的WG的这类想法 各类网络培训班钱都交的不少 到头来才发现特么的啥也米学到... 这里是C++版块技术交流区 特别基础的东东俺就不说了 ...

雷爵代理游戏风云Unity休闲养成页游《宠物派对》

雷爵网络近日宣布与上海游戏风云文化传媒合作,取得可爱休闲养成游戏营运代理权,并正式命名为《宠物派对》,将预计于今年Q4在台湾推出,《宠物派对》是一款Unity3d开发的3D网页休闲游戏。 ...

免费《宠物消消乐》休闲游戏,火爆上线啦

免费《宠物消消乐》休闲游戏,火爆上线啦。轻松点击即可带来无限乐趣,简单的全民玩法。快来一起挑战吧! 一款非常好玩的消除类单机游戏. 一款集休闲益智消除于一体的小游戏. 一款可爱画面风格的...
  • alexah
  • alexah
  • 2016年03月23日 09:51
  • 103

进宠物商店买小动物的小游戏程序

/** *本程序用到四个类,一个Pet做为父类,一个Cat和一个Dog继承Pet类,最后一个商店类来进行测试 */ //Pet类 public Pet(String name, char se...
  • wybchy
  • wybchy
  • 2017年07月29日 21:52
  • 60

Java版电子宠物游戏代码

  • 2009年04月08日 12:34
  • 59KB
  • 下载

听韩顺平聊PHP初学者如何变身大牛(二)

当然,有些学员还给我写信说这样一个问题,如何去检验第一阶段: PHP前端网页开发基础,学习情况, 学习到怎样的水平,再学习下一个阶段比较好, 大家可以做一下下面的测试题,如果你能将下面的题都完成,...

java小游戏《饲养宠物》源代码

  • 2013年12月17日 10:52
  • 11KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《组合变身小宠物游戏》PetCombine宠物组合(修改更新中)【初学者】
举报原因:
原因补充:

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