子弹

来源:互联网 发布:紫砂壶品牌 知乎 编辑:程序博客网 时间:2024/04/29 07:35
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 子弹类
/// </summary>
public class Bullet : MonoBehaviour 
{
    //子弹是否已经出堂
    bool isMove = false;
    //子弹碰到僵尸后,僵尸失去的血量
    int enemyLoseHp = 2;
    //子弹deleixign
    public BulletType type;//A,B
    //刚体
    Rigidbody r = null;
    //子弹飞出去的时间
    float time = 0;
// Use this for initialization
void Start () 
    {
        //添加刚体
      r=  GetComponent<Rigidbody>();
        //如果没有刚体,就添加刚体
      if (r == null) r = transform.gameObject.AddComponent<Rigidbody>();
        //子弹不可见
      this.transform.gameObject.SetActive(false);
      //失去重力//如果该属性设置为true表示该物体运动状态不受外力,
      //碰撞和关节的影响,而只受到动画以及附加在物体上的脚本影响,
      //但是该物体仍然能改变其他物体运动状态,例如游戏中倒下的敌人始终不动 ,就是利用这个属性 。
      r.isKinematic =true;
}
    /// <summary>
    /// 子弹飞出去
    /// </summary>
    public void Move(Vector3 pos,Quaternion rotation) 
    {
        //子弹出堂,子弹可以看见
        this.transform.gameObject.SetActive(true);
        //设置子弹的位置
        this.transform.position = pos;
        //运动状态受外界的影响
        r.isKinematic = false;
        //找到枪
        GameObject cam = GameObject.Find("Gun04");
        //为子弹施加一个力
        r.AddForce(cam.transform.forward * 1000f);
        //子弹是否已经出膛
        isMove = true;
    }
    
    /// <summary>
    /// 碰撞
    /// </summary>
    /// <param name="con"></param>
    void OnCollisionEnter(Collision con) 
    {
        //如果碰到的对象是僵尸,僵尸要减血
        if (con.collider.tag == "Respawn") 
        {
            Zombie zom = con.collider.GetComponent<Zombie>();
            zom.setHP(enemyLoseHp);
            //销毁子弹
            BulletDestroy();
        }
    }
    
    /// <summary>
    /// 如果子弹飞出去3秒以后,就自动销毁该子弹
    /// </summary>
    void Update() 
    {
        if (isMove) 
        {
            time += Time.deltaTime;
            if (time >= 3f) 
            {
                //销毁子弹
                BulletDestroy();
            }
        }
    }
    /// <summary>
    /// 销毁子弹
    /// </summary>
    public void BulletDestroy()
    {
        //出膛的时间
        time = 0;
        //没有出膛
        isMove = false;
        //没有重力的影响
        r.isKinematic = true;
        //子弹看不看见
        this.gameObject.SetActive(false);
        //设置子弹的大小
        this.transform.position = Vector3.zero;
        //开始回收到枪的子弹夹中去
        ARGun.Instance.reBackBullet(this);
    }
    
}
原创粉丝点击