1.Input Actions配置
1.在Project中右键Create一个Input Actions,此处命名为PlayerControl,用于管理Player。
2.双击进入Input Actions,在Action Maps中右键Add Action Map命名为Player,该Action Map用于控制Player的所有行为。
3.在Action中右键Add Action命名为Move,更改右侧Action Properties内Action中的Action Type为Value,Control Type为Vector2,该设置用于获取键盘输入的值存储于二维向量(Vector2)中从而实现Player进行前后左右的移动。
4.右键Move,可以进行按键的绑定,在Input System中已经为我们设置好了,点击Add Up\Down\Left\Right Composite即可,将会获得一个2D Vector的Binding,展开后点击Up,在右侧的Binding Properties内Binding中的Path选择Listen按下“W”键即可将“W”键绑定在Up上,同理将A,S,D绑定在Left,Down,Right上,该操作用于将W,A,S,D作为Player移动的按键。
配置完后如图所示
6.保存后关闭该窗口,在Inspector中将Generate C# Class打钩即可在脚本中将其作为代码调用。
2.代码编写
1.右键Create一个C# Script命名为Move,并挂载到Player的身上(将该脚本拖到创建好的Player物体身上,此处需自行创建Player)。
2.以下代码用于初始化PlayerControl。
public class Move : MonoBehaviour
{
public PlayerControl playerControl;
private void Awake()
{
playerControl = new PlayerControl();
}
private void OnEnable()
{
playerControl.Enable();
}
private void OnDisable()
{
playerControl.Disable();
}
}
3.我们选择使用Rigibody实现Player的移动,所以还需要为Player添加Rigibody组件,在开始时获取它。
Rigidbody rb;
private void Start()
{
rb=GetComponent<Rigidbody>();
}
4.以下代码用于获取Player的移动方向并施加力。
float speed=5f;
//设置移动速度,可根据情况自行调整
Vector2 inputVector;
//用于装载PlayerControl获取的值
Vector3 moveVector;
//用于控制Player的移动方向
private void FixedUpdate()
{
inputVector = playerControl.Player.Move.ReadValue<Vector2>();
//通过WASD为inputVector赋值
moveVector =transform.right * inputVector.x + transform.forward * inputVector.y;
//Player的右边即inputVector.x的正方向,Player的前方为inputVector.y的正方向
rb.AddForce(moveVector.normalized * speed, ForceMode.Force);
//为Player身上的Rigibody组件施加力,第一个参数为施加力的方向,第二个参数为施加力的模式
}
5.保存并运行即可