- Unity 教程
- Unity - 首页
- Unity - 简介
- Unity - 安装和设置
- Unity - 创建精灵
- Unity - 修改精灵
- 变换和对象父子关系
- Unity - 内部资源
- Unity - 保存和加载场景
- Unity - 基础移动脚本
- Unity - 理解碰撞
- Unity - 刚体和物理
- Unity - 自定义碰撞边界
- 理解预制体和实例化
- Unity - 游戏对象销毁
- Unity - 协程
- Unity - 控制台
- Unity - 音频入门
- Unity - UI入门
- Unity - 按钮
- Unity - 文本元素
- Unity - 滑块
- Unity - 材质和着色器
- Unity - 粒子系统
- Unity - 使用资源商店
- Unity 有用资源
- Unity - 快速指南
- Unity - 有用资源
- Unity - 讨论
Unity - 基础移动脚本
在本课中,我们将编写代码,使游戏对象根据用户的输入上下左右移动。这应该有助于我们更容易地理解 Unity 脚本的工作流程。
记住,每个 GameObject 至少有一个组件——Transform。特别之处在于,gameObject 的 Transform 也显示为 Unity 脚本端的变量,因此我们可以通过代码修改它。但这并不局限于 Transform;Unity 中的所有组件都具有属性,这些属性可以通过脚本中的变量访问。
让我们从我们的移动脚本开始。创建一个新的脚本,并将其命名为“Movement”。
现在,打开脚本,你应该会看到与上一课中相同的內容。
让我们创建一个名为speed的公共浮点型变量。在 Unity 中将变量设为public具有很大的优势——
该变量显示为编辑器内的可修改字段,因此您无需手动调整代码中的值。
public class Movement : MonoBehaviour { public float speed; }
如果我们在不修改其他方法的情况下保存此脚本,它应该会在 Unity 中编译。
(你可以通过右下角的图标看到它何时正在编译。)
接下来,将脚本从 Assets 拖放到 GameObject 上。如果操作正确,你应该在 GameObject 的属性中看到以下内容——
由于速度值是可以调整的,并且不需要一直更改代码,我们可以使用 update() 方法而不是 start() 方法。
现在让我们考虑 Update 方法的目标——
检查用户输入。
如果有用户输入,读取输入方向。
根据对象的速度和方向更改对象变换的位置值。为此,我们将添加以下代码——
void Update() { float h = Input.GetAxisRaw(“Horizontal”); float v = Input.GetAxisRaw(“Vertical”); gameObject.transform.position = new Vector2 (transform.position.x + (h * speed), transform.position.y + (v * speed));
让我们简要讨论一下这段代码。
首先,我们创建一个名为h(代表水平)的浮点型变量,其值由Input.GetAxisRaw方法给出。此方法根据玩家按下上/下/左/右箭头键返回 -1、0 或 1。
Input 类负责以按键、鼠标输入、控制器输入等形式获取用户的输入。GetAxisRaw 方法稍微难以理解,稍后我们将详细介绍。
接下来,我们正在更新gameObject 的位置到一个新位置,该位置通过创建一个新的Vector2来定义。Vector2 接受 2 个参数,分别是它的x 和 y值。对于 x 值,我们提供对象当前位置及其速度的总和,有效地在按下按键的每一帧都向其位置添加一定数量。
保存此脚本并返回 Unity。Unity 成功编译后会自动更新所有脚本,因此您无需反复重新附加脚本。
现在你完成了,将 GameObject 属性中的speed值更改为例如 0.8。这很重要,因为较高的值会使玩家移动过快。
现在,点击播放并查看你的第一个小游戏!
尝试按下箭头键并四处移动。要停止游戏,只需再次点击播放。你甚至可以实时调整速度,因此不必一直停止和启动它。
在下一课中,我们将学习刚体和碰撞。