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

杭州企业做网站苏州百度推广开户

杭州企业做网站,苏州百度推广开户,电脑怎样做幻灯片的网站,百度seo网站优化怎么做玩家血量控制 血条UI玩家Canvas下的Slider血量逻辑控制 子弹攻击掉血子弹发射者的区分玩家受伤逻辑子弹碰撞检测 效果 血条UI 和之前我们前面介绍的玩家武器弹夹UI的思路是一样的,跟详细的细节可以参考博客Unity3D装弹和弹夹UI显示。 玩家Canvas下的Slider 之前玩…

玩家血量控制

  • 血条UI
    • 玩家Canvas下的Slider
    • 血量逻辑控制
  • 子弹攻击掉血
    • 子弹发射者的区分
    • 玩家受伤逻辑
    • 子弹碰撞检测
  • 效果

血条UI

和之前我们前面介绍的玩家武器弹夹UI的思路是一样的,跟详细的细节可以参考博客Unity3D装弹和弹夹UI显示。

玩家Canvas下的Slider

之前玩家界面的Canvas(画布)名字是“Canvas_GameUI”,如果之前没有按照系列来的话,可以自己右键->UI->Canvas创建一个。

在Canvas_GameUI下面,右键->UI->Slider,创建一个滑动条。重命名Slider为“HPSlider”,方便阅读和项目管理。

对Slider进行简化,把Handle Slider Area删了,滑动条末尾小球用不上。把Fill Area中的Fill拖到和Backgroud平级,Fill Area作用不大可以删掉只是更好约束了Fill的strech。
在这里插入图片描述
调整Fill和Background都为上下左右全伸展。
在这里插入图片描述
调整Fill和Background的背景颜色,分别选择Image图像组件为素材TEX_White和TEX_Black。然后调整Fill的Image图像组件颜色为红色。
在这里插入图片描述
让血条常驻左下角,通过修改属性中的锚点为左下角,并调整到合适的位置和合适的位置。可以参考弹夹UI的位置坐标和大小,做一个对称的效果。
在这里插入图片描述
血量UI就做好了。

血量逻辑控制

打开PlayerController 的代码,添加如下变量。

public Slider HPSlider;// 血量Slider UI
public float HP = 100;// 当前血量
public float HP_Max = 100;// 最大血量

在Start函数的时候进行一些HPSlider的初始化工作。

void Start()
{if (HPSlider){HPSlider.maxValue = HP_Max;HPSlider.value = HP;}
}

保存代码回到Unity中,把HPSlider拖到代码上。

子弹攻击掉血

之前我们写过敌人攻击玩家的逻辑,但是并没有给子弹附加让玩家掉血的效果。
之前子弹的逻辑是生成之后,碰撞到的物体如果是敌人就让敌人掉血。

现在开始子弹除了要区别碰撞到的是敌人和玩家,还要判断子弹是谁发射出来的。
玩家发出子弹对敌人才有用,敌人发出的子弹对玩家才有用。

子弹发射者的区分

BulletController文件中,在Class外面添加一个枚举类型enume,记录子弹发出者。
设置为publice,这样别的代码也能调用。

// 比用数字区分要更加直观,public的话别的代码也能调用
// Player和Enemy都写,因为之后还要写玩家被子弹伤害
public enum CharacterType
{Player,Enemy
}

BulletController对象中设置一个CharacterType类型变量,用来记录子弹是玩家发射的还是敌人发射的。

在玩家发射子弹和敌人发射子弹的时候,给子弹设置对应的CharacterType,用来记录发射者是什么类型。
WeaponController:

GameObject CreateBullet()
{GameObject obj = Instantiate(bullet, shootPoint);obj.GetComponent<BulletController>().characterType = CharacterType.Player;// characterType赋值obj.GetComponent<BulletController>().bulletPool = bulletPool;return obj;
}

EnemyWeaponController:

GameObject CreateBullet()
{GameObject obj = Instantiate(bullet, shootPoint);obj.GetComponent<BulletController>().characterType = CharacterType.Enemy;// characterType赋值obj.GetComponent<BulletController>().bulletPool = bulletPool;return obj;
}

玩家受伤逻辑

PlayerController写一个Damage函数,模仿之前敌人受伤的逻辑写就可以了,参考之前Unity3D 子弹攻击敌人掉血博客。

单独写一个Damage函数是为了方便子弹碰撞检测调用用的。

Damage函数逻辑如下,每次受伤之后让HP减少即可,暂时先不考虑HP为0后怎么办,这个涉及到游戏管理,也就Game Over,后面会补充的。目前暂时HP为0后,HP条就不变化了。

思路为,每次受伤之后让HP减少,减少为0后不变化。
PlayerController:

public void Damage(float damage)
{if (HP > 0){HP -= damage;if (HPSlider)HPSlider.value = HP;}
}

子弹碰撞检测

子弹碰撞检测时候识别一下发出者和碰撞对象。
发出者是玩家,碰撞对象是敌人,就让敌人掉血,子弹销毁;
发出者是敌人,碰撞对象是玩家,就让玩家掉血,子弹销毁。

private void OnCollisionEnter(Collision collision)
{if (collision.gameObject.CompareTag("Enemy")){if (characterType == CharacterType.Player){collision.gameObject.GetComponent<EnemyController>().Damage(attackNum);Destroy(this.gameObject);}}else if (collision.gameObject.CompareTag("Player")){if (characterType == CharacterType.Enemy){collision.gameObject.GetComponent<PlayerController>().Damage(attackNum);Destroy(this.gameObject);}}else{Destroy(this.gameObject);}
}

效果

在这里插入图片描述

http://www.khdw.cn/news/36302.html

相关文章:

  • 成都网站制作创新互联专业网站推广软件
  • 色流网站怎么做卖友情链接的哪来那么多网站
  • 简单的个人网页制作八上数学优化设计答案
  • 太原网站模板嘉兴优化公司
  • 厦门站长优化工具微信推广链接怎么制作
  • 网站后台账户密码软文写作平台发稿
  • 做网站cnfgseo快速排名软件价格
  • 日照网站建设哪家好seo论坛站长交流
  • node mysql做动态网站今天的新闻发布会
  • 九江网站建设公司软件推广的渠道是哪里找的
  • 上海备案证查询网站查询系统想要网站推广页
  • wordpress仿制建设搜索引擎优化包括
  • 重庆旅游网页设计网站seo关键词优化
  • 沈阳网站制作哪家好百度关键词搜索排名多少钱
  • 网站开发第三方支付宁波seo高级方法
  • 有没有做php项目实战的网站自媒体培训
  • wordpress 绑定多个二级域名自动app优化官网
  • 网站建设策划 流程网站设计公司排行
  • 十大接单网站脚本外链平台
  • 网站模版idc台州网站建设方案推广
  • 电子商务网站建设前的分析技能培训
  • 做暧暧视频网站爱站网权重查询
  • 济南网站建设平台seo专员是什么职位
  • 做外贸哪个网站比较好2017今日国内新闻
  • 适合毕设做的简单网站seo价格是多少
  • 武汉教育网站建设优化商务软文写作范文200字
  • 怎么做服务器网站网络营销推广方案3篇
  • dw免费网站模板职业技能培训有哪些
  • 蓝科企业网站系统免费b站在线观看人数在哪里找到
  • 佛山中小企业外贸网站建设推广知名的seo快速排名多少钱