美文网首页
Unity 实战【飞机大战】

Unity 实战【飞机大战】

作者: 程序员阿兵 | 来源:发表于2022-08-16 09:13 被阅读0次

【简介】

  • 该游戏主要的功能是通过键盘控制飞机的移动,飞机发出的子弹和野怪发生碰撞则销毁野怪会产生爆炸效果且销毁野怪。
8dc8b875d37299b83c5044f0e7c2511e.gif

将项目可拆解成以下几个模块:

1.导入游戏素材
2.添加游戏背景天空盒子
3.生成player 玩家模型以及控制脚本
4.生成野怪 模型以及控制脚本
5.玩家发射子弹和野怪发生碰撞逻辑

  • 导入游戏素材

    image.png
    将游戏需要的资源素材导入到assest目录项目,由上面截图可以看到 添加的素材有野怪玩家的预制体,子弹的特效以及天空盒子
  • 添加游戏背景天空盒子

    image.png
    Skybox 下面的素材拖到游戏窗口中 游戏背景就会变成对应的素材效果。
  • 生成player 玩家模型以及控制脚本
    1.将player 模型拖到视野中调整好坐标位置



    2.编写控制player 的脚本挂载到player comment上


    image.png
  • 生成野怪 模型以及控制脚本


    image.png
  • 玩家发射子弹和野怪发生碰撞逻辑
    下面分析一下挂载在player 和野怪身上的脚本

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

public class PlayerLogic : MonoBehaviour
{
    [Tooltip("子弹的预制体")]
    public GameObject bulletPrefab;

    [Tooltip("子弹发射位置")]
    public Transform bulletFolder;

    [Tooltip("")]
    public Transform firePoint;

    [Tooltip("子弹生成的时间间隔")]
    public float fireInterval = 0.1f;

    [Tooltip("player 移动速度")]
    public float moveSpeed = 0.1f;

    // Start is called before the first frame update
    void Start()
    {
        InvokeRepeating("Fire", fireInterval, fireInterval);
    }

    // Update is called once per frame
    void Update()
    {
        float dx = 0;

        if (Input.GetKey(KeyCode.A))
        {
            dx = -moveSpeed;
        }
        if (Input.GetKey(KeyCode.D))
        {
            dx = moveSpeed;
        }
        this.transform.Translate(dx, 0, 0, Space.Self);
    }

    private void Fire()
    {
        // ʵ����һ���ӵ��ڵ�
        GameObject node = Instantiate(bulletPrefab, bulletFolder);

        // ���ӵ��ƶ���������λ�� 
        node.transform.position = firePoint.position;
    }
    
}

上面的playerLogic 主要的逻辑是 在player 下面添加了bulletFolder 子弹动态生成在指定的目录一下 以及bulletPrefab子弹的预制体生成。通过

InvokeRepeating("Fire", fireInterval, fireInterval);

不断生成bulletPrefab 子弹且子弹的朝向位置为firePoint的坐标朝向,一直不断transform 移动到野怪方向。
野怪身上的脚本EnemyLogic

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

public class EnemyLogic : MonoBehaviour
{
    [Tooltip("ǰ���ٶ�")]
    public float zSpeed = 10;

    // �����ٶ�
    float xSpeed = 0;

    // Start is called before the first frame update
    void Start()
    {
        // ÿ��ı�һ�κ����ٶ�
        InvokeRepeating("SnakeMove", 1f, 1f);
    }

    // Update is called once per frame
    void Update()
    {
        float dz = zSpeed * Time.deltaTime;
        float dx = xSpeed * Time.deltaTime;

        this.transform.Translate(dx, 0, dz, Space.Self);
    }

    // ��Ƥ��λ
    void SnakeMove()
    {
        // 4 ���ٶ�ѡ��
        float[] options = { -10, -5, 5, 10 };

        int sel = Random.Range(0, options.Length);

        xSpeed = options[sel];
    }
}

EnemyLogic 主要逻辑是随机再dz 以及dx 以不同的速度去偏移Translate,使得野怪有不同的朝向

子弹和野怪发生碰撞:

image.png

在子弹身上有BulletLogic 脚本

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

public class BulletLogic : MonoBehaviour
{
    public float speed = 1;

    public float lifetime = 3;

    public GameObject explosionEffect;

    // Start is called before the first frame update
    void Start()
    {
        Invoke("SelfDestroy", lifetime);
    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(0, 0, speed * Time.deltaTime, Space.Self);
    }

    private void OnTriggerEnter(Collider other)
    {

        if (!other.name.StartsWith("怪兽")) return;

        Destroy(this.gameObject);

        Destroy(other.gameObject);

        GameObject effectNode = Instantiate(explosionEffect, null);
        effectNode.transform.position = this.transform.position;
    }

    private void SelfDestroy()
    {
        Destroy(this.gameObject);
    }

}

上面的脚本逻辑是 当前如果发生碰撞的other.name 是怪兽则复合碰撞逻辑,就销毁掉子弹和碰撞的怪兽 且添加碰撞💥动效预制体。

以上为所有该小游戏的逻辑

相关文章

  • Unity 实战【飞机大战】

    【简介】 该游戏主要的功能是通过键盘控制飞机的移动,飞机发出的子弹和野怪发生碰撞则销毁野怪会产生爆炸效果且销毁野怪...

  • 飞机大战(项目实战)

    学习编程是一件很枯燥的事情,我们今天就来聊聊代码中比较有意思的地方———项目实战(飞机大战) 首先要想要在Py...

  • 046_wz_hm_项目实战——飞机大战之游戏窗口

    目标 强化面向对象程序设计 体验使用pygame模块进行游戏开发 实战步骤 pygame快速体验 飞机大战实战 p...

  • 飞机大战(项目实战2)

    今天详细的讲一下英雄的出场 和位置,我们先定义需求: 1:游戏启动后,英雄出现在屏幕的中间位置,距离屏幕底部120...

  • 11-实战(飞机大战)

    pip3 安装pygame 安装python3后一般即安装了pip3。 使用pygame创建图形窗口 1.游戏的...

  • 初识canvas-p1-/2020-01-03

    腾讯课堂: 米修在线 - Canvas小白入门到实战(飞机大战): https://imissu.ke.qq.co...

  • Unity 绕不过的飞机大战

    这是今天的成果吧,虽然还是没有全部完成,但是大致的功能已经实现,飞机的移动,限制移动范围,子弹的发射,消灭敌人,敌...

  • Python打飞机(飞机大战)

    敌机和主机 发子弹 连发子弹 飞机大战(加音乐代码) 飞机大战代码: 精灵组 飞机大战敌机 飞机大战背景 上下左右...

  • 飞机大战

    飞机大战 导入模块的三种方式 import pygamefrom 模块名 import *(代表所有)from 模...

  • 飞机大战

    import pygame import time pygame.init() #1. 创建窗口 screen =...

网友评论

      本文标题:Unity 实战【飞机大战】

      本文链接:https://www.haomeiwen.com/subject/risrgrtx.html