游戏中的技能升级:

本文介绍了一个基于Unity的游戏技能管理系统实现方案,包括技能数据的解析、技能图标显示更新及技能升级等功能。该系统通过读取文本配置文件来加载技能信息,并允许根据玩家类型和位置类型获取技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:解析技能
using UnityEngine;
using System.Collections;
/// <summary>
/// 拆分技能信息
/// </summary>
public class SkillManager : MonoBehaviour
{
       public static SkillManager _instance;
       public TextAsset skillinfoText;
       private ArrayList skillList = new ArrayList();
       void Awake()
       {
              _instance = this;
              InitSkill();
       }
       void InitSkill()
       {
              string[] skillArray = skillinfoText.ToString().Split('\n');
              foreach (string str in skillArray)
              {
                     string[] proArray = str.Split(',');
                     Skill skill = new Skill();
                     skill.Id = int.Parse(proArray[0]);
                     skill.Name = proArray[1];
                     skill.Icon = proArray[2];
                     switch (proArray[3])
                     {
                           case "Warrior":
                                  skill.PlayerType = PlayerType.Warrior;
                                  break;
                           case "FemaleAssassin":
                                  skill.PlayerType = PlayerType.FemaleAssassin;
                                  break;
                     }
                     switch (proArray[4])
                     {
                           case "Basic":
                                  skill.SkillType = SkillType.Basic;
                                  break;
                           case "Skill":
                                  skill.SkillType = SkillType.Skill;
                                  break;
                     }
                     switch (proArray[5])
                     {
                           case "Basic":
                                  skill.PosType = PosType.Basic;
                                  break;
                           case "One":
                                  skill.PosType = PosType.One;
                                  break;
                           case "Two":
                                  skill.PosType = PosType.Two;
                                  break;
                           case "Three":
                                  skill.PosType = PosType.Three;
                                  break;
                     }
                     skill.ColdTime = int.Parse(proArray[6]);
                     skill.Damage = int.Parse(proArray[7]);
                     skill.Level = 1;
                     skillList.Add(skill);
              }
       }
       //传进一个位置信息
       public Skill GetSkillByPosition(PosType posType)
       {
              PlayerInfo info = PlayerInfo._instance;
              foreach (Skill skill in skillList)
              {//人物等于人物    位置等于位置
                     if (skill.PlayerType == info.PlayerType && skill.PosType == posType)
                     {//返回skiil(所有属性类)
                           return skill;
                     }
              }
              return null;
       }
}

2更新技能图片的显示:   每个技能上都挂同一个脚本  点击技能按钮时发送消息   transform.parent.SendMessage("OnSkillClick", skill);
                                                                               
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SkillItemUI : MonoBehaviour {
       public PosType postype;
       private Skill skill;
       private UISprite sprite;
       private UISprite Sprite
       {
              get
              {
                     if (sprite==null)
                     {
                           sprite = this.GetComponent<UISprite>();
                     }
                     return sprite;
              }
       }
       private void Start()
       {
              UpdateShow();
       }
       /// <summary>
       /// 更新技能图片
       /// </summary>
       void UpdateShow () {
              //                传技能类型 0,1,2,3
              skill = SkillManager._instance.GetSkillByPosition(postype);
              Sprite.spriteName = skill.Icon;//
       }
       void OnClick()
       {
              
              //给父物体脚本发送事件(“方法”,参数)
                     transform.parent.SendMessage("OnSkillClick", skill);
              
       }
}

3技能面板脚本  按钮关闭 激活  根据技能(第3条)送的消息  根据人物金钱,技能与人物等级差,判断技能是否升级
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class skillUI : MonoBehaviour {
       UILabel skillNameLabel;
       UILabel jieshao;
       UILabel upgredButtonLabel;
       UIButton upgredButton;
       UIButton coloseButton;
       private Skill skill;//当前选择的技能按钮
       void Start () {
              
              skillNameLabel = this.transform.Find("title_name").GetComponent<UILabel>();
              upgredButton = this.transform.Find("BTN").GetComponent<UIButton>();
              coloseButton = this.transform.Find("Collse").GetComponent<UIButton>();
              upgredButtonLabel=this.transform.Find("BTN/Label").GetComponent<UILabel>();
              jieshao= this.transform.Find("jiaoshao").GetComponent<UILabel>();
              
              skillNameLabel.text = null;
              DisableUpgradeButton("选择技能");
              EventDelegate ed = new EventDelegate(this, "OnUpgrade");
              //给按钮添加点击事件
              upgredButton.onClick.Add(ed);
       }
       
       
       void DisableUpgradeButton(string labele="")
       {//按钮设置为关闭
              upgredButton.SetState(UIButton.State.Disabled, true);
              //不激活
              upgredButton.GetComponent<Collider>().enabled = false;
              if (labele!="")
              {
                     upgredButtonLabel.text = labele;
              }
       }
       private void OnEnableUpgradeButton(string label="")
       {//按钮设置为正常
              upgredButton.SetState(UIButton.State.Normal, true);
              //激活
              upgredButton.GetComponent<Collider>().enabled = true;
              if (label!="")
              {
                     upgredButtonLabel.text = label;
              }
       }
       //技能上传的事件
       void OnSkillClick(Skill skill)
       {
              this.skill = skill;
              PlayerInfo info = PlayerInfo._instance;
              if ((500 * (skill.Level + 1)<info.Coin))
              {
                     if (skill.Level>=info.Level)
                     {
                           DisableUpgradeButton("技能不能人物等级");
                     }
                     else
                     {
                           OnEnableUpgradeButton("升级");
                     }
                     
              }else
              {
                     DisableUpgradeButton("金币不足");
              }
              skillNameLabel.text = skill.Name + "lv." + skill.Level;
              jieshao.text = "当前技能的攻击力为:" + (skill.Damage * skill.Level) + "下一级技能的攻击为:" +
                     (skill.Damage * (skill.Level + 1))+"升级所需要的金币数:"+ (500 * (skill.Level + 1));
              
       }
       void OnUpgrade()
       {
              PlayerInfo info = PlayerInfo._instance;
              if (skill.Level<info.Level)
              {
                     int coinNeed = 500 * (skill.Level + 1);
                     bool isSuccess = info.GetCoin(coinNeed);
                     if (isSuccess)
                     {
                           skill.Upgrade();
                           OnSkillClick(skill);
                     }
                     else
                     {
                           DisableUpgradeButton("金币不足");
                     }
              }
              else
              {
                     DisableUpgradeButton("技能不能人物等级");
              }
       }
              
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值