Unity手游制作记-制作通用对象管理器(二)

来源:互联网 发布:李小冉 知乎 编辑:程序博客网 时间:2024/05/09 07:03

物品

接着上次的, 我们先将物品的写出来,接着写Npc。

using UnityEngine;using UnityEngine.UI;using System.Collections;public class Item : MonoBehaviour {    //普通属性    [SerializeField, HeaderAttribute("---基础属性------"), Space(15)]    public int id = 1;    public float price = 0;//价钱    public int maxNumber = 9999;    public string itemName = "未定义";//物品名    public int number = 1;//数量    [SerializeField, MultilineAttribute(5)]    public string conText = "设计师很懒\n根本没给我介绍好嘛!";//介绍    void Start() {        TextMesh t = this.GetComponentInChildren<TextMesh>();        if (t) {            t.text = this.itemName + "(" + this.number + ")";        }    }    /******************************     *对外开放的接口     *     *     ******************************/    public virtual string getType() {        return "未定义";    }    //获得事件    public virtual bool getEvent(Npc npc) {        return true;    }    //丢弃事件    public virtual bool dropEvent(Npc npc) {        npc.delItem(this);        return true;    }    //穿戴事件    public virtual bool dressEvent(Npc npc) {        return false;    }    //脱下事件    public virtual bool vailEvent(Npc npc) {        return false;    }    //使用事件    public virtual bool useEvent(Npc npc) {        return false;    }    // 保存    public virtual void save(string str) {        PlayerPrefs.SetInt(str + "_id", id);        PlayerPrefs.SetInt(str + "_number", number);    }    // 读取    public virtual void load(string str) {        if (PlayerPrefs.GetInt(str + "_id") != 0) {            id = PlayerPrefs.GetInt(str + "_id");            number = PlayerPrefs.GetInt(str + "_number");        }    }    public virtual string toString() {        return itemName + "\n------\n" + this.conText + "\n------\n";    }}

物品还分为药品(即消耗品),装备,任务,其他(主要是礼包,即使用后获得一些物品),并对这些进行简单的封装即可。

药品
using UnityEngine;using System.Collections;public class 药品 : Item {    [SerializeField, HeaderAttribute("-----基础属性------"), Space(15), TooltipAttribute("id[唯一性]")]    public float hp = 0f;//生命    public float maxHp = 0f;//最大生命    public float mp = 0f;//法力    public float maxMp = 0f;//最大法力    public float money = 0f;// 金钱    public float exp = 0f;// 经验    public float diamond = 0f; // 钻石    public float pAttLow = 0f;//物理攻击下限    public float pAttHigh = 0f;//物理攻击上限    public float mAttLow = 0f;//法术攻击下限    public float mAttHigh = 0f;//法术攻击上限    public float pDefPower = 0f;//物理防御    public float mDefPower = 0f;//法术防御    [SerializeField, Range(0, 100)]    public float fightSpeedAmp = 0f;//攻击速度加成    //特殊属性    [SerializeField, HeaderAttribute("------特殊属性------"), Space(15), Range(0, 100)]    public float pVioHurtOdds = 0f;//物理暴击概率    public float pVioHurtAmp = 0f;//物理暴击伤害增幅    public float pVioHurtAdd = 0f;//物理暴击伤害附加    [SerializeField, Range(0, 100)]    public float pVioHurtMissDefOdds = 0f;//物理暴击时无视防御力概率    public float pVioHurtMissDefAmp = 0f;//物理暴击时无视防御力增幅    public float pVioHurtMissDefAdd = 0f;//物理暴击时无视防御力附加    [SerializeField, Range(0, 100)]    public float doeOdds = 0f;//闪避几率    public float recoverHpPerSecond = 0f;//每秒回复生命    public float recoverMpPerSecond = 0f;//每秒回复法力    public float recoverHpPerHit = 0f;//击中回复生命    public float recoverMpPerHit = 0f;//击中回复法力    public float extraItemOdds = 0f;//物品掉落加成    public float extraExpOdds = 0f;//经验掉落加成    public float extraMoneyOdds = 0f;//金钱掉落加成    [SerializeField, Range(0, 100)]    public float autoHeal = 0;//附加回血百分比    [SerializeField, Range(0, 100)]    public float autoMuse = 0;//附加回蓝百分比    public override string getType() {        return "药品";    }    //穿戴事件    public override bool useEvent(Npc npc) {        npc.addHp(hp);        npc.addMp(mp);        npc.addExp(exp);        npc.addMoney(money);        npc.Diamond += diamond;        npc.MaxHp += maxHp;        npc.MaxMp += maxMp;        npc.PAttLow += pAttLow;        npc.PAttHigh += pAttHigh;        npc.MAttLow += mAttLow;        npc.MAttHigh += mAttHigh;        npc.PDefPower += pDefPower;        npc.MDefPower += mDefPower;        npc.FightSpeedAmp += fightSpeedAmp;        npc.PVioHurtOdds += pVioHurtOdds;        npc.PVioHurtAmp += pVioHurtAmp;        npc.PVioHurtAdd += pVioHurtAdd;        npc.PVioHurtMissDefOdds += pVioHurtMissDefOdds;        npc.PVioHurtMissDefAmp += pVioHurtMissDefAmp;        npc.PVioHurtMissDefAdd += pVioHurtMissDefAdd;        npc.DoeOdds += doeOdds;        npc.RecoverHpPerSecond += recoverHpPerSecond;        npc.RecoverMpPerSecond += recoverMpPerSecond;        npc.RecoverHpPerHit += recoverHpPerHit;        npc.RecoverMpPerHit += recoverMpPerHit;        npc.ExtraItemOdds += extraItemOdds;        npc.ExtraExpOdds += extraExpOdds;        npc.ExtraMoneyOdds += extraMoneyOdds;        npc.AutoHeal += autoHeal;        npc.AutoMuse += autoMuse;        npc.delItem(this);        return true;    }    public override string toString() {        Color color = Color.black;        string str;        str = this.itemName + "\n------\n";        if (hp != 0)            str += "恢复生命 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + hp + "</color>" + "\n";        if (maxHp != 0)            str += "增加最大生命 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + maxHp + "</color>" + "\n";        if (mp != 0)            str += "恢复法力 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + mp + "</color>" + "\n";        if (maxMp != 0)            str += "增加最大法力 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + maxMp + "</color>" + "\n";        if (exp != 0)            str += "增加经验 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + exp + "</color>" + "\n";        if (money != 0)            str += "增加金钱 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + money + "</color>" + "\n";        if (diamond != 0)            str += "增加钻石 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + diamond + "</color>" + "\n";        //物理攻击        if (pAttLow != 0)            str += " 物理伤害 :" + "<color=#FF6400FF>" + pAttLow + "</color>" + "/" + pAttHigh + "\n";        if (mAttLow != 0)            //法术攻击            str += " 法术伤害 :" + "<color=#3D00FFFF>" + mAttLow + "</color>" + "/" + mAttHigh + "\n";        if (pDefPower != 0)            //物理防御            str += " 物理防御 :" + "<color=#FF6400FF>" + pDefPower + "</color>\n";        if (mDefPower != 0)            //法术防御            str += " 法术防御 :" + "<color=#3D00FFFF>" + mDefPower + "</color>\n";        //攻击速度        color = Color.yellow;        //闪避概率        if (doeOdds != 0)            str += " 闪避几率 :" + "<color=#00DB89FF>" + doeOdds + "</color>\n";        //物理暴击概率        if (pVioHurtOdds != 0)            str += " 物暴几率 :" + "<color=#FF6400FF>" + pVioHurtOdds + "</color>\n";        //物理暴击加成        if (pVioHurtAmp != 0)            str += " 物暴伤害加成 :" + "<color=#FF6400FF>" + pVioHurtAmp + "</color>\n";        //物理暴击附加        if (pVioHurtAdd != 0)            str += " 物暴伤害附加 :" + "<color=#FF6400FF>" + pVioHurtAdd + "</color>\n";        //物理暴击时无视防御力几率        if (pVioHurtMissDefOdds != 0)            str += " 物暴无视防御几率 :" + "<color=#FF6400FF>" + pVioHurtMissDefOdds + "</color>\n";        //物理暴击时无视防御力比例        if (pVioHurtMissDefAmp != 0)            str += " 物暴无视防御比例 :" + "<color=#FF6400FF>" + pVioHurtMissDefAmp + "</color>\n";        //物理暴击时无视防御力附加        if (pVioHurtMissDefAdd != 0)            str += " 物暴无视防御附加 :" + "<color=#FF6400FF>" + pVioHurtMissDefAdd + "</color>\n";        //每秒回复HP        if (recoverHpPerSecond != 0)            str += " 每秒回复HP :" + "<color=#00FF00FF>" + recoverHpPerSecond + "</color>+" + "<color=#FF0000FF>" + autoHeal + "%</color>\n";        //击中回复HP        if (recoverHpPerHit != 0)            str += " 每秒回复HP :" + "<color=#00FF00FF>" + recoverHpPerHit + "</color>\n";        //每秒回复MP        if (recoverMpPerSecond != 0)            str += " 每秒回复MP :" + "<color=#3D00FFFF>" + recoverMpPerSecond + "</color>+" + "<color=#FF0000FF>" + autoMuse + "%</color>\n";        //击中回复MP        if (recoverMpPerHit != 0)            str += " 每秒回复MP :" + "<color=#3D00FFFF>" + recoverMpPerHit + "</color>\n";        return str;    }}
装备
using UnityEngine;using System.Collections;public class 装备 : Item {    [SerializeField, HeaderAttribute("0:耳环 1:护身符 2:护臂 3:护臂 4:鞋子 5:武器 7:项链 8:手套 9:裤子")]    public int type = 0;    [SerializeField, HeaderAttribute("-----基础属性------"), Space(15), TooltipAttribute("id[唯一性]")]    public float maxHp = 0f;//最大生命    public float maxMp = 0f;//最大法力    public float pAttLow = 0f;//物理攻击下限    public float pAttHigh = 0f;//物理攻击上限    public float mAttLow = 0f;//法术攻击下限    public float mAttHigh = 0f;//法术攻击上限    public float pDefPower = 0f;//物理防御    public float mDefPower = 0f;//法术防御    [SerializeField, Range(0, 100)]    public float fightSpeedAmp = 0f;//攻击速度加成    //特殊属性    [SerializeField, HeaderAttribute("------特殊属性------"), Space(15), Range(0, 100)]    public float pVioHurtOdds = 0f;//物理暴击概率    public float pVioHurtAmp = 0f;//物理暴击伤害增幅    public float pVioHurtAdd = 0f;//物理暴击伤害附加    [SerializeField, Range(0, 100)]    public float pVioHurtMissDefOdds = 0f;//物理暴击时无视防御力概率    public float pVioHurtMissDefAmp = 0f;//物理暴击时无视防御力增幅    public float pVioHurtMissDefAdd = 0f;//物理暴击时无视防御力附加    [SerializeField, Range(0, 100)]    public float doeOdds = 0f;//闪避几率    public float recoverHpPerSecond = 0f;//每秒回复生命    public float recoverMpPerSecond = 0f;//每秒回复法力    public float recoverHpPerHit = 0f;//击中回复生命    public float recoverMpPerHit = 0f;//击中回复法力    public float extraItemOdds = 0f;//物品掉落加成    public float extraExpOdds = 0f;//经验掉落加成    public float extraMoneyOdds = 0f;//金钱掉落加成    [SerializeField, Range(0, 100)]    public float autoHeal = 0;//附加回血百分比    [SerializeField, Range(0, 100)]    public float autoMuse = 0;//附加回蓝百分比    //获得事件    public override bool getEvent(Npc npc) {        base.getEvent(npc);        this.maxNumber = 1;        return true;    }    public override string getType() {        return "装备";    }    //穿戴事件    public override bool dressEvent(Npc npc) {        if (npc.equipList[type] != null) {            npc.equipList[type].vailEvent(npc);        }        npc.equipList[type] = this;        npc.delItem(this);        npc.MaxHp += maxHp;        npc.MaxMp += maxMp;        npc.PAttLow += pAttLow;        npc.PAttHigh += pAttHigh;        npc.MAttLow += mAttLow;        npc.MAttHigh += mAttHigh;        npc.PDefPower += pDefPower;        npc.MDefPower += mDefPower;        npc.FightSpeedAmp += fightSpeedAmp;        npc.PVioHurtOdds += pVioHurtOdds;        npc.PVioHurtAmp += pVioHurtAmp;        npc.PVioHurtAdd += pVioHurtAdd;        npc.PVioHurtMissDefOdds += pVioHurtMissDefOdds;        npc.PVioHurtMissDefAmp += pVioHurtMissDefAmp;        npc.PVioHurtMissDefAdd += pVioHurtMissDefAdd;        npc.DoeOdds += doeOdds;        npc.RecoverHpPerSecond += recoverHpPerSecond;        npc.RecoverMpPerSecond += recoverMpPerSecond;        npc.RecoverHpPerHit += recoverHpPerHit;        npc.RecoverMpPerHit += recoverMpPerHit;        npc.ExtraItemOdds += extraItemOdds;        npc.ExtraExpOdds += extraExpOdds;        npc.ExtraMoneyOdds += extraMoneyOdds;        npc.AutoHeal += autoHeal;        npc.AutoMuse += autoMuse;        return true;    }    //脱下事件    public override bool vailEvent(Npc npc) {        npc.equipList[type] = null;        npc.MaxHp -= maxHp;        npc.MaxMp -= maxMp;        npc.PAttLow -= pAttLow;        npc.PAttHigh -= pAttHigh;        npc.MAttLow -= mAttLow;        npc.MAttHigh -= mAttHigh;        npc.PDefPower -= pDefPower;        npc.MDefPower -= mDefPower;        npc.FightSpeedAmp -= fightSpeedAmp;        npc.PVioHurtOdds -= pVioHurtOdds;        npc.PVioHurtAmp -= pVioHurtAmp;        npc.PVioHurtAdd -= pVioHurtAdd;        npc.PVioHurtMissDefOdds -= pVioHurtMissDefOdds;        npc.PVioHurtMissDefAmp -= pVioHurtMissDefAmp;        npc.PVioHurtMissDefAdd -= pVioHurtMissDefAdd;        npc.DoeOdds -= doeOdds;        npc.RecoverHpPerSecond -= recoverHpPerSecond;        npc.RecoverMpPerSecond -= recoverMpPerSecond;        npc.RecoverHpPerHit -= recoverHpPerHit;        npc.RecoverMpPerHit -= recoverMpPerHit;        npc.ExtraItemOdds -= extraItemOdds;        npc.ExtraExpOdds -= extraExpOdds;        npc.ExtraMoneyOdds -= extraMoneyOdds;        npc.AutoHeal -= autoHeal;        npc.AutoMuse -= autoMuse;        return true;    }    public override void save(string str) {        base.save(str);        PlayerPrefs.SetFloat(str + "_maxHp", maxHp);        PlayerPrefs.SetFloat(str + "_maxMp", maxMp);        PlayerPrefs.SetFloat(str + "_pAttLow", pAttLow);        PlayerPrefs.SetFloat(str + "_pAttHigh", pAttHigh);        PlayerPrefs.SetFloat(str + "_mAttLow", mAttLow);        PlayerPrefs.SetFloat(str + "_mAttHigh", mAttHigh);        PlayerPrefs.SetFloat(str + "_pDefPower", pDefPower);        PlayerPrefs.SetFloat(str + "_mDefPower", mDefPower);        PlayerPrefs.SetFloat(str + "_fightSpeedAmp", fightSpeedAmp);        PlayerPrefs.SetFloat(str + "_pVioHurtOdds", pVioHurtOdds);        PlayerPrefs.SetFloat(str + "_pVioHurtAmp", pVioHurtAmp);        PlayerPrefs.SetFloat(str + "_pVioHurtAdd", pVioHurtAdd);        PlayerPrefs.SetFloat(str + "_pVioHurtMissDefOdds", pVioHurtMissDefOdds);        PlayerPrefs.SetFloat(str + "_pVioHurtMissDefAmp", pVioHurtMissDefAmp);        PlayerPrefs.SetFloat(str + "_pVioHurtMissDefAdd", pVioHurtMissDefAdd);        PlayerPrefs.SetFloat(str + "_doeOdds", doeOdds);        PlayerPrefs.SetFloat(str + "_recoverHpPerSecond", recoverHpPerSecond);        PlayerPrefs.SetFloat(str + "_recoverMpPerSecond", recoverMpPerSecond);        PlayerPrefs.SetFloat(str + "_recoverHpPerHit", recoverHpPerHit);        PlayerPrefs.SetFloat(str + "_recoverMpPerHit", recoverMpPerHit);        PlayerPrefs.SetFloat(str + "_extraItemOdds", extraItemOdds);        PlayerPrefs.SetFloat(str + "_extraExpOdds", extraExpOdds);        PlayerPrefs.SetFloat(str + "_extraMoneyOdds", extraMoneyOdds);        PlayerPrefs.SetFloat(str + "_autoHeal", autoHeal);        PlayerPrefs.SetFloat(str + "_autoMuse", autoMuse);        PlayerPrefs.SetString(str + "_conText", conText);    }    public override void load(string str) {        base.load(str);        if (PlayerPrefs.GetInt(str + "_id") == 0) {            save(str);        } else {            maxHp = PlayerPrefs.GetFloat(str + "_maxHp");            maxMp = PlayerPrefs.GetFloat(str + "_maxMp");            pAttLow = PlayerPrefs.GetFloat(str + "_pAttLow");            pAttHigh = PlayerPrefs.GetFloat(str + "_pAttHigh");            mAttLow = PlayerPrefs.GetFloat(str + "_mAttLow");            mAttHigh = PlayerPrefs.GetFloat(str + "_mAttHigh");            pDefPower = PlayerPrefs.GetFloat(str + "_pDefPower");            mDefPower = PlayerPrefs.GetFloat(str + "_mDefPower");            pVioHurtOdds = PlayerPrefs.GetFloat(str + "_pVioHurtOdds");            pVioHurtAmp = PlayerPrefs.GetFloat(str + "_pVioHurtAmp");            pVioHurtAdd = PlayerPrefs.GetFloat(str + "_pVioHurtAdd");            pVioHurtMissDefOdds = PlayerPrefs.GetFloat(str + "_pVioHurtMissDefOdds");            pVioHurtMissDefAmp = PlayerPrefs.GetFloat(str + "_pVioHurtMissDefAmp");            pVioHurtMissDefAdd = PlayerPrefs.GetFloat(str + "_pVioHurtMissDefAdd");            doeOdds = PlayerPrefs.GetFloat(str + "_doeOdds");            recoverHpPerSecond = PlayerPrefs.GetFloat(str + "_recoverHpPerSecond");            recoverMpPerSecond = PlayerPrefs.GetFloat(str + "_recoverMpPerSecond");            recoverHpPerHit = PlayerPrefs.GetFloat(str + "_recoverHpPerHit");            recoverMpPerHit = PlayerPrefs.GetFloat(str + "_recoverMpPerHit");            extraItemOdds = PlayerPrefs.GetFloat(str + "_extraItemOdds");            extraExpOdds = PlayerPrefs.GetFloat(str + "_extraExpOdds");            extraMoneyOdds = PlayerPrefs.GetFloat(str + "_extraMoneyOdds");            autoHeal = PlayerPrefs.GetFloat(str + "_autoHeal");            autoMuse = PlayerPrefs.GetFloat(str + "_autoMuse");            conText = PlayerPrefs.GetString(str + "_conText");        }    }    public override string toString() {        Color color = Color.black;        string str;        str = this.itemName + "\n------\n";        if (maxHp != 0)            str += "增加最大生命 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + maxHp + "</color>" + "\n";        if (maxMp != 0)            str += "增加最大法力 :" + "<color=" + ColorToHex.colorToHex(color) + ">" + maxMp + "</color>" + "\n";        //物理攻击        if (pAttLow != 0)            str += " 物理伤害 :" + "<color=#FF6400FF>" + pAttLow + "</color>" + "/" + pAttHigh + "\n";        if (mAttLow != 0)            //法术攻击            str += " 法术伤害 :" + "<color=#3D00FFFF>" + mAttLow + "</color>" + "/" + mAttHigh + "\n";        if (pDefPower != 0)            //物理防御            str += " 物理防御 :" + "<color=#FF6400FF>" + pDefPower + "</color>\n";        if (mDefPower != 0)            //法术防御            str += " 法术防御 :" + "<color=#3D00FFFF>" + mDefPower + "</color>\n";        //攻击速度        color = Color.yellow;        //闪避概率        if (doeOdds != 0)            str += " 闪避几率 :" + "<color=#00DB89FF>" + doeOdds + "</color>\n";        //物理暴击概率        if (pVioHurtOdds != 0)            str += " 物暴几率 :" + "<color=#FF6400FF>" + pVioHurtOdds + "</color>\n";        //物理暴击加成        if (pVioHurtAmp != 0)            str += " 物暴伤害加成 :" + "<color=#FF6400FF>" + pVioHurtAmp + "</color>\n";        //物理暴击附加        if (pVioHurtAdd != 0)            str += " 物暴伤害附加 :" + "<color=#FF6400FF>" + pVioHurtAdd + "</color>\n";        //物理暴击时无视防御力几率        if (pVioHurtMissDefOdds != 0)            str += " 物暴无视防御几率 :" + "<color=#FF6400FF>" + pVioHurtMissDefOdds + "</color>\n";        //物理暴击时无视防御力比例        if (pVioHurtMissDefAmp != 0)            str += " 物暴无视防御比例 :" + "<color=#FF6400FF>" + pVioHurtMissDefAmp + "</color>\n";        //物理暴击时无视防御力附加        if (pVioHurtMissDefAdd != 0)            str += " 物暴无视防御附加 :" + "<color=#FF6400FF>" + pVioHurtMissDefAdd + "</color>\n";        //每秒回复HP        if (recoverHpPerSecond != 0)            str += " 每秒回复HP :" + "<color=#00FF00FF>" + recoverHpPerSecond + "</color>+" + "<color=#FF0000FF>" + autoHeal + "%</color>\n";        //击中回复HP        if (recoverHpPerHit != 0)            str += " 每秒回复HP :" + "<color=#00FF00FF>" + recoverHpPerHit + "</color>\n";        //每秒回复MP        if (recoverMpPerSecond != 0)            str += " 每秒回复MP :" + "<color=#3D00FFFF>" + recoverMpPerSecond + "</color>+" + "<color=#FF0000FF>" + autoMuse + "%</color>\n";        //击中回复MP        if (recoverMpPerHit != 0)            str += " 每秒回复MP :" + "<color=#3D00FFFF>" + recoverMpPerHit + "</color>\n";        return str;    }}
任务
using UnityEngine;using System.Collections;public class 任务道具 : Item {    [SerializeField, MultilineAttribute(5)]    public string qText = "这个任务很简单\n就是没有任务!";//介绍    public override string getType() {        return "任务道具";    }    //使用事件    public override bool useEvent(Npc npc) {        TextControl.getIns().setError(qText);        return true;    }}
其他
using UnityEngine;using System.Collections;public class 其他 : Item {    [SerializeField]    int[] ItemId;    [SerializeField]    int[] ItemNumber;    public override string getType() {        return "其他";    }    //使用事件    public override bool useEvent(Npc npc) {        Game game = Game.getInstantiate();        int i = 0;        foreach(int id in ItemId) {                npc.addItem(game.demoItem[id], ItemNumber[i++]);        }        npc.delItem(this);        return true;    }    public override string toString() {        string str = base.toString();        Game game = Game.getInstantiate();        for (int i = 0; i < ItemId.Length; i++) {            str += game.demoItem[ItemId[i]].itemName + "+" + ItemNumber[i] + "\n";        }        return str;    }}

Npc

只需要简单的进行扩展即可。

using UnityEngine;using System.Collections;using System.Collections.Generic;public class Npc : GameNpc {    public Item[] equipList;    protected Dictionary<int, Item> itemList;    protected void Awake() {        base.Awake();        type = Active.TYPE_NPC;    }    protected void Start() {        base.Start();        itemList = new Dictionary<int, Item>();        equipList = new Item[10];    }    // 得到物品    public bool addItem(Item item) {        Game game = Game.getInstantiate();        game.addNotice(item.itemName + "+" + item.number);        item.getEvent(this);        if (itemList.ContainsKey(item.id)) {            if (itemList[item.id].number + item.number >= itemList[item.id].maxNumber) {                itemList[item.id].number = itemList[item.id].maxNumber;            } else {                itemList[item.id].number += item.number;            }        } else {            itemList.Add(item.id, Instantiate(item));        }        return true;    }    // 得到物品    public bool addItem(Item item, int num) {        item.getEvent(this);        Game game = Game.getInstantiate();        game.addNotice(item.itemName + "+" + num);        if (itemList.ContainsKey(item.id)) {            if (itemList[item.id].number + num >= itemList[item.id].maxNumber) {                itemList[item.id].number = itemList[item.id].maxNumber;            } else {                itemList[item.id].number += num;            }        } else {            itemList.Add(item.id, Instantiate(item));            num -= item.number;            if (itemList[item.id].number + num >= itemList[item.id].maxNumber) {                itemList[item.id].number = itemList[item.id].maxNumber;            } else {                itemList[item.id].number += num;            }        }        return true;    }    // 失去物品    public bool delItem(Item item) {        if (itemList.ContainsKey(item.id)) {            itemList[item.id].number -= 1;            if (itemList[item.id].number <= 0) {                itemList.Remove(item.id);            }        }        return true;    }    public List<Item> getItems() {        return new List<Item>(itemList.Values);    }    public Item getItem(int itemId) {        if (itemList.ContainsKey(itemId)) {            return itemList[itemId];        } else {            return null;        }    }}

资源

这里的资源指的是玩家可以采集的资源,比如金库,树什么的。

using UnityEngine;using System.Collections;public class Acquisition : GameNpc {    [SerializeField]    float maxGold = 1000.0f; // 最大可采集黄金    [SerializeField]    float maxWood = 1000.0f; // 最大可采集木头    [SerializeField]    float getGold = 100.0f; // 当前可采集黄金    [SerializeField]    float getWood = 100.0f; // 当前可采集木头    [SerializeField]    float recoverGoldPerSecond = 1.0f; // 每秒回复可采集黄金    [SerializeField]    float recoverWoodPerSecond = 1.0f; // 每秒回复可采集黄金    protected void Awake() {        base.Awake();        type = Active.TYPE_ACQUISTION;    }    public override void doThing(float deltaTime, params GameObject[] objs) {        base.doThing(deltaTime, objs);        getGold = Mathf.Min(getGold + recoverGoldPerSecond * deltaTime, maxGold);        getWood = Mathf.Min(getWood + recoverWoodPerSecond * deltaTime, maxWood);    }}

OK, 至此,主观存在的写完了,明天把客观存在的写完~


人形大宝宝今天竟然发说说了- -吃惊脸。

不过今天的CSDN超级卡。。

原创粉丝点击