最近做了一个怪物手册的功能

首先想到的就是获取到当前地图所有的怪物,然后排除重复种类的怪物,接着把玩家攻击怪物时候受到的伤害从小到大进行排序,最后把到UI上显示

遇到的问题:

1.开始偷懒,直接从创建怪物那里获取的怪物列表,然后问题就来了,怪物死掉后图鉴还是可以看到,这是不好的体验

2.排除重复种类的怪物,用的方法比较笨。。。。

3.排序么,想了下还是用sort吧

4.UI没啥好说的,知道RectTransform的anchoredPosition这个属性就好

最后附上代码=.=

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


public class MonsterManual : MonoBehaviour
{
    private List<GameObject> monster = new List<GameObject>();//当前地图所有的怪物
    private Transform tr;
    private GameObject instanceMM; //一种怪物用一个面板来显示
    private readonly Vector2 localScale = new Vector2(1, 1); //缩放比例


    private const int baseY = 400;//UI的Y轴
    private const int shift = 115;//UI与UI之间的间隔


    private Dictionary<int, GameObject> only = new Dictionary<int, GameObject>();//用字典来存储
    private List<int> monsterID = new List<int>();//怪物的id
    public List<GameObject> laji = new List<GameObject>();//


    private void Awake()
    {
        tr = transform;
        instanceMM = Resources.Load("Prefab/MonsterManual") as GameObject;
    }
    public void OnEnable()
    {
        monster.Clear();//清空数据
        only.Clear();
        GameObject[] mo = GameObject.FindGameObjectsWithTag(Tags.enemy);
        for (int i = 0; i < mo.Length; i++)//
        {
            monster.Add(mo[i]);
        }
        for (int i = 0; i < monster.Count; i++) //先找出不重复的id
        {
            if (!monsterID.Contains(monster[i].GetComponent<ObjectID>().codeID))
                monsterID.Add(monster[i].GetComponent<ObjectID>().codeID);
        }
        for (int i = 0; i < monsterID.Count; i++) //再根据id找到对应的怪物并设置对应的属性
        {
            if (!SelectGameobject(i))
                continue;
            GameObject clone = Instantiate(instanceMM);
            clone.transform.SetParent(tr);
            clone.GetComponent<RectTransform>().localScale = localScale;


            clone.transform.GetChild(0).GetComponent<Image>().sprite = SelectGameobject(i).GetComponent<SpriteRenderer>().sprite;
            //怪物的图标
            MonsterBase mb = SelectGameobject(i).GetComponent<MonsterBase>();
            clone.transform.GetChild(1).GetComponentInChildren<Text>().text = "攻击:" + mb.attack;
            clone.transform.GetChild(2).GetComponentInChildren<Text>().text = "防御:" + mb.defence;
            clone.transform.GetChild(3).GetComponentInChildren<Text>().text = "生命:" + mb.hp;
            clone.transform.GetChild(4).GetComponentInChildren<Text>().text = "损失:" + mb.GetLossValueString();
            clone.transform.GetChild(5).GetComponentInChildren<Text>().text = "经验:" + mb.exp;
            clone.transform.GetChild(6).GetComponentInChildren<Text>().text = "奖励点数:" + mb.rewardPoints;
            clone.transform.GetChild(7).GetComponent<Text>().text = mb.monsterName;
            int loss = mb.GetLossValue();
            only.Add(loss == -1 ? 999999900 + i : loss + i, clone);//为了保证键不重复
            laji.Add(clone);
        }
        monsterID = only.Keys.ToList();
        monsterID.Sort();
        for (int i = 0; i < monsterID.Count; i++)
        {
            only[monsterID[i]].GetComponent<RectTransform>().anchoredPosition = new Vector2(0, baseY - i * shift);
        }
    }


    private GameObject SelectGameobject(int i)//根据怪物的ID来选择object
    {
        GameObject game = null;
        for (int k = 0; k < monster.Count; k++)
        {
            if (monster[k].GetComponent<ObjectID>().codeID == monsterID[i])
                game = monster[k];
        }
        return game;
    }


    void OnDisable()//关闭的时候隐藏
    {
        for (int i = 0; i < laji.Count; i++)
        {
            laji[i].SetActive(false);
        }
    }
}

从前有一个小李的屌丝,他长得不好看,家里也很穷。他常常被同学们欺负,被老师们嘲笑。他觉得自己一定是注定要过着平凡的生活,一辈子都不了什么大事情。但是,有一天,他遇到了一个神仙,这个神仙告诉他,只要他能够完成三个任务,他就能够实现自己的梦想,成为一个真正的英雄。 小李非常激动,他觉得这是他一生中最好的机会。于是,他开始了自己的冒险之旅。 第一关:打败恶龙 小李的第一个任务是打败一个邪恶的恶龙。这个恶龙是一个非常凶猛的怪物,它经常吞吃人类。小李知道这个任务非常危险,但是他决定拼尽全力,去挑战它。 小李不知道怎么打败恶龙,他开始四处打听。最后,他从一个老人那里得到了一个建议。老人告诉他,恶龙最怕的是光明之力,如果你能用光明之力攻击它,就能轻松打败它。 小李感谢老人的建议,他决定去找光明之力。在他的旅途中,他遇到了很多危险,但是他坚持不懈,一直在寻找光明之力。最后,他终于找到了,他把光明之力注入一把剑中,然后去挑战恶龙。 恶龙看到小李来了,它非常愤怒,它开始向小李扔火球。小李用剑挡住了火球,并且用光明之力攻击了恶龙。恶龙被打败了,小李获得了第一个任务的胜利。 第二关:救出公主 小李的第二个任务是救出一个被囚禁的公主。这个公主是一个非常美丽的女孩,她被一个邪恶的巫师囚禁在一个城堡里。小李知道这个任务非常危险,但是他决定不放弃,去救出公主。 小李到了城堡外面,他发现城堡非常高,而且有很多士兵在守卫。他不知道该怎么,于是他开始四处打听。最后,他从一个酒馆老板那里得到了一个建议。老板告诉他,城堡的下面有一个地下通道,可以从那里进入城堡。 小李感谢老板的建议,他决定去找地下通道。在他的旅途中,他遇到了很多危险,但是他坚持不懈,一直在寻找地下通道。最后,他终于找到了,他从地下通道进入了城堡。 小李在城堡里面遇到了很多士兵和巫师,但是他用自己的勇气和智慧,成功地避开了它们。最后,他找到了公主,他把公主救出来,并且顺利地完成了第二个任务。 第三关:打败魔王 小李的第三个任务是打败一个邪恶的魔王。这个魔王非常强大,他有很多魔法和士兵。小李知道这个任务非常危险,但是他决定不放弃,去打败魔王。 小李不知道怎么打败魔王,他开始四处打听。最后,他从一个智者那里得到了一个建议。智者告诉他,魔王最怕的是勇气和智慧,如果你能用勇气和智慧攻击它,就能轻松打败它。 小李感谢智者的建议,他决定去打败魔王。在他的旅途中,他遇到了很多危险,但是他坚持不懈,一直在寻找魔王。最后,他终于找到了,他用自己的勇气和智慧,成功地打败了魔王。 小李完成了三个任务之后,他回到了自己的家乡。他的同学们看到他变得非常强大,他们开始敬重他。他的老师们也看到了他的变化,他们开始赞扬他。小李觉得自己的生活变得非常美好,他感到非常幸福。 小李的故事告诉我们,只要我们有勇气和智慧,就能够克服任何困难,实现自己的梦想。无论我们的出生如何,只要我们不放弃,就能够逆袭成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值