Unity 2D 游戏学习笔记(3)

        通过2DGameKit大概了解了2D游戏制作后,我们通过官方教程“Ruby's Adventure”来从无到有的自己实现2D游戏的各种功能。

官方教程网址:Ruby's Adventure:2D 初学者 - Unity Learn

一、创建主角

        首先按照教程指示,创建一个2D项目,将资源包下载后导入,并在官方教程中下载ruby的图像,存入项目文件Art-->Sprites中,用于创建主角。

        创建一个新Scene,按ctrl+s保存到Scenes文件夹中,将原有多余的SampleScene删除。

         如图,将Texture Type设置为精灵Sprite;Pivot设置为Custom,让角色的参照点在下方中间;然后我们点击Sprite Editor进入编辑界面。

         如图,红圈内的篮圈为角色的轴心,绿色为碰撞面积,因为要制作伪3D的效果,所以碰撞范围设置为脚底这种效果。设置完后点击右上方的Apply应用。

        随后我们把主角Ruby拖到Scene中。现在Ruby只是一个不能动的精灵,让我们编写一个脚本让他移动。

        在根目录Assets下创建一个新文件夹Scripts用来存放各种脚本,点击Scene中的Ruby,在Inspector中点击下方的Add Component添加Script脚本,命名为RubyControl,默认在根目录Assets下,把他移动至Scripts文件夹中。

        打开RubyControl脚本进行编辑。

         Start为游戏运行时就需要执行一次的代码,Update内为游戏运行每一帧时需要运行一次的代码。

        注意,类名一定要和脚本名一致,否则导入时会闪退出错。

        代码和注释如图

 

      

什么是 Vector2 变量?

        变量名称之前的第一个单词 (Vector2) 是变量的类型。类型告诉计算机你要存储什么类型的数据,以便此数据可以在内存中获得适当的空间大小。Vector2 是存储两个数字的数据类型。请注意,在 Inspector 中,Transform 值使用 x 表示水平位置,使用 y 表示垂直位置,使用 z 表示深度。这 3 个数值组成一个坐标。由于此游戏是 2D 游戏,你无需存储 z 轴位置,因此你可以在此处使用 Vector2 来仅存储 x 和 y 位置。

        在带小数点的数字之后,加上一个“f”。这样做就会告诉计算机该数字是浮点数,以便计算机可以正确存储该数字。

        此时运行游戏,会发现ruby一下子跑出视线外了,这是因为电脑运行的帧数过快,这明显不符合游戏的需要,我们来进行更改。

二、角色控制器和键盘输入

        Edit-->Project Settings中找到Input Manager,点开Axes下拉菜单,再点开Horizontal

调用 GetAxis 函数

        GetAxis 与你在上一教程中遇到的 Start 和 Update 一样也是函数。 此处的区别在于你无需编写函数内部的代码,因为 Unity 工程师已经为你完成此工作。你在脚本中书写此类函数的名称时,就是在调用函数。

提供参数

        圆括号之间的单词被称为参数。向函数提供此信息的目的是指定函数应执行的操作。在此示例中,你希望获得一个轴的值,所以告诉了函数这个轴的名称。你需要将名称放在引号之间,以便编译器知道这是一个单词,而不是一个特殊关键字(例如变量名或类型)。

经过这些更改,Ruby 的移动方式将如下所述:

  • 如果你按向左键,则轴将为 -1(即移动距离为 position.x + -0.1f;)。Ruby 将向左移动 -0.1。

  • 如果你按向右键,则轴将为 1。Ruby 将向右移动 0.1。

  • 如果没有按下任何键,则轴将为 0 且 Ruby 不会移动(0.1 * 0 等于 0)。

        这时我们已经可以控制Ruby进行左右移动,按照同样的方法实现上下的移动。

        因为当前Ruby的移动有帧数的影响在内,所以它的移动速度可能忽快忽慢,我们试一试当帧数降低到10,Ruby会受到什么影响。按照官方教程在Start中添加以下代码,添加后,会将帧数控制在10帧。

百度翻译:

Application:应用程序,targetFrameRate:目标帧率,QualitySettings:质量设置

        这时运行游戏,会发现Ruby又卡又慢,说明它的速度的确收到了帧数的影响。那么应该如何解决这个问题呢?

以单位/秒来限制Ruby的速度

        如图,添加以下代码

        红线所示代码,调用返回的是渲染一帧所用的时间。如果游戏以每秒 10 帧的速度运行,则每帧耗时 0.1 秒。如果游戏以每秒 60 帧的速度运行,则每帧耗时 0.017 秒。如果将移动速度乘以该时间值,则移动速度将以秒表示。这样Ruby的移动速度就固定了。 

        如此,Ruby现在的速度为0.1f/s,我们让他移动的快一些,更改为3f/s。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百年bd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值