码迷,mamicode.com
首页 > 其他好文 > 详细

塔防游戏学习日记(二)之朝敌人发射子弹

时间:2017-10-27 23:55:15      阅读:616      评论:0      收藏:0      [点我收藏+]

标签:head   技术   .com   刚体   计时器   http   tar   攻击   i++   

  检测到炮塔内敌人进入以后,当然下一步就是要向他们发射子弹。

  接下来我们来做朝敌人发射子弹的相关操作。

  分析一下,要向敌人发射子弹,需要有攻击速度,简单的计时器,子弹预设体,发射位置。

  首先在UNITY里炮塔下面创建一个子物体位于炮口附近用于作为子弹的发射位置。

  技术分享

  接下来就是写脚本了,在炮塔的脚本下面写。

  先挂出脚本,再讲一些注意事项。

  

public class TurretAttack : MonoBehaviour {

    public List<GameObject> enemys = new List<GameObject>();
    public Transform head;

    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "enemy")
        {
            enemys.Add(other.gameObject);
        }
    }
    private void OnTriggerExit(Collider other)
    {
        if (other.tag == "enemy")
        {
            enemys.Remove(other.gameObject);
        }
    }
    public float attackTimes = 1;//控制攻击速度
    private float times=0;//计时器控制攻击速度
    public GameObject buttlePerfab;//子弹预制体
    public Transform firePosition;//定义子弹发射点

    private void Start()
    {
        times = attackTimes;//确保至少发射一枚子弹
    }
    private void Update()
    {
        for (int i = 0; i <= enemys.Count - 1; i++)
        { 
            //敌人在炮塔范围内销毁后移除集合
            if (enemys[i] == null)
            {
                enemys.RemoveAt(i);
            }
        }    
        //在进入炮塔范围后开始计时
        if (enemys.Count > 0)
        {
            times += Time.deltaTime;
        }
        if (enemys.Count > 0)//这个是改变炮塔朝向的,暂时不必理会
        {
            Vector3 targetPosition = enemys[0].transform.position;
            targetPosition.y = head.position.y;
            head.LookAt(targetPosition);
        }       
        if (enemys.Count>0&&times >= attackTimes)//判断发射条件
        {
            times -= attackTimes;
            attack();
        }
    }
    void attack()//攻击方法
    {
        GameObject bullet=
        GameObject.Instantiate(buttlePerfab, firePosition.position, firePosition.rotation);
        bullet.GetComponent<StaTurBullet>().SetTarget(enemys[0].transform);//调用StaTurBullet中的制定目标方法
    }
}

大约就是这样了,别忘了在unity里指定子弹预制体和发射点,不然会报空引用异常。

注意这时候实例化的子弹上如果没写脚本的话,子弹会停在那,而不会飞出,下次写子弹的脚本。

技术分享

子弹预制体随便做就行了,注意添加刚体,istrigger,取消重力

 

  

  

塔防游戏学习日记(二)之朝敌人发射子弹

标签:head   技术   .com   刚体   计时器   http   tar   攻击   i++   

原文地址:http://www.cnblogs.com/lywind/p/7745550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!