Unity-飞行射击实例的代码

本文通过分析Unity官方spaceshoot DEMO,详细介绍了如何制作一款飞行射击游戏,包括玩家飞机、陨石、敌机和子弹的游戏对象及其行为。尽管尝试使用Unet进行联网功能但未成功,计划在未来完善。同时,提到了场景设置、UI界面和关键脚本如玩家控制、敌机行为、销毁逻辑等。
摘要由CSDN通过智能技术生成

花了一天的时间,照着官方的说明将spaceshoot这个DEMO撸了一遍,实现了一个简单飞行射击游戏应有的小功能,本想着用Unet这个组件把这个游戏做成一个联网的,无奈只能实现飞机运动之间的同步,其余部分画面都是不同步的。等经过进一步的学习之后我会再把这个DEMO进行完善。
接下来就分析一下这个DEMO的各个游戏对象与组件的关系。
1.场景:这个飞行射击游戏只有需要一个场景,一张用图片来做背景的星空图,一些粒子效果来模拟星星。
2.游戏对象:1.1玩家飞机:用WASD来进行控制,移动有范围限制,鼠标左键开火,撞到子弹,陨石,敌机会爆炸并附带音效;
1.2 陨石:在玩家上方随机生成并向下移动并具有旋转,离开边界范围会自动销毁,被子弹击中会爆炸,撞击到玩家飞机会爆炸并附带音效
1.3 敌机:在玩家上方随机生成并向下移动,并且可以开火,被子弹击中会爆炸,与玩家飞机相撞会爆炸,超出边界范围会销毁
1.4 子弹:可以由玩家和敌机生成,在Z轴上具有一定的速度,遇见玩家,陨石,敌机,进行爆炸并附带音效,超过生命周期会销毁
3.UI界面:需要一个计分板,玩家死亡后的结束游戏提示,和按R重新开始提示

脚本:
3.1玩家控制脚本

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
[System.Serializable]public class Boundary
{
    public float xMin,zMin,xMax,zMax;//这是设定玩家运动的边界范围


}
public class playercontroller : MonoBehaviour {
    public float speed;//移动速度
    public Boundary boundary;//边界
    public float tilt = 4;//旋转速度
    public float fireRate = 0.2f;//开或延迟
    public GameObject shot;//子弹对象

    public Transform shotspawn;//子弹生成地点
    private float nextfire = 0;//开火间隔

    // Use this for initialization
    void Update () {
        //if (isLocalPlayer) {
   
            if (Input.GetButton ("Fire1") && Time.time > nextfire) {
  //按下鼠标左键并且时间大于开火间隔
                nextfire = Time.time + fireRate;//更新最近开火时间
                Instantiate (shot, shotspawn.position, shotspawn.rotation); //生成子弹对象
                GetComponent<AudioSource> ().Play ();//播放射击音效
            }
        //}
    }

    // Update is called once per frame
    void FixedUpdate () {
        //if (isLocalPlayer) {
   
            float moveHorizontal = Input.GetAxis ("Horizontal");//获得水平输入值
            float moveVertical = Input.GetAxis ("Vertical");//获得竖直方向上的输入值
            Vector3 movement = new Vector3 (moveHorizontal, 0, moveVertical);//定义一个三维变量用于储存玩家进行的移动操作
            Rigidbody rb = GetComponent<Rigidbody> ();
            if (rb != null) {
                rb.velocity = movement * speed;//设定刚体在某方向上的速度
                rb.position = new Vector3 (Mathf.Clamp (rb.position.x, boundary.xMin, boundary.xMax), 0, Mathf.Clamp (rb.position.z, boundary.zMin, boundary.zMax));//更新位置,并且处在设定范围内
                rb.rotation 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值