蓝色网站风格,wordpress wp user,洛阳 网站建设公司哪家好,wordpress用户邮箱验证码玩家血量控制 血条UI玩家Canvas下的Slider血量逻辑控制 子弹攻击掉血子弹发射者的区分玩家受伤逻辑子弹碰撞检测 效果 血条UI
和之前我们前面介绍的玩家武器弹夹UI的思路是一样的#xff0c;跟详细的细节可以参考博客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.GetComponentBulletController().characterType CharacterType.Player;// characterType赋值obj.GetComponentBulletController().bulletPool bulletPool;return obj;
}EnemyWeaponController
GameObject CreateBullet()
{GameObject obj Instantiate(bullet, shootPoint);obj.GetComponentBulletController().characterType CharacterType.Enemy;// characterType赋值obj.GetComponentBulletController().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.GetComponentEnemyController().Damage(attackNum);Destroy(this.gameObject);}}else if (collision.gameObject.CompareTag(Player)){if (characterType CharacterType.Enemy){collision.gameObject.GetComponentPlayerController().Damage(attackNum);Destroy(this.gameObject);}}else{Destroy(this.gameObject);}
}效果