当前位置: 首页 > news >正文

『功能项目』主角属性值显示【75】

本章项目成果展示

我们打开上一篇74穿戴装备的项目,

本章要做的事情是制作主角属性界面,实现在面板上显示主角的攻击力等数值

制作一个简易的主角界面(创建Image与Text显示即可)

创建一个空物体

重命名为PlayerInfo

在其子级下创建Text

重命名为AttackInfoText

设置文本组件

依次复制

重命名

创建脚本:

编写脚本:PlayerEquipInfoUI.cs

using UnityEngine;
using UnityEngine.UI; 
public class PlayerEquipInfoUI : MonoBehaviour{GameManager gm;Text hpText; void Start(){gm = GameManager.Instance;hpText = transform.Find("PlayerInfo/HpText").GetComponent<Text>();UpdateUI();}void Update(){UpdateUI();}void UpdateUI(){hpText.text = gm.infoSys.playerHP.ToString();}
}

运行后实现血量的恒定值显示

复写脚本:PlayerEquipInfoUI.cs

using UnityEngine;
using UnityEngine.UI; 
public class PlayerEquipInfoUI : MonoBehaviour{GameManager gm;Text hpText;Text mpText;Text attText;Text defText;void Start(){gm = GameManager.Instance;hpText = transform.Find("PlayerInfo/HpText").GetComponent<Text>();mpText = transform.Find("PlayerInfo/MpText").GetComponent<Text>();attText = transform.Find("PlayerInfo/AttackInfoText").GetComponent<Text>();defText = transform.Find("PlayerInfo/DefenseText").GetComponent<Text>();UpdateUI();}void Update(){UpdateUI();}void UpdateUI(){attText.text = gm.infoSys.attackValue.ToString();hpText.text = gm.infoSys.playerHP.ToString();mpText.text = gm.infoSys.playerMP.ToString();defText.text = gm.infoSys.defineValue.ToString();   }
}

运行项目

在UIMangaer.cs增加一个战斗力的字段

修改脚本:PlayerEquipInfoUI.cs

运行实现

接下来给主角属性面板增加一个按钮控制开关

复制一个按钮

修改脚本:UIManager.cs

修改扔到地面的报红

删除掉UISlot.cs脚本中的背包刷新代码

添加到打开背包BagExample.cs中

运行项目

接下来制作当穿上装备增加攻击力与战斗力以及数值变化的显示功能

创建Text文本重命名为EquipInfo

设置为隐藏

修改脚本:RightClickItem.cs

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
public class RightClickItem : MonoBehaviour, IPointerClickHandler{Image childImage;GameManager gm;GameObject currentCanvas;void Start(){gm = GameManager.Instance;childImage = transform.Find("Icon").GetComponent<Image>();currentCanvas = GameObject.Find("CurrentCanvas").gameObject;}public void OnPointerClick(PointerEventData eventData){if (eventData.button == PointerEventData.InputButton.Right){if (childImage.sprite != null && childImage.sprite.name == "sword_basic4_blue") {Transform weaponEquipPos = GameObject.FindGameObjectWithTag("WeaponEquipPos").transform;weaponEquipPos.gameObject.GetComponent<Image>().sprite = childImage.sprite;weaponEquipPos.gameObject.GetComponent<Image>().color = Color.white;weaponEquipPos.gameObject.transform.Find("Image").gameObject.SetActive(false);childImage.sprite = null;childImage.color = new Color(45f / 255f, 45f / 255f, 45f / 255f);childImage.GetComponent<RectTransform>().sizeDelta = new Vector2(90, 90);gm.infoSys.attackValue += 500;gm.infoSys.CombatValue += (int)(500 * 1.3f);currentCanvas.transform.Find("EquipInfo").GetComponent<Text>().color = Color.green;currentCanvas.transform.Find("EquipInfo").GetComponent<Text>().text = "战斗力上升" + (int)(500 * 1.3f);currentCanvas.transform.Find("EquipInfo").gameObject.SetActive(true);StartCoroutine(WaitForThreeEquipText());}}}IEnumerator WaitForThreeEquipText() {yield return new WaitForSeconds(2);currentCanvas.transform.Find("EquipInfo").gameObject.SetActive(false);}
}

运行项目 - 当穿戴装备时

