【UNET自学日志】Part10 摧毁玩家
来源:互联网 发布:火蓝刀锋知乎 编辑:程序博客网 时间:2024/05/28 20:18
上一个部分做了玩家的射击造成的伤害,但是玩家生命值为负的时候玩家还在游戏场景上,这个部分我们将要把生命值为0以下的玩家摧毁掉
主要的思路就是当玩家的生命值小于或等于0的时候,将玩家的控制和渲染都设置为不可用即可
将Player_Health脚本做下修改
using UnityEngine;using System.Collections;using UnityEngine.Networking;using UnityEngine.UI;public class Player_Health : NetworkBehaviour { //玩家的生命值,当生命值的数值发生变化时调用OnHealthChanged函数 [SyncVar(hook="OnHealthChanged")]private int health = 100; //右下角显示生命值的Text private Text healthText; //判断玩家是否死亡的两个bool变量 private bool shouldDie = false; public bool isDead = false; public delegate void DieDelegate(); public event DieDelegate EventDie;void Start () { healthText = GameObject.Find("Health Text").GetComponent<Text>(); SetHealthText();}void Update () { CheckCondition();} //检查条件 void CheckCondition() { if (health <= 0 && !shouldDie&&!isDead) { shouldDie = true; } if (health <= 0 && shouldDie) { if (EventDie != null) { EventDie(); } shouldDie = false; } } //设置生命值Text的内容 void SetHealthText() { if (isLocalPlayer) { healthText.text = "Health " + health.ToString(); } } //生命值减少 public void DeductHealth(int dmg) { health -= dmg; } //生命值改变 void OnHealthChanged(int hlth) { health = hlth; SetHealthText(); }}
using UnityEngine;using System.Collections;using UnityEngine.Networking;using UnityEngine.UI;public class Player_Death : NetworkBehaviour { private Player_Health healthScript; //画面中心的小红点 private Image crossHairImage;void Start () { crossHairImage = GameObject.Find("crossHairImage").GetComponent<Image>(); healthScript = GetComponent<Player_Health>(); healthScript.EventDie += DisablePlayer;} void OnDisable() { healthScript.EventDie -= DisablePlayer; } //将Player的相关控制和渲染设置成不可用状态,以代表摧毁Player void DisablePlayer() { GetComponent<CharacterController>().enabled=false; GetComponent<Player_Shoot>().enabled = false; GetComponent<BoxCollider>().enabled = false; Renderer[] renderers = GetComponentsInChildren<Renderer>(); foreach (Renderer ren in renderers) { ren.enabled = false; } healthScript.isDead = true; if (isLocalPlayer) { GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().enabled = false; crossHairImage.enabled = false; //Respawan button 预留重生按钮,下个部分做 } }}
其中用到了一个委托的方法,因为对委托不是很熟悉,也就不多说些误人子弟的话了。
按着某人的建议写了点注释= =为什么感觉那么鸡肋呢。。。
0 0
- 【UNET自学日志】Part10 摧毁玩家
- 【UNET自学日志】Part11 玩家复活
- 【UNET自学日志】Part15 僵尸攻击玩家
- 【UNET自学日志】Part8 射击
- 【UNET自学日志】Part12 僵尸
- 【UNET自学日志】Part20 UI
- 【UNET自学日志】Part1 UNET的设置与运动同步
- 【UNET自学日志】Part2 旋转同步
- 【UNET自学日志】Part4 模拟延迟
- 【UNET自学日志】Part7 独一无二的ID
- 【UNET自学日志】Part9 造成伤害
- 【UNET自学日志】Part14 射击那些僵尸
- 【UNET自学日志】Part18 修复一些错误
- Unet(玩家移动)
- 【UNET自学日志】Part3 变得更有效率一点
- 【UNET自学日志】Part6 更有效率的旋转同步
- 【UNET自学日志】Part 13 僵尸的ID
- 【UNET自学日志】Part 17 更好的重生
- TableView基础篇
- Python编程技巧(一)
- Hibernate单表操作
- 基于归并排序的实现与应用
- 知道这20个正则表达式,能让你少写1,000行代码
- 【UNET自学日志】Part10 摧毁玩家
- Eclipse IDE for C/C++ 配置
- 8(进程控制)
- 自定义初学5——自定义View显示图片
- 数位DP
- app 两端出现黑色,不能全屏
- iOS 集成极光推送,绕过一些坑
- c++第四次试验——作业
- Ubuntu 12.04下安装OpenCV 2.4.2 和 ffmpeg-0.11.1