【unity】快速了解游戏制作流程-制作九宫格简单游戏demo

本文详细介绍使用Unity引擎开发一个简单的九宫格游戏的过程。包括游戏开发流程、场景搭建、脚本编写等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

        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制作的大致流程以及学习了一些简单方法和方式,具体还是要系统的学习的,让我们一起努力呀!加油少年!

<think>嗯,用户之前问过网络游戏服务器开发的相关知识,现在他们想知道如何利用现有开源框架开发MMORPG服务端。我需要先回顾之前的回答,确保这次的内容不重复但能衔接上。 用户可能已经有了一些基础,现在更关注具体的实现步骤和工具选择。他们可能是一名开发者或者学生,想实际动手做一个项目,所以需要实用、步骤清晰的指导。 我应该先列出常用的开源框架,比如Pomelo、KBEngine、Skynet、Hazelcast等,说明它们的优缺点和适用场景。然后分步骤讲解开发流程,从需求分析到部署维护,每个步骤需要做什么,使用哪些工具。 还要考虑用户可能遇到的问题,比如网络同步、数据存储、高并发处理,以及如何用这些框架解决。比如状态同步和帧同步的选择,数据库的分库分表,缓存策略等。 另外,用户可能对学习路径和资源感兴趣,可以推荐一些教程、文档和社区,帮助他们快速上手。例如Pomelo的官方文档,KBEngine的案例,以及如何参与开源项目。 需要确保内容结构清晰,分点说明,让读者容易跟进。可能还需要对比不同框架,帮助他们根据项目需求做出选择。最后,强调实践和社区支持的重要性,鼓励他们动手实验和参与讨论。</think>开发一款MMORPG网络游戏服务端利用现有开源框架可以大幅降低技术门槛,以下是具体实现路径和技术方案: --- ### 一、开源框架选型(主流方案对比) | 框架名称 | 语言 | 特点 | 适用场景 | 代表游戏 | |--| | **Pomelo** | Node.js | 分布式架构/轻量级/易扩展 | 中小型MMO/回合制 | 网易《卡牌三国》 | | **KBEngine** | C++/Python| 完整ECS架构/实体管理强大 | 大型MMORPG | 开源社区多个项目 | | **Skynet** | C/Lua | Actor模型/热更新方便 | 高实时性游戏 | 《梦幻西游》 | | **Hazelcast** | Java | 分布式内存计算/集群管理 | 全球同服架构 | 部分欧美MMO | | **ET框架** | C# | Unity生态/ECS设计 | Unity项目快速开发 | 独立开发者项目 | --- ### 二、开发流程关键步骤(以KBEngine为例) #### 1. 环境搭建 ```bash # 安装KBEngine服务端 git clone https://github.com/kbengine/kbengine python install.py --userpath=/game_server # 配置数据库(默认MySQL) vim kbe/res/server/kbengine.xml ``` #### 2. 核心模块开发 - **实体定义**:通过XML定义NPC/Player实体属性 ```xml <Entity> <Player> <Property name="HP" type="UINT32" default="100"/> <CellAppScript method="onAttack" file="scripts/combat.py"/> </Player> </Entity> ``` - **网络同步**:使用AOI(Area of Interest)九宫格算法 ```python # 在cellapp/scripts/space.py中实现 def onEnterView(self, entity, rangeX, rangeY): self.client.onStream("ENTITY_ENTER", entity.getViewData()) ``` - **战斗系统**:状态同步实现示例 ```python def castSkill(self, skillID, targetID): if self.checkCD(skillID) and self.checkMP(skillID): damage = SkillTable[skillID].baseDmg + self.ATK self.entities[targetID].takeDamage(damage) ``` #### 3. 数据库集成 ```python # 使用kbe的Baseapp数据库接口 KBEngine.executeRawDatabaseCommand( "INSERT INTO players (name, level) VALUES (%s, %s)", (self.name, self.level)) ``` #### 4. 负载测试工具 ```bash # 使用kbe的bots压力测试 ./kbengine/bin/client/bots\ --account=10000-20000\ --server=127.0.0.1 ``` --- ### 三、关键技术实现方案 #### 1. 网络同步优化 - **分层同步策略**: - 核心角色:50ms状态同步 - 次要NPC:200ms差值同步 - 环境对象:客户端预测+服务器校验 #### 2. 分布式架构设计 ```mermaid graph TD LoginServer -->|Token验证| Gateway Gateway -->|负载均衡| CellApp1 Gateway -->|负载均衡| CellApp2 CellApp -->|实体迁移| BaseApp BaseApp -->|数据持久化| DB ``` #### 3. 防作弊机制 - **三步验证法**: 1. 客户端输入预处理 2. 服务器逻辑帧校验 3. 历史轨迹回溯比对 --- ### 四、推荐技术栈组合 1. **快速开发方案**: - **框架**:ET框架 + Unity - **数据库**:MongoDB - **网络协议**:Google Protobuf + TCP 2. **高性能方案**: - **框架**:Skynet + C++逻辑层 - **数据库**:MySQL分库 + Redis缓存 - **网络协议**:KCP + 自定义二进制协议 --- ### 五、开发资源推荐 1. **学习路径**: - 第一阶段:完成框架官方Demo(如KBEngine的《太空大战》) - 第二阶段:修改实体逻辑实现自定义玩法 - 第三阶段:研究分布式部署和性能调优 2. **必备工具**: - **Wireshark**:网络协议分析 - **GProf**:C++性能分析 - **Elastic Stack**:日志监控系统 3. **进阶资料**: -游戏服务器架构与优化》(重点看第5章MMO设计) - GDC演讲《魔兽世界》服务器架构解析 - 网易游戏学院公开课《MMO同步技术演进》 --- ### 六、常见问题解决方案 1. **卡顿问题**: - 使用jitter buffer处理网络波动 - 采用Dead Reckoning算法进行客户端预测 2. **数据一致性**: - 通过版本号实现最终一致性 - 关键操作使用分布式锁(Redis Redlock) 3. **热更新方案**: ```lua -- Skynet的热更新示例 skynet.hotfix("module.ai", function() local new_code = loadfile("ai_v2.lua") return new_code() end) ``` --- 通过合理选择框架+分阶段开发,一个3人团队可在3-6个月完成基础MMORPG服务端开发。建议先从200人同时在线的规模起步,逐步优化扩展至万人同服。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值