修改脚本:RightClickWeaponBack.cs

using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class RightClickWeaponBack : MonoBehaviour, IPointerClickHandler{Image childImage;Sprite WeaponIconNormal;GameManager gm;GameObject currentCanvas;void Start(){gm = GameManager.Instance;WeaponIconNormal = Resources.Load<Sprite>("Prefabs/UGUIIcons/IndigoWeaponIcon_01");currentCanvas = GameObject.Find("CurrentCanvas").gameObject;}public void OnPointerClick(PointerEventData eventData){if (eventData.button == PointerEventData.InputButton.Right){if (transform.GetComponent<Image>().sprite == null)return;childImage = GameObject.FindWithTag("WeaponEquipPos").GetComponent<Image>();if (childImage.sprite != null){Transform uISlotPos = GameObject.FindGameObjectWithTag("UISlot").transform;if (uISlotPos.gameObject.GetComponent<Image>().sprite == null){uISlotPos.gameObject.GetComponent<Image>().sprite = childImage.sprite;uISlotPos.gameObject.GetComponent<Image>().color = Color.white;childImage.sprite = WeaponIconNormal;childImage.GetComponent<RectTransform>().sizeDelta = new Vector2(90, 90);gm.infoSys.attackValue -= 500;gm.infoSys.CombatValue -= (int)(500 * 1.3f);currentCanvas.transform.Find("EquipInfo").GetComponent<Text>().color = Color.red;currentCanvas.transform.Find("EquipInfo").GetComponent<Text>().text = "战斗力下降" + (int)(500 * 1.3f);currentCanvas.transform.Find("EquipInfo").gameObject.SetActive(true);StartCoroutine(WaitForThreeEquipText());}}}IEnumerator WaitForThreeEquipText(){yield return new WaitForSeconds(2);currentCanvas.transform.Find("EquipInfo").gameObject.SetActive(false);}}
}

运行项目 - 当脱下装备时

本章实现了主角属性界面的属性同步功能

接下来的文章内容:

1.3D模型动态投射UI

2.窗口可拖拽脚本

3.点击名称寻找地点功能

4.隐藏怪物的生成

5.怪物I攻击范围内的主动攻击

6.掉落坐骑蛋的获取

7.异步传送转换场景

以及开放回合制、坐骑系统、宠物系统、背包系统、神炼系统、商城系统、Boss的目标跟随任务导航系统以及UI播放3D动画效果等等。

具体项目运行效果请关注water1024的b站视频项目演示《破碎纪元》

【Unity回合2.5D】破碎纪元_单机游戏热门视频 (bilibili.com)icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6

 

http://www.lryc.cn/news/444481.html

相关文章:

  • 单片机嵌入式编程中常用技术点
  • 【毕业论文+源码】基于ASP+NET的人事管理系统
  • 计算机毕业设计 校园志愿者管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读
  • 如何使用VM中win10搭建Hfish蜜罐(危险感知平台)。从下载到部署详细教程
  • Rust: AES 加密算法库
  • 计算机网络34——Windows内存管理
  • Redisson 总结
  • EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(一)
  • 文心智能体搭建步骤
  • PHP安全
  • c++278函数指针
  • sklearn特征选取之SelectFromModel
  • vue一级、二级路由设计
  • python爬虫:将知乎专栏文章转为pdf
  • 嵌入式笔记(入门系列2)
  • 并发编程多线程
  • 【十八】MySQL 8.0 新特性
  • 巨潮股票爬虫逆向
  • 传知代码-从零开始构建你的第一个神经网络
  • 大厂面试真题:SpringBoot的核心注解
  • Java设计模式—面向对象设计原则(五) ----->迪米特法则(DP) (完整详解,附有代码+案例)
  • docker多阶段镜像制作,比如nginx镜像,编译+制作
  • 大语言模型量化方法GPTQ、GGUF、AWQ详细原理
  • 《 C++ 修炼全景指南:十 》自平衡的艺术:深入了解 AVL 树的核心原理与实现
  • SAP 特别总账标识[SGL]
  • 认知杂谈77《简单:通往高手的技巧》
  • 《SmartX ELF 虚拟化核心功能集》发布,详解 80+ 功能特性和 6 例金融实践
  • 9月23日
  • 如何使用Jinja定义dbt宏