本文依然是 Unity3D 的入门篇。作为 Unity3D 的入门读者,你可能希望迅速让你能在游戏中操作你的视角,或者让角色移动。
创建脚本
作为入门篇,可能需要讲一下如何创建脚本。按下图,在 Unity 编辑器中:
- 在
Hierarchy
(层级)中选中主摄像机; - 在
Inspector
(检查器)中选择最后那个Add Component
(添加组件); - 选择
New Script
(新建脚本)输入脚本名称,然后点击Create and Add
(创建并添加)。
接下来,我们需要去 Visual Studio 中编辑这个脚本。
点击菜单中的 Assets
-> Open C# Project
(资源
-> 打开 C# 项目
)。于是可以转到 Visual Studio 中编辑你的脚本文件。
最简代码
在 Visual Studio 中找到我们刚刚创建的 PlayerController
脚本。
其实就是脚本名加上 .cs
后缀。Unity 中 C# 脚本要求文件名必须匹配脚本的类名,因此,不要随便尝试改文件名或类名;就算改了,也要同步更新文件名和类名重新匹配,并重新在 Inspector 中添加新名称的脚本。
在脚本中添加如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Transform transform;
public float moveSpeed = 5f;
public float rotateSpeed = 50f;
void Start()
{
transform = GetComponent<Transform>();
}
void Update()
{
float adValue = Input.GetAxis("Horizontal");
float wsValue = Input.GetAxis("Vertical");
float mValue = Input.GetAxis("Mouse X");
var moveDirection = (Vector3.forward * wsValue) + (Vector3.right * adValue);
transform.Translate(moveDirection.normalized * moveSpeed * Time.deltaTime, Space.Self);
transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime * mValue);
}
}
Start
消息会在游戏对象(也就是前面我们添加了脚本的那个主摄像机)创建后,第一个 Update
消息执行前调用,可以用来做一些初始化。这里,我们拿到我们需要做变换的 Transform
组件(这里的组件也就是 Unity 编辑器的“检查器”中看到的一个个组件)。
而 Update
会尽量在每一帧执行一次,我们在这里执行一些需要每帧更新的逻辑。
我们做了这些事情:
- 定义了公共的两个字段
moveSpeed
和rotateSpeed
表示移动速度和转向速度。 - 通过
Input.GetAxis
获取不同种类的玩家输入。 - 通过玩家的输入计算
Transform
组件的更新差量,然后更新Transform
组件。
关于在脚本当中公开属性以在编辑器中设置的更多细节,可阅读我的另一篇 Unity3D 入门博客:
可以看以下效果(gif 文件有点大,多等等):
本文会经常更新,请阅读原文: https://blog.walterlv.com/post/unity-starter-handle-base-player-input-for-movement.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected]) 。