目录
Ruby's Adventure:2D 初学者 - Unity Learn
可以让我们:
使用到的资源保存地址
2D Beginner: Tutorial Resources | 教程 | Unity Asset Store
下载并在Unity中导入即可。
下面就开始正式的学习。
进入官方第一节教程,并下载玩家主角Ruby的图片,下载的格式是PNG。由于我们的项目是2D的,需要将Texture Type改成Sprite(精灵),才能被Unity所使用。
新建一个场景命名为MainScene,并将修改类型后的Ruby图片拖入MainScene场景中。
刚刚做的一个简单的导入图片的过程,其实就是一次使用2D素材的过程,Unity中2的素材的使用通常要经过以下过程
PNG(2D图片格式) ----> Sprite ----> GameObject
Ruby这个游戏对象除了初始的Transform变换组件,还会有一个Sprite Renderer组件。
我写了另一篇介绍其属性的博客:【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer
我们现在通过导入一个PNG转换成sprite后,得到的Ruby是一个静态精灵,教程中老师还介绍了动态精灵,这个后续再了解。
Untiy移动的话应该是基于Transform组件进行操作的,这时候就需要挂一个移动脚本了!再在脚本中给创建的Ruby添加运动。
给刚刚创建的游戏对象Ruby新建一个RubyController脚本。
先尝试挂一个在x轴自动移动的脚本,看看情况。
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class RubyController : MonoBehaviour
- {
-
- // 每帧都会执行一次Update函数
- void Update()
- {
- //transform获取当前游戏对象的transform组件的值
- Vector2 position = transform.position;
- position.x += 0.1f;
- //再赋值给游戏对象的transform
- transform.position = position;
- }
- }
设置游戏对象时,经常会有“设置对象位置为x轴XX个单位,y轴XX个单位”,Unity中并没有规定具体多长是1米/1厘米,根据需要自己规定就行。
本次创建的游戏将通过键盘输入来控制玩家移动,此时就需要使用到Unity的输入系统。输入系统包括输入设置和输入代码。
输入设置就是Unity中定义键盘的按键的作用,可以由Edit -> Project Settings -> Input Manager查看默认设置。
关于Input Manager官方介绍文档:Input Manager - Unity 手册
对于Input Manager和Input类我进行了简单的学习总结:【Unity入门计划】基本概念(7)-Input Manager&Input类
这里不再是跟之前那样,让Ruby逐帧自己移动了,现在通过调用API的方式实现键盘输入控制Ruby的移动。
需要修改脚本中的Update函数:
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class RubyController : MonoBehaviour
- {
-
- // 每帧都会执行一次Update函数
- void Update()
- {
- //声明新变量
- //获取水平轴并储存在新变量中
- float horizontal = Input.GetAxis("Horizontal");
- Debug.Log(horizontal);
- Vector2 position = transform.position;
- //对x轴移动距离做了细微的更改
- position.x += horizontal * 0.1f;
- transform.position = position;
- }
- }
这里实现了:
对于y轴也添加相应操作:
- void Update()
- {
- //声明新变量
- //获取水平轴并储存在新变量中
- float horizontal = Input.GetAxis("Horizontal");
-
- //获取垂直轴
- float vertical = Input.GetAxis("Vertical");
- Vector2 position = transform.position;
- //对x轴移动距离做了细微的更改
- position.x += horizontal * 0.1f;
- //对y轴也做相应更改
- position.y += vertical * 0.1f;
- transform.position = position;
- }
可以通过调整是否开启垂直同步以及限制帧率的方式提升/降低游戏帧率FPS。
关于帧率设置可以参考以下文章:
Unity3d 帧率设置 及在游戏执行时显示帧率 - lcchuguo - 博客园 (cnblogs.com)
目前,由于是在Update()函数中更新的Ruby的位置信息,因此当前Ruby的移动速度是单位/帧,如何让他以单位/秒的速度运行呢?
需要将速度再乘以Unity渲染一帧所需时间来更改移动速度,例如:如果当前Unity以每秒10帧速度渲染,则每帧耗时0.1秒,乘以0.1秒后移动速度就成了单位/秒。
Unity中Time.deltaTime这个API能帮助我们获得从最后一帧到当前帧(只读)的间隔时间,其中deltaTime是Time中的一个变量,表示增量时间。
加上后:
- void Update()
- {
- //声明新变量
- //获取水平轴并储存在新变量中
- float horizontal = Input.GetAxis("Horizontal");
-
- //获取垂直轴
- float vertical = Input.GetAxis("Vertical");
- Vector2 position = transform.position;
- //对x轴移动距离做了细微的更改
- position.x += horizontal * 0.1f*Time.deltaTime;
- //对y轴也做相应更改
- position.y += vertical * 0.1f*Time.deltaTime;
- transform.position = position;
- }
运行游戏,会发现Ruby的移动速度变慢了!因为我们把速度改成了单位/秒,也就是说当前我们每秒仅移动了0.1个单位,这当然会很慢。如果将0.1f改成3.f,移动速度将会快很多。