PS:公司终于给我派任务了,最近几天都没学Unity🤧。
目录
📕一、键盘鼠标的监控
📕二、角色控制器的实现方式
📕三、虚拟轴
3.1 概念
3.2 查看Unit的的虚拟轴设置
📕四、角色控制器实现
1.第一种
2. 第二种
一、键盘鼠标的监控
小编最近在玩大表哥2,通过 W、A、S、D 来移动亚瑟,鼠标左键来不吃牛肉
我们都知道玩家通过按键鼠标来控制游戏人物做出相应的行为动作,那在Unity引擎里是怎么知道玩家是如何操作的呢?
首先对于一个按键来说操作分为三种:按下了按键、 持续按住按键 、抬起按键。像亚瑟的移动按下A就会往左走;当亚瑟用弓箭打猎时持续按住鼠标蓄力;抬起射箭,这就对应了按键的三种操作。废话不多说我们来实操:
创建一个空对象Key,创建脚本KeyTest挂载在Key上,打开KeyTest脚本:
Unity对键盘鼠标监控的API我们在Update函数中编写
public class KeyTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//鼠标的点击
//按下鼠标 0左键 1右键 2滚轮
if (Input.GetMouseButtonDown(0))
{
Debug.Log("按下了鼠标左键");
}
//是否持续按下鼠标
if (Input.GetMouseButton(0))
{
Debug.Log("持续按下鼠标左键");
}
//抬起鼠标
if (Input.GetMouseButtonUp(0))
{
Debug.Log("抬起了鼠标左键");
}
//按下键盘按键
if (Input.GetKeyDown(KeyCode.A)) //KeyCode.A 和 "a" 作用相同
{
Debug.Log("按下了A");
}
//持续按下按键
if (Input.GetKey(KeyCode.A))
{
Debug.Log("持续按下了A");
}
//抬起键盘按键
if (Input.GetKeyUp(KeyCode.A))
{
Debug.Log("抬起键盘按键A");
}
}
}
写好后我们运行在控制台打印输出看一下:
注:操作时一定要在游戏场景下操作,这样才会被Unity监控
分别执行按下、持续按住、抬起三种操作,可以看到结果都在控制台中输出了。
是不是非常简单
二、角色控制器的实现方式
目前小编知道的角色控制器实现方式有三种:
- 应用商店的角色控制系统
- Unity自己的角色控制器
- 通过物理系统去做角色控制器
本篇介绍的是第二种Unity自己的角色控制器,实现起来也较为简单。
三、虚拟轴
3.1 概念
在实现角色控制器之前先介绍一个概念:虚拟轴,可以看做游戏手柄的摇杆。
这是来自飞羽老师书上关于虚拟轴概念的截图:
比如左和右对应键盘的A和D就可以看做一个虚拟轴。
Unity角色控制器的实现是通过获取虚拟轴创建方向向量加上移动来实现的
3.2 查看Unit的的虚拟轴设置
编辑 ——> 项目设置 ——> 输入管理器,在轴线里边查看:
Horizontal,我们获取水平轴的时候就是通过名称来获取,a和d就是代表对应键盘的键位,我们也可以自己编辑改变键位。
四、角色控制器实现
1.第一种
开始动手实现角色移动:
- 新建两个3D对象,一个平面一个胶囊,平面代表地面胶囊代表我们控制的角色。
- 给胶囊添加组件Rigidbody、Character Controller
- 新建一个脚本命名为Move Control挂载到胶囊上,打开编辑脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveControl : MonoBehaviour
{
//获取角色控制组件
private CharacterController player;
void Start()
{
player = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
//获取水平轴 左右方向
float horizontal = Input.GetAxis("Horizontal");
//获取垂直轴 前后方向
float vertical = Input.GetAxis("Vertical");
//创建成一个方向向量,第二个参数数值为 0 防止原地起飞
Vector3 dir = new Vector3(horizontal, 0, vertical);
//player.Move(dir); //不受重力影响
player.SimpleMove(dir*10); //受重力影响
}
}
方向向量用来控制角色移动方向,移动在Unity的方法有两个,这里我们用受重力影响的SimpleMove方法。dir*10
我们来看一下效果:可以看到在重力组件的作用下我们控制闪电侠跳崖了😃
2. 第二种
下面这个脚本没有用到 Character Controller组件,挂载在胶囊上可以直接用
public class PlayerControl : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//水平轴
float horizontal = Input.GetAxis("Horizontal");
//垂直轴
float vertical = Input.GetAxis("Vertical");
//创建成一个方向向量
Vector3 dir = new Vector3(horizontal, 0, vertical);
//朝方向向量移动
transform.Translate(dir * 3 * Time.deltaTime);
//*3依旧是速度*3,* Time.deltaTime把按帧计算转换成按秒计算
}
}