【unity】快速了解游戏制作流程 |
您所在的位置:网站首页 › 保罗沃克弟弟现身演唱会 › 【unity】快速了解游戏制作流程 |
前言
hi~大家好呀!欢迎来到我的unity学习笔记系列~,本篇我会简单的记录一下游戏流程并且简单上手一个通过九宫格移动到指定位置的小游戏,话不多说,我们直接开始吧~
本篇源自我看B站一位up主的视频所做的笔记,感兴趣的可以去看原视频哦:从无到有,制作一个游戏小样【超简短的独立游戏开发教学Ep.05】_哔哩哔哩_bilibili 上一篇unity相关笔记链接在这里哦: 【unity】将unity编辑c#配置为vscode_柒海啦的博客-CSDN博客_unity用vscode 爱你们哟~
目录 一、unity开发游戏流程 1.了解 2.简单制作demo流程规划 二、简单九宫格游戏demo制作 1.创建项目 2.场景搭建 组装九宫格: 添加移动方形(玩家控制的方块)和目标绿球: 3.编写脚本 定义变量GameObject: 编写方法: 串联逻辑: 打包导出: 一、unity开发游戏流程 1.了解首先,我们要明确我们是在用游戏开发引擎来进行编写游戏,所以,我们需要的也就是好好的利用此引擎的优势。现在我们使用unity进行开发,开发的话就要熟悉它们的用法,针对其用法和流程,我们通过制作一个简单的游戏demo来大致理解如下过程: unity开发游戏流程: 1.导入资源 2.搭建场景 3.配置组件 4.定义变量 5.编写方法 6.串联逻辑 2.简单制作demo流程规划根据如上流程,我们简单规划一下我们要制作的九宫格游戏demo,首先导入资源:我们是使用的3d模式,unity自带的有方块、球形等,所以导入资源这一部就使用自带的即可。 然后搭建场景:我们使用一些方块搭建一个九宫格,控制摄像机位置,防止我们玩家操控的一个方格和要到达起点球。颜色可以做区分。 配置组件:组件信息配置好,在之后的脚本控制需要用到这些组件。 定义变量:如果我们想要存储某些数据的话们就可以定义变量来保存对应的对象。当然是在脚本里面进行控制和存储。 编写方法:即在对应对象下的脚本中进行编写,来控制这一对象的行为逻辑,比如我们这个demo就编写player的wasd逻辑以及碰到球就显示输出信息(控制台)的效果。 串联逻辑:将编写好的方法,类等各种对象的行为属性串联一起,使其组成一个完整的游戏逻辑,游戏得以运行。 如下就是我们即将制作的一个简单demo: 是不是很简单?轻松上手,让我们从零开始制作吧~ 二、简单九宫格游戏demo制作 1.创建项目相信看到这里的同学unity肯定是安装齐全了吧~博主这里使用的是2021稳定版本的,建议2021年以上哦~ 脚本编写使用的是vscode,不知道unity如何配置vscode进行编写的可以看我的上一篇unity学习笔记哦~如果vscode来编写unity没有提示的话可以参看下面这篇博客,希望能对你有所帮助! 解决VSCode无法显示Unity代码提示的真正解决办法_斯幽柏雷科技的博客-CSDN博客_vscode没有unity提示 耐心等待创建完即可。 创建成功后初始画面如上,我们可以将页面布置调成2by3进行方便的操作(看个人喜好,下面仅仅展示个人设置) 也可以通过window->General->Console将控制台调出来,方便我们观察脚本的状态报错信息,打印信息等。 最终效果如下: 左上是显示场景,左下game显示玩家看到的场景,左下Console就是控制台,中间Hierarchy显示游戏场景里所有的对象,以及展示其关系 ,Project即展示所有资源的地方,右边的inspector展示对应对象的各种属性,比如各种组件以及脚本等,可以随时修改。详细的下面会一一介绍。 2.场景搭建 (导入资源 搭建场景 配置组件) 在项目创建完成后,我们终于可以进入实践操作啦~ 重在理解过程 而不是制作游戏哦~ 组装九宫格:首先,我们先把摄像机固定好:(Main Camera对象,创建项目后unity初始两个对象之一) 按照如下图进行设置: 解释:我们确定平面0,0位坐标原点(unity使用左手坐标系,平面xz轴,竖轴y轴)。 Transform组件:Position显示坐标属性 Rotation显示旋转属性 Scale显示大小属性 调整看向平面中心位置0 0 ,离地高度大概3.5。在旋转界面,让其绕着X轴旋转90度(摄像机沿着z轴照向),大小保持不变。 补充查看场景界面快捷键: alt+鼠标左键快速反转,alt+鼠标右键放大和缩小。
如上图快速切换控制。 鼠标右键+wasd 漫游 摄像机位置调整好后,我们创建对象Ground作为初识对象,使其变成一个九宫格,那么我们可以控制其中心位置在0 0(x z),长和宽为3,3,长度设为1,效果如图: 在Hierarchy窗口创建3d对象-cude: 取名为Ground,设置transform组件: 效果:
地面创建好了,我们创建地板来划分好九个位置。地板同样可以使用方形对象,只需厚度缩小即可,根据如下具体的坐标操作即可: 创建3个floor对象,和创建地面类似,在Hierarchy中进行创建: 首先创建第一个: 调整transform属性,位置为右上角,高度为0.5(地面高度是0,其高为1,y+0.5&&y-0.5,所以我们往 上高出0.5,将其地板的0.1高度漏出即可)。 其次为了区分颜色,我们在Project资源文件夹的Assets下创建材质: 编辑名字为black,调整颜色为黑色: 将其拖入对象floor下就可获取其组件: 效果如图: 重复上述操作(ctrl c + ctrl v就可以执行,将其坐标修改为一行即可,材质属性就套用这一个black即可) 效果如下: 选中对象,利用ctrl选中多个,进行复制,粘贴,然后贴满整个表面,表面有九个地板: 效果如图: 然后每个地板对象让其长宽(Scale属性)缩小到0.9使其之间有个分隔即可:下面也就是最终效果图: 最后可以将其floor对象加载到Ground对象下,这样floor就是Ground的子级对象了,会产生联系哦~ 添加移动方形(玩家控制的方块)和目标绿球: 和上面步骤一致,在场景窗口创建方形对象和球对象即可,控制其大小,放在上层,一个放在左下角,一个放在右上角,颜色一个控制为红色,一个为绿色。现在你先不看下面的题解,先自己尝试尝试吧~ 创建另外两种材质:红和绿:(放在资源文件下的材质文件下 -- 好区分)
创建方形(命名为Player为玩家操控对象)和球对象,控制其位置一个左下,一个右上。大小自行控制合适即可: 然后添加材质(玩家红色,目标绿色),最终效果如下: (上述可以将其大小在调整--为了最终观感自行调整哦~) 3.编写脚本(定义变量 编写方法 串联逻辑) 恭喜你场景搭建完成!现在只需要对我们的操作目标方块添加一个组件--脚本,来控制其行为,那么我们这个小demo就算完成啦~ 定义变量GameObject:首先选中Player,在Inspector界面下Add Component添加组件,输入Player(此时实际上就是创建C#脚本,也可以直接在资源文件夹下创建,只不过这一步需要拖拽) 创建完成后,资源文件下会出现此C#脚本,双击打开即可: 双击打开后会出现如下默认画面: 此时脚本正事开始编写: 首先,我们要获取到目标这个对象,C#关于unity中,在场景中的所有对象均为GameObject类型,C#中的变量定义为:权限 + 类型 + 变量名(目前权限了解public和private即可,这里我们使用公共(方便下面的对象在unity中引用))(在类中进行定义) public GameObject Sphere; 定义好后,回到unity操作页面,找到此处: 将我们的目标对象拖拽至此处,方便之后的代码调用此对象的transform信息。 这样就好。 编写方法:我们想要让Player对象能够听从wasd进行上下左右进行移动(Move),并且控制其不能超过边界。控制其移动,说白了也就是控制其transfrom组件的位置信息改变而已,在unity与c#中,transform为一个类,其中提供了Translate(参数)-位移方法: transform组件类:组件对应的脚本下transform就代表本身(或者GameObject) Translate(参数) - 位移方法 参数:Vector3 3维向量 forward Z+1 back Z-1 left X-1 right X+1 position - 组件位置信息 x、y、z 获取坐标 知道了位移方法,首先我们应该要接收玩家所按下的按钮,unity结合C#玩家输入在Input类中,有接收按钮的方法: Input输入类: GetKeyDown(参数) -- 对用户按下按键的行为进行监测: 参数:KeyCode.按键名 返回值:( bool ) 按下 - true 否则 - false 输入后,我们需要判断是否超过边界,那么只需要判断当前组件是否在左上,左下,右上,右下这四个点即可(-1, 1;-1, -1; 1, 1; 1, -1 )。利用transform就可以获取当前组件位置信息进行判断即可。结合上述分析,不难得出代码: private void Move() { if (Input.GetKeyDown(KeyCode.W) && transform.position.z != 1) { // 向前移动 transform.Translate(Vector3.forward); // z轴+1 } if (Input.GetKeyDown(KeyCode.S) && transform.position.z != -1) { // 向后移动 transform.Translate(Vector3.back); // z轴-1 } if (Input.GetKeyDown(KeyCode.A) && transform.position.x != -1) { // 向左移动 transform.Translate(Vector3.left); // x轴-1 } if (Input.GetKeyDown(KeyCode.D) && transform.position.x != 1) { // 向右移动 transform.Translate(Vector3.right); // x轴+1 } }移动代码写出后,我们这里简单利用控制台输出信息检测是否到目标值的方法isSphere(),此方法逻辑简单,就判断两个对象transform位置信息是否一致,一致就打印即可: private void isSphere() { if (transform.position == Sphere.transform.position) print("GameOver!"); // 控制台打印即可 } 串联逻辑:在unity默认给的方法:strat和update实际上就是生命周期方法,一个会在第一帧前调用,一个在每一帧都会调用。因为我们的移动和判断是每一帧都要进行检测的,所以放在update方法中即可,这样这个简单demo的逻辑就串联起来了: void Update() { // 每一帧需要执行的地方 Move(); isSphere(); }综上,运行效果如下:(如果存在检测不出GameOver的出现,将球形位置y修改为0.5即可(bug)) 打包导出:windows按住快捷键ctrl+b就可以打包啦(注意不能打包在工程目录下),此时运行你的简单demo把~ 是不是成就感满满~我们主要了解一个游戏在unity制作的大致流程以及学习了一些简单方法和方式,具体还是要系统的学习的,让我们一起努力呀!加油少年! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |