Unity Pong 克隆教程:一步步构建经典游戏
在开始之前,您可以在itch.io上查看游戏
核心要点
- 在Unity中构建Pong克隆包含几个关键步骤,包括设置游戏环境、添加玩家输入、管理球和边界碰撞、实现敌人AI、生成球以及添加基本文本说明。
- 游戏环境设置包括在Unity中创建一个新的2D项目,将游戏屏幕的纵横比设置为4:3,并为脚本、精灵、预制件和材质创建文件夹。需要下载精灵并将其添加到“精灵”文件夹中,并调整每像素单位以确保清晰干净的外观。
- 玩家输入通过名为“PlayerController”的C#脚本添加,该脚本设置玩家的速度和玩家移动的范围。将Box Collider 2D添加到Player游戏对象以处理碰撞。
- 球和边界碰撞通过创建名为“Bounce”的Physics2D材质来管理,其弹性设置为1,摩擦力设置为0。将Circle Collider 2D和Rigidbody 2D添加到Ball游戏对象以管理其与环境的交互。
- 敌人AI通过名为“EnemyController”的C#脚本实现,该脚本设置敌人的速度并管理其响应球的位置而进行的移动。敌人的范围也在此脚本中设置。
- 球的生成通过创建“BallSpawner”游戏对象和名为“BallSpawnerController”的C#脚本进行。该脚本检查是否存在球,如果不存在,则创建一个新的球。
Pong游戏分析
Pong是最早的电子游戏之一,也是第一个成功的商业游戏。当Pong首次创建时,开发人员很可能在代码逻辑方面遇到了困难,但是,如今,您可以通过一个方法调用、碰撞器和精灵来制作一个简单的双人Pong游戏。一旦决定制作单人Pong游戏,Pong的制作难度就会增加。在本教程中,我们将创建Pong的基本游戏玩法,并分解一个非常简单的AI替代方案,该方案仍然增加了游戏价值。
我们必须问,Pong游戏玩法的核心要素是什么?以下是对此问题的答案列表:
- 玩家输入 – 我们希望玩家能够上下移动他们的球拍以便击球。
- 球碰撞 – 当球击中球拍或边界时,不允许其损失任何速度。
- 边界碰撞 – 球必须能够从屏幕的顶部和底部反弹,这样它就不会离开游戏区域。
- 敌人AI – 如果敌人坐在屏幕的另一端并且不移动,则游戏的可玩性几乎为零。
- 生成球 – 当球击中球拍后面的边界之一时,我们需要它重新生成,以便我们可以继续游戏。
- 球到球拍的碰撞区域检测 – 这允许球以独特的角度从球拍上反弹,以便我们能够在用球拍击球时更好地瞄准球。
有了这个列表,我们就可以开始编写游戏程序了。
请注意,任何与游戏对象的位置、旋转、缩放等相关的数字都是相对的,可能需要根据您的特定设置进行更改。
设置游戏
既然我们已经分析了Pong的基本原理,我们就可以开始设置游戏了。打开Unity并创建一个新的2D项目。编辑器打开后,将游戏屏幕的纵横比设置为4:3。我们使用4:3是因为这是最常见的屏幕比例之一,并且是最接近标准比例的比例之一。在“资源”面板中,创建四个名为“脚本”、“精灵”、“预制件”和“材质”的文件夹。这些文件夹将用于保存我们所有的游戏资源。
下载游戏所需图像并将其添加到“精灵”文件夹(可以通过拖放操作完成)。我们刚刚添加的图像将是游戏中使用的精灵(交互式游戏对象)。
我们需要更改精灵的每像素单位,以便它们符合标准。我通常使用每像素单位64个像素,因为这会使大多数精灵看起来清晰干净,并保持其相对大小。您可以将每像素单位视为在Unity编辑器中分配在1×1空间中的像素密度。
让我们将正方形的每像素单位设置为64,并将圆形的每像素单位设置为128。我们可以继续将这三个图像添加到层次结构面板中。
现在我们需要为每个资源命名并设置它们的初始属性和标签。您可以将蓝色块命名为“Player”,并将玩家的x位置设置为6,其x缩放比例设置为0.2。
我们需要创建一个标签来将球拍游戏对象与其他游戏对象分开。从广义上讲,您可以将标签视为游戏对象的类别。单击“未标记”(位于玩家名称下)并选择“添加标签”。创建一个名为“Paddle”的新标签,重新选择玩家游戏对象并将它的标签设置为Paddle。
将红色块命名为“Enemy”。将敌人的x位置设置为-6,其x缩放比例设置为0.2。使敌人游戏对象的标签为Paddle。
将灰色圆圈命名为“Ball”,然后创建一个名为“Ball”的新标签。确保将球游戏对象的标签设置为Ball。
(以下步骤,由于篇幅限制,仅提供步骤概述和关键代码片段,详细代码请参考原文或自行补充)
添加玩家输入
创建一个名为“PlayerController”的C#脚本,并添加以下代码(控制玩家球拍的移动):
public float speed = 10; public float topBound = 4.5F; public float bottomBound = -4.5F; void FixedUpdate () { float movementSpeedY = speed * Input.GetAxis("Vertical") * Time.deltaTime; transform.Translate(0, movementSpeedY, 0); // ... (边界限制代码) }
球碰撞
创建一个名为“Bounce”的Physics2D材质,设置其弹性为1,摩擦力为0。将Circle Collider 2D和Rigidbody 2D添加到Ball游戏对象,并将材质设置为“Bounce”。
边界碰撞
创建四个空游戏对象作为边界(LeftBound, RightBound, TopBound, BottomBound),添加Box Collider 2D并设置其属性。创建一个名为“BoundController”的脚本,用于检测球与边界碰撞并销毁球。
敌人AI
创建一个名为“EnemyController”的脚本,控制敌人的球拍移动,使其跟随球。
public float speed = 1.75F; Transform ball; Rigidbody2D ballRig2D; void FixedUpdate () { ball = GameObject.FindGameObjectWithTag("Ball").transform; ballRig2D = ball.GetComponent<Rigidbody2D>(); // ... (根据球的位置移动敌人的代码) }
生成球
创建一个空游戏对象“BallSpawner”,并创建一个名为“BallSpawnerController”的脚本,用于在球消失时重新生成球。
添加基本文本
创建一个UI Text对象,显示游戏说明。
结论
您现在已经在Unity2D中成功创建了一个基本的单人Pong克隆。为了获得更多练习,尝试思考改进游戏的方法——例如,为球添加加速度(击球次数越多,球的速度越快)、为球拍添加惯性、通过增加敌人的速度来添加难度级别等等。
(FAQ部分由于篇幅过长,此处省略。原文已包含详细的FAQ解答)
以上是复古革命:建立一个统一的乒乓球的详细内容。更多信息请关注PHP中文网其他相关文章!

与这些顶级开发人员新闻通讯有关最新技术趋势的了解! 这个精选的清单为每个人提供了一些东西,从AI爱好者到经验丰富的后端和前端开发人员。 选择您的收藏夹并节省时间搜索REL

该教程通过使用AWS服务来指导您通过构建无服务器图像处理管道。 我们将创建一个部署在ECS Fargate群集上的next.js前端,与API网关,Lambda函数,S3桶和DynamoDB进行交互。 Th

该试点程序是CNCF(云本机计算基础),安培计算,Equinix金属和驱动的合作,简化了CNCF GitHub项目的ARM64 CI/CD。 该计划解决了安全问题和绩效


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

记事本++7.3.1
好用且免费的代码编辑器