飞机游戏思路总结

  • Post author:
  • Post category:其他




Player



思路

  • 资源商店下载一个飞机模型

    • Tag:Player

    • 飞机碰到敌机会游戏结束,需要碰撞

      • 检查有无Collider,若无则补充
      • 检查有无刚体,如无则补充

        Rigidbody

        ​,飞机不能自己掉落,勾选

        Is Knematic

    • 模型位置

      • 手动放好
    • 脚本实现思路

      • 方向键控制飞机飞行,Y、X可控制,Z方向不可控制

      • 不能超出一定飞行区域

      • U键发射子弹

        • 准备子弹出现位置:用一个空物体的position来表示

          Instantiate(BulletPre,firePoint.position,firePoint.rotation);

      • 碰到敌机游戏结束



代码部分

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerControl : MonoBehaviour
{
    //子弹预制件,关联创建好的Bullet预制件
    public GameObject BulletPre;
    //子弹发射位置
    private Transform firePoint;
    private void Start()
    {
        firePoint = transform.Find("FirePoint");
    }

    void Update()
    {
        //横向飞行
        //获得水平轴数值
        float horizontal = Input.GetAxis("Horizontal");
        //如果不为0,证明按下了左或方向键
        if (horizontal != 0)
        {
            //移动
            transform.position -= Vector3.left * 10f * Time.deltaTime * horizontal;
            //设定范围,限制飞机不能无限远移动
            if (transform.position.x < -10 || transform.position.x > 10)

            {
                //超出范围,复原位置
                transform.position += Vector3.left * 10f * Time.deltaTime * horizontal;
            }
        }
        //纵向飞行
        //获得垂直数轴
        float vertical = Input.GetAxis("Vertical");
        //如果不为0,证明按下了上或下方向键
        if (vertical != 0)
        {
            //移动
            transform.position += Vector3.up * 10f * Time.deltaTime * vertical;
            //同样设定一个垂直移动的范围
            if (transform.position.y < -10 || transform.position.y > 10)
            {
                transform.position -= Vector3.up * 10f * Time.deltaTime * vertical;
            }
        }
        //按下空格键发射子弹
        if (Input.GetKeyDown(KeyCode.U))
        {
            Instantiate(BulletPre,firePoint.position,firePoint.rotation);
        }

    }
    //如果碰到敌人游戏结束
    private void OnCollisionEnter(Collision collision)
    {


            Debug.Log("游戏结束");
            Time.timeScale = 0;
    
   
    }

}



子弹



思路

  • 准备子弹预制体,调整位置

    • Tag:Bullet
  • 实现子弹运行速度

  • 子弹打到敌机,敌机消失,,子弹也消失,这之间有触发

    • 准备

      Capsule Collider

      ​,勾选触发
  • 实现子弹消失时间



代码部分

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletControl : MonoBehaviour
{
  
    void Start()
    {
        GetComponent<Rigidbody>().velocity = Vector3.forward * 50;
        //10s后自动销毁
        Destroy(gameObject,10f);
        //设定一个速度
     

    }
    private void OnTriggerEnter(Collider other)
    {
        //触发后销毁
        Destroy(gameObject);
    }

}



敌机

  • 资源商店下载一个飞机模型

    • Tag:Enemy

    • 飞机碰到敌机会游戏结束,需要碰撞

      • 检查有无Collider,若无则补充
      • 检查有无刚体,若有,勾选

        Is Knematic

    • 模型位置调整

      • 方向对向Player
    • 脚本实现思路

      • 敌机出现位置

        • 准备一个空物体,名为EnemyPoint,拖动好飞机出现位置,用脚本驱动敌机生成(

          脚本在

          **

          EnemyPoint




          上**)

        敌机出现时机(

        脚本在

        **

        EnemyPoint




        上**)

        • 按照一定时间间隔产生,时间间隔可是在一定区间随机的
      • 触发(

        脚本在

        **

        Enemy

        **



        • 碰到子弹消失



脚本



​**

EnemyPoint

**​

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyPointControl : MonoBehaviour
{
    //关联敌机预制件
    public GameObject EnemyPre;
    //生成敌机计时器
    private float timer = 0;
    //生成敌机CD
    private float CD = 1f;
    void Update()
    {
        //计时器计时
        timer += Time.deltaTime;
        //如果计时器时间到
        if (timer>CD)
        {
            //重置计时器
            timer = 0;
            //重置CD
            CD = Random.Range(0.3f, 3f);
            //随机一个敌机生成位置
            Vector3 pos = transform.position + Vector3.left * Random.Range(-10f, 10f) + Vector3.up * Random.Range(-10f,10f);
            //实例化敌机
            Instantiate(EnemyPre,pos,transform.rotation);
        }
    }
}



**

Enemy

**​

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyControl : MonoBehaviour
{
   

    void Update()
    {

        //移动
        transform.position -= Vector3.forward * 100f * Time.deltaTime;
        //超过摄像机后
        if (transform.position.z<-20)
        {
            //销毁自身
            Destroy(gameObject);
        }
    
    }
    private void OnTriggerEnter(Collider other)
    {
        //如果碰到子弹
        if (other.tag=="Bullet")
        {
            Destroy(gameObject);
        }
    }
}



版权声明:本文为weixin_42117570原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。