Create empty 修改名称为Player。
在二级目录创建capsule。
在右侧编辑栏可以修改自己想要的形状和位置。
在父游戏对象上,可以附加我们想要的所有逻辑组件;在子视觉,可以添加或替换任何我们想要的视觉效果。总是要将将游戏对象的逻辑与视觉效果分开。
创建脚本后,直接将文件拖至右边。
简单输入管理器
GetKey:只要按住该键,就会一直返回值(移动
GetKeyDown:返回按键被按下时的单帧图像(跳跃
小测试程序
if (Input.GetKey(KeyCode.W)) {
Debug.Log("Pressing!"); //在控制台中打印一条信息
}
else {
Debug.Log("-");
}
在代码中,我们要将输入向量与实际运动分离。
设置为public的话,
设置速度之后可以直接在窗口看到修改,但会将其暴露给整个代码库中的所有其他类。为了减少复杂性,我们需要尽量减少访问。
所以我们将其修改为下面这样:
仍然私有,只能由代码修改,但在编辑器处可以编辑。
查看帧频:
角色移动的代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField] private float moveSpeed = 7f; //虽然是私有的但仍然能在编辑器修改
private void Update() { //在每一帧都运行代码
Vector2 inputVector = new Vector2(0, 0);
if (Input.GetKey(KeyCode.W)) {
inputVector.y = +1;
}
if (Input.GetKey(KeyCode.S)) {
inputVector.y = -1;
}
if (Input.GetKey(KeyCode.A)) {
inputVector.x = -1;
}
if (Input.GetKey(KeyCode.D)) {
inputVector.x = +1;
}
inputVector = inputVector.normalized; //对输入向量进行归一化处理,移动的时候向各个方向都会有一样的速度
Vector3 moveDir = new Vector3 (inputVector.x, 0f, inputVector.y);
transform.position += moveDir * moveSpeed * Time.deltaTime; //正确地使用帧频
Debug.Log(Time.deltaTime);
}
}
写完Ctrl+s保存。
效果如图: