Unity百游修炼(2)——Brick_Breaker详细制作全流程

一、项目简介

        Brick Breaker 是一款经典的打砖块游戏,本次案例将使用 Unity 引擎来实现该游戏的核心功能。

游戏画面如下:

Brick_ breaker


二、项目结构概览和前期准备

(1)在 Unity 项目视图中,我们可以看到几个重要的文件夹:

  • Audio存放音频文件,如子弹发射音效背景音乐
  • Picture:理论上存放游戏所需图片资源(比如地板图片材质砖块的图片材质)。
  • Prefab:预制体文件夹,包含 BulletWall 预制体方便在场景中实例化
  • Scenes:场景文件夹,当前仅有 SampleScene。
  • Scripts:脚本文件夹,存放控制游戏逻辑的 C# 脚本,如 Camera_FollowShoot

(2)导入资源操作:先在Project创建文件夹(便于管理不同资源),这里以Audio(音频)文件夹为例子,Import new asset,把需要的音频文件导入进来即可。其他的资源,比如导入图片也是一样

(3)导入预制体:bullet(子弹)和brick(砖块)是需要很多的,而且进行操作基本相同,所以他们作为预制体,便于实例化操作,或者统一操作。(这里我以子弹(球体)为例)直接把创建的球体,拖入到你在Project视图中你创建的Prefab文件夹中,即可出现子弹具有浅蓝色的图标

步骤一:在Hierarchy中创建相应的物体(Wall和Bullet)

步骤二:拖入到Project视图中创建的Prefab文件夹中,即可出现子弹具有浅蓝色的图标


三、核心脚本

(一)Shoot 脚本:该脚本主要负责子弹发射和音频控制。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Shoot : MonoBehaviour
{public GameObject bulletPrefab;public int bullect_Speed=50;public AudioSource bgmAudio;public AudioSource shootAudio;// Start is called before the first frame updatevoid Start(){// 这里可以设置背景音乐循环播放bgmAudio.loop = true;// 开始播放背景音乐bgmAudio.Play();}// Update is called once per framevoid Update(){if(Input.GetMouseButtonDown(0)){shootAudio.Play();GameObject bullect=GameObject.Instantiate(bulletPrefab, transform.position, transform.rotation);Rigidbody rd= bullect.GetComponent<Rigidbody>();rd.velocity = new Vector3(0,0,-1)*bullect_Speed;// 播放发射声音}}
}

(二)Camera_Follow 脚本:该脚本用于控制相机跟随。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Camera_Follow : MonoBehaviour
{public float Move_Speed = 2;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){float f1= Time.deltaTime;float f2= Input.GetAxisRaw("Horizontal");float f3 = Input.GetAxisRaw("Vertical");transform.Translate(new Vector3(f2,f3,0)*f1* Move_Speed);}
}

四、制作步骤详细(核心)

1.导入资源:将音频文件、预制体等资源导入到对应的文件夹中。(在上方已说)

2.创建项目和场景:在场景中添加 基本对象。

步骤一:创建地面,Create——3D Object——Plane(创建完成记得修改名字,便于管理)


步骤二:设置地面大小以及个性化地面

步骤三:设置砖块(Brick)以及个性化砖块(利用复制和步移)

(1)Ctrl和shift先选中若干砖块(便于更快的形成砖墙)

(2)步移(Ctrl+移动):一次移动0.25个单位

(3)搭建好之后,将所有的砖块,统一放到一个空父类里面,便于管理

(4)将导入的图片直接拖放到prefab文件夹的Wall中即可,直接对砖块墙进行个性化。


3.编写脚本:创建 Shoot 和 Camera_Follow 脚本,实现功能。

(1)相机移动的原理:相机的transform组件中有translate方法可以控制位置变化,通过按键wasd会传入一个变化的值[-1,1],再将这个值*一定的倍数,那么就可以形成一个合适的速度,也就可以控制相机移动了。

(2)Shoot脚本实现鼠标左键发射原理:
        (1)检测鼠标左键被按下:

        Input.GetMouseButtonDown(0):会返回一个bool值(true或者false),如果为真,代表被按下。(0代表鼠标左键,1代表鼠标右键)

        (2)按下的瞬间要产生一个子弹:

        GameObject.Instantiate(bulletPrefab, transform.position, transform.rotation);

        Gameobject中有Instantiate()方法可以在指定位置,生成预制体实例

        (3)子弹还有以一定的速度发射到正前方

         我们创建一个物体接受(2)中每次创建的实例,然后选中这个物体的刚体组件,调用其属性velocity(速度),并给他一个速度即可。


4.挂载脚本和设置参数:将脚本挂载到相应的游戏对象上,并设置好脚本中的参数,如预制体引用、音频源等
(1)把脚本拖放到 Main Camera上即可

(2)设置音频

步骤一:在Main Camera中添加Audio source组件,然后在组件中添加导入的 射击音效

步骤二:然后创建一个空物体,和上面一样的操作添加Audio source组件,然后在组件中添加导入的 背景音效

步骤三:然后再选中Main Camera ,进行如图操作即可成功导入音频资源到物体上

步骤四:利用代码,在恰当的时间,启动音频的开关即可。


五、后续扩展

        目前该案例只是一个简单的雏形,后续可以添加砖块对象、碰撞检测、得分系统等功能,进一步完善 Brick Breaker 游戏。希望通过这篇博客,能帮助大家了解使用 Unity 制作 Brick Breaker 游戏的基本流程和核心逻辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23492.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础常见的面试题(易错!!)

面试题一&#xff1a;为什么 Java 不支持多继承 Java 不支持多继承主要是为避免 “菱形继承问题”&#xff08;又称 “钻石问题”&#xff09;&#xff0c;即一个子类从多个父类继承到同名方法或属性时&#xff0c;编译器无法确定该调用哪个父类的成员。同时&#xff0c;多继承…

算法题(77):数组中的第k个最大元素

审题&#xff1a; 需要我们在时间复杂度O(n)的前提下找到数组中第k个最大元素 思路&#xff1a; 方法一&#xff1a;建堆实现 首先写一个dowmset函数&#xff0c;实现对第i个索引位置的向下调整。然后创建build函数&#xff0c;利用dowmset实现向下调整建堆&#xff0c;再根据k…

PCIe学习笔记1:PCIe体系架构——PCIe简介

目录 一、PCIe简介 1.1 串行传输 1.1.1 相对于并行传输的优化 1.1.2 带宽计算 1.1.3 差分信号传输 1.1.4 基于数据包的传输协议 1.2 PCIe的系统拓扑结构 1.2.1 根组件&#xff08;Root Complex&#xff0c;RC&#xff09; 1.2.2 上行端口与下行端口 1.2.3 交换机与桥 …

一天记20个忘10个之4:man

据说&#xff0c;给你一个支点&#xff0c;你就能撬起地球。 那好&#xff0c;今天&#xff0c;我给你一个 man&#xff0c;如果你能完成记20个忘10个的任务&#xff0c;你就真的很 man 了。 零、热身 young manold manmedical man 一、man之复合词 1.1 man复合词 chairm…

SpringBoot之自定义简单的注解和AOP

1.引入依赖 <!-- AOP依赖--> <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.8</version> </dependency>2.自定义一个注解 package com.example.springbootdemo3.an…

利用开源小智AI制作桌宠机器狗

本文主要介绍如何利用开源小智AI制作桌宠机器狗 1 源码下载 首先下载小智源码,下载地址, 下载源码后,使用vsCode打开,需要在vscode上安装esp-idf,安装方式请自己解决 2 源码修改 2.1添加机器狗控制代码 在目录main/iot/things下添加dog.cc文件,内容如下; #include…

深入理解IP子网掩码子网划分{作用} 以及 不同网段之间的ping的原理 以及子网掩码的区域划分

目录 子网掩码详解 子网掩码定义 子网掩码进一步解释 子网掩码的作用 计算总结表 子网掩码计算 子网掩码对应IP数量计算 判断IP是否在同一网段 1. 计算步骤 2. 示例 3. 关键点 总结 不同网段通信原理与Ping流程 1. 同网段通信 2. 跨网段通信 网段计算示例 3. P…

利用python和gpt写一个conda环境可视化管理工具

最近在学习python&#xff0c;由于不同的版本之间的差距较大&#xff0c;如果是用环境变量来配置python的话&#xff0c;会需要来回改&#xff0c;于是请教得知可以用conda来管理&#xff0c;但是conda在管理的时候老是要输入命令&#xff0c;感觉也很烦&#xff0c;于是让gpt帮…

Linux内核,slub分配流程

我们根据上面的流程图&#xff0c;依次看下slub是如何分配的 首先从kmem_cache_cpu中分配&#xff0c;如果没有则从kmem_cache_cpu的partial链表分配&#xff0c;如果还没有则从kmem_cache_node中分配&#xff0c;如果kmem_cache_node中也没有&#xff0c;则需要向伙伴系统申请…

使用Windbg调试目标进程排查C++软件异常的一般步骤与要点分享

目录 1、概述 2、将Windbg附加到已经启动起来的目标进程上&#xff0c;或者用Windbg启动目标程序 2.1、将Windbg附加到已经启动起来的目标进程上 2.2、用Windbg启动目标程序 2.3、Windbg关联到目标进程上会中断下来&#xff0c;输入g命令将该中断跳过去 3、分析实例说明 …

51单片机测试题AI作答测试(DeepSeek Kimi)

单片机测试题 DeepSeek Kimi 单项选择题 &#xff08;10道&#xff09; 6题8题判断有误 6题判断有误 智谱清言6题靠谱&#xff0c;但仔细斟酌&#xff0c;题目出的貌似有问题&#xff0c;详见 下方。 填空题 &#xff08;9道&#xff09; 脉宽调制&#xff08;Pulse …

模版语法vscode

这里注意&#xff1a;<template></template>里面只能写一个根标签&#xff0c;其他在嵌套&#xff1a; <script > export default {data(){return{tthtml:"<a hrefhttps://itbaizhan.com>百战程序员</a>"}} } </script><tem…

洛谷B3637 最长上升子序

B3637 最长上升子序列 - 洛谷 代码区&#xff1a; #include<bits/stdc.h>using namespace std;int main(){int n;cin >> n;int arry[n],dp[n];for(int i0;i<n;i){cin >>arry[i];dp[i]1;}/*在 i 之前可能存在多个 j 满足 arry[j] < arry[i]&#xff0c…

kotlin 知识点 七 泛型的高级特性

对泛型进行实化 泛型实化这个功能对于绝大多数Java 程序员来讲是非常陌生的&#xff0c;因为Java 中完全没有这个概 念。而如果我们想要深刻地理解泛型实化&#xff0c;就要先解释一下Java 的泛型擦除机制才行。 在JDK 1.5之前&#xff0c;Java 是没有泛型功能的&#xff0c;…

Day 49 卡玛笔记

这是基于代码随想录的每日打卡 1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变…

重新求职刷题DAY18

1.513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 输入: root [2,1,3] 输出: 1思路&#xff1a; 这…

因子数个数之和

BDAA实验室的保研机试一道题&#xff0c;有时间限制。 1. 求每个数的因子数再求和&#xff1a;超时 2. 思想转换&#xff1a;统计每个数在 1 到 N 中作为因子出现的次数&#xff0c;从而避免对每个数进行因子分解&#xff0c;将时间复杂度优化到O(N)。&#xff08; 没想到 :( …

『obsidian』obsidian接入DeepSeek模型的完整说明

一、插件概览 &#x1f3c6;Copilot For Obsidian 开发者&#xff1a;loganc yang | 第 5 届 Ob 宝石奖 LLM 类冠军 核心功能&#xff1a;内置多模态大语言模型&#xff0c;支持自定义模型扩展&#xff0c;实现笔记智能交互预置模型&#xff1a;Claude、GPT-4、Gemini 系列特…

基于YOLO11深度学习的苹果叶片病害检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

基于 DeepSeek LLM 本地知识库搭建开源方案(AnythingLLM、Cherry、Ragflow、Dify)认知

写在前面 博文内容涉及 基于 Deepseek LLM 的本地知识库搭建使用 ollama 部署 Deepseek-R1 LLM知识库能力通过 Ragflow、Dify 、AnythingLLM、Cherry 提供理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我站在人潮中央&#xff0c;思考这日日重复的生活。我突然想&#xff0c…