您的位置:首页 > 移动开发 > Unity3D

unity3d开发 打飞机小游戏(三)(飞机子弹设置)

2018-03-07 15:45 267 查看
继续上一期的场景哈,我们会发现飞机好像在动了,但是没子弹怎么玩啊?于是呢我们这次就把子弹给添加上,首先打开image资源文件呢看到有两种子弹,先布置一下在飞机的哪里发射比较好看呢,

大概我布置的就是这样了,位置是随便定的。这里可能有些同学把子弹模型拖进去之后发现看不见了,可能是因为你的layer设置问题啊,改一下就可以了。然后呢我们在Assets下新建一个文件夹叫prefabs,把两个子弹拖进去,prefabs是什么呢?其实就是一个未实例化的对象,啥意思呢,就像你有一把枪,枪里面还没发射出去的子弹就叫做未实例化的,你需要开枪的时候就实例化一个子弹出来的意思


然后呢我们就需要设置发射子弹的地方啦,首先选中你的飞机,然后GameObject选择Create Empty Child创建一个空的儿子,把它拖到你刚刚想发射子弹的地方就可以啦,Child是包含在飞机中的,你可以看成是飞机上的一部分,你把飞机拖动,那么它的儿子们也是会一起移动的,就是实现绑定的功能嘛。    然后呢它还是不会发射子弹呀?我们通过脚本来控制它[csharp] view plain copypublic class GunWeapon : MonoBehaviour {  
  
    //发射子弹间隔  
    public float rate = 0.2f;  
    //子弹的实例化存储对象  
    public GameObject bullet;  
  
    void Start(){  
        OpenFire();  
    }  
  
    public void OpenFire(){  
        InvokeRepeating("fire", 1, rate);  
    }  
    //发射一枚子弹  
    public void fire(){  
        GameObject.Instantiate(bullet, transform.position, Quaternion.identity);  
    }  
}  
介绍两个函数。一个是非常常用的实例化函数GameObject.Instantiate()方法,它的三个参数分别是实例化对象的存储空间,实例化出来的坐标,实例化出来的角度。     这里我们将实例化出来的子弹放在bullet上,位置就是当前位置嘛,而旋转角度上的参数是一个四元数,记住这个参数就是角度不变的意思就好了InvokeRepeating()方法,实现函数重复调用的功能,三个参数分别是函数名(string类型),开始时间,间隔时间。我们把写好的脚本挂载到三个子儿子上,并且把子弹的prefabs拖到这个脚本里面就完成啦。

添加子弹

下一步我们要为子弹写一个脚本,因为它本身是没有任何属性的,也就是发射出去没有速度的,我们也需要一个脚本来控制子弹下面的代码都比较简单就不解释了,至于3.91f是怎么得出来的呢,你可以先不写,然后运行一下在Scence视图下看看到多少会飞出你的视野,那就是多少了,飞出去的子弹也不会再显示回来了,所以就把它销毁掉,不然的话随着时间过去。。。你的电脑会爆炸的。。[csharp] view plain copypublic class Bullet : MonoBehaviour {  
    //子弹飞行速度  
    public float Speed = 4;  
      
    // Update is called once per frame  
    void Update () {  
        transform.Translate(Vector3.up*Speed*Time.deltaTime);  
        if (transform.position.y >= 3.91f)        {  
            Destroy(this.gameObject);  
        }  
    }  
}  
写完后呢把脚本直接挂载到子弹的prefabs上,那么场景里面对应的所有子弹也都会挂上这个脚本的了运行一下,子弹就刷刷刷出来了

是不是很酷呢?感觉动手试一试吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: