子弹控制
在子弹上添加脚本Ryun_BulletController
进行物体碰撞后触发,首先要给子弹一个Capsule Collider,再给敌人和玩家分别给一个碰撞体。
编写一个OnCollisionEnter函数
结尾需带上:
Destory(this.gameobject)
为了防止比如敌人发射的子弹给自己造成伤害,我们在开头定义一个枚举类型来加以区分:
public enum BulletType{
Player_Bullet=0,
Enemy_Bullet=1,
}
在Start函数里我们默认这个BulletType为Player_Bullet。
关于Ryun_BulletController的具体代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum BulletType
{
Player_Bullet = 0,
Enemy_Bullet = 1,
}
public class Ryun_BulletController : MonoBehaviour
{
public BulletType bulletType = BulletType.Player_Bullet;
public float damagevalue = 10;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnCollisionEnter(Collision collision)
{
switch (bulletType)//利用一个switch条件语句
{
case BulletType.Enemy_Bullet:
if (collision.gameObject.CompareTag("Player"))
{
collision.gameObject.GetComponent<Ryun_HealthControl>().Damage(damagevalue);
}
break;
case BulletType.Player_Bullet:
if (collision.gameObject.CompareTag("Enemy"))
{
collision.gameObject.GetComponent<Ryun_HealthControl>().Damage(damagevalue);
}
break;
}
Destroy(this.gameObject);
}
}
注:关于OnCollisionEnter方法和OnTriggerEnter
OnCollisionEnter方法被触发要符合以下条件
1 碰撞双方必须是碰撞体
2 碰撞的主动方必须是刚体,注意我的用词是主动方,而不是被动方
3 刚体不能勾选IsKinematic
4 碰撞体不能够勾选IsTigger
OnCollisionEnter方法的形参对象指的是碰撞双方中没有携带OnCollisionEnter方法的一方
OnTriggerEnter触发条件:
碰撞双方都必须是碰撞体
碰撞双方其中一个碰撞体必须勾选IsTigger选项
碰撞双方其中一个必须是刚体
刚体的IsKinematic选项可以勾选也可以不勾选
只要满足上面两个条件,不管谁主动都会触发,OnTriggerEnter方法的形参对象指的是碰撞双方中没有携带OnTriggerEnter方法的一方
————————————————
版权声明:本文为CSDN博主「xianhua7877」的原创文章,遵循CC 4.0 BY-SA版权协议,转载链接:
原文链接:https://blog.csdn.net/xianhua7877/article/details/81559955
血量管理
我们再设置人物PH值,通过脚本实现子弹射击导致的血量变化:
如下为 建好后Ryun_HealthControl的具体脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ryun_HealthControl : MonoBehaviour
{
public float PH = 100;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public void Damage(float damage)//形参
{
if (PH > 0)
{
PH -= damage;
}
else
{
}
}
}
将脚本绑定到Player以及Enemy上后,我们需要在Ryun_BulletController里调用这个脚本的函数
血条UI显示
之前做好的Canvas_GameUI,我们将之前做好的Canvas下的PH_slider复制给它,重新命名为PlayerPH_slider.
调整slider的位置,将其放在左下角
调整血条的长度和宽度
如下图所示:
在Ryun_Health Control脚本里新建如下代码,并将其放到Damge(float damage)函数里
using UnityEngine.UI;
写一个public Slider PH_Slider;
写一个public float maxPH=100;
在Start函数里设置
if( PH_Slider)
{
PH_Slider.value=PH/maxPH*PH_Slider.maxValue;
}
返回场景,将Player的PlayerPH_Slider赋给PH_Slider