检测玩家自动开火

我们要在敌人跟随玩家代码后面写上检测玩家进入一定范围内的时候敌人自动开火。

我们声明一个 GameObject对象为bullet,声明一个Transform对象为bulletstartpoint

检测机制:通过小于某个夹角值进行判断

首先在敌人里设置一个Bulletstartpoint,将其放到合适的位置

如下图所示:

在Player组件里设置一个Enemyfirecheckpoint空对象,调整其到合适的位置

我们需要在Ryun_PlayerController里写进这个transform;

新建一个float类型的夹角Angle

在下面新建一个FireControler函数,在里面写入敌人开火的控制

设置一个局部变量var direction,返回向量方向

var direction = (PlayerController.Enemyfirecheckpoint.position - bulletstartpoint.position).normalized;
//它返回向量方向,保证结果向量的大小为 1,(它保留方向信息但丢失大小信息)。小写normalize 只是一个属性,只能get不能set

private void FireController() {
    var direction = (PlayerController.Enemyfirecheckpoint.position - bulletstartpoint.position).normalized;
    print(Vector3.Angle(direction, bulletstartpoint.position));//将角度输出,方便观测
    if (Vector3.Angle(direction, bulletstartpoint.forward) <minAnlge)
    {
       if (!isFire)//开始设置isFire为false
       {

        StartCoroutine("Fire",direction);//调用实参
        isFire = true;

        }


     }
      else
    {
    if (isFire)
     {
        StopCoroutine("Fire");
        isFire = false;
     }


    }
}
//利用协程函数写一个生成新子弹以及发射子弹的代码:
IEnumerator Fire(Vector3 direction)//形参
{
   while (isFire)
  {
    Quaternion rotation = Quaternion.LookRotation(direction);//将生成一个四元数表示的三维朝向
    GameObject newbullet = Instantiate(bullet, bulletstartpoint.position, bulletstartpoint.rotation);
    newbullet.GetComponent<Rigidbody>().velocity = newbullet.transform.forward * bulletstartspeed;

    yield return new WaitForSeconds(fireinterval);//让其在 public float fireinterval = 0.2f间隔后循环执行。

   }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值