| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity3D-Canvas挂载血量2 -> 正文阅读 |
|
[游戏开发]Unity3D-Canvas挂载血量2 |
在敌人的预制体上选择合适的位置创建一个空对象,空对象的位置将用来挂载血条 在数据模板设置UpdateHealthBarOnAttack,第一个参数是当前血量,第二个则是最大血量 public?event?Action<int, int> UpdateHealthBarOnAttack; UpdateHealthBarOnAttack?.Invoke(CurrentHealth, MaxHealth); 设置好数据模板后设置血条的代码再挂载在敌人上 public?GameObject healthUIPrefab;//血条预制体 public?Transform barPoint;//空对象的位置 public?bool?alwaysVisible; public?float?visibleTime;//设置倒计时多少秒血条预制体显示关闭 private?float?timeLeft; Image healthSlider; Transform UIbar; Transform cam; CharacterStats currentStats; void?Awake() { //获取数据模板脚本 ????currentStats = GetComponent<CharacterStats>(); ????currentStats.UpdateHealthBarOnAttack += UpdateHealthBar; } private?void?OnEnable() { ????cam = Camera.main.transform; ????foreach(Canvas canvas in?FindObjectsOfType<Canvas>()) ????{ ????????if(canvas.renderMode == RenderMode.WorldSpace) ????????{ //当前血条在画布的位置 ????????????UIbar = Instantiate(healthUIPrefab, canvas.transform).transform; //使用GetChild()获取父物体下子物体的索引 ????????????healthSlider = UIbar.GetChild(0).GetComponent<Image>(); ????????????UIbar.gameObject.SetActive(alwaysVisible); ????????} ????} } private?void?UpdateHealthBar(int?currentHealth, int?maxHealth) { ????if(currentHealth <= 0) ????{ ????????Destroy(UIbar.gameObject);//销毁血条 ????} ????UIbar.gameObject.SetActive(true); ????timeLeft = visibleTime;//攻击到敌人后倒计时 ????float?sliderPercent = (float)currentHealth / maxHealth;//当前血量/最大血量 ????healthSlider.fillAmount = sliderPercent;//将数值赋值给绿色图片 } void?LateUpdate()//血条关闭计时 { ????if(UIbar != null) ????{ ????????UIbar.position = barPoint.position; ????????UIbar.forward = -cam.forward; ????????if(timeLeft <= 0 && !alwaysVisible)//判断倒计时是否等于0 ????????{ ????????????UIbar.gameObject.SetActive(false);//关闭血条显示 ????????} ????????else ????????{ ????????????timeLeft -= Time.deltaTime;//继续倒计时 ????????} ????} } |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 16:46:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |