(一)鼠标与键盘
void Update()
{
if(Input.GetMouseButtonDown(0))
{
Debug.Log("鼠标左键按下");
}
if(Input.GetMouseButton(0))
{
Debug.Log("鼠标左键持续按下");
}
if (Input.GetMouseButtonUp(0))
{
Debug.Log("鼠标左键台起");
}
if (Input.GetKeyDown(KeyCode.A))
{
Debug.Log("A键按下");
}
if (Input.GetKeyUp(KeyCode.A))
{
Debug.Log("A键松开");
}
if (Input.GetKey(KeyCode.A))
{
Debug.Log("长按了A键");
}
}但是请注意,你得激活游戏视图,这些按键才会生效。
在场景视图里是无效果的。
下面是用方向键控制场景中一个对象上下前后移动(移动x,y轴)
float ypos = 0;
float xpos = 0;
// Update is called once per frame
void Update()
{
Vector3 dir;
float oldx = transform.position.x;
float oldy = transform.position.y;
float oldz = transform.position.z;
if (Input.GetKey(KeyCode.W))
{
//up
oldz += 0.001f;
dir = new Vector3(oldx, oldy, oldz);
transform.position = dir;
}
else if (Input.GetKey(KeyCode.S))
{
//down
oldz -= 0.001f;
dir = new Vector3(oldx, oldy, oldz);
transform.position = dir;
}
else if (Input.GetKey(KeyCode.A))
{
//left
oldx -= 0.001f;
dir = new Vector3(oldx, oldy, oldz);
transform.position = dir;
}
else if (Input.GetKey(KeyCode.D))
{
//right
oldx += 0.001f;
dir = new Vector3(oldx, oldy, oldz);
transform.position = dir;
}
}(二)虚拟轴
什么是虚拟轴呢,见下图所示:

那为啥有了键盘,还要弄个虚拟轴呢?
原因是输入设备的兼容性问题。
因为对于游戏的输入设备来说,只有pc才会有键盘,ps就没有键盘。
如果你代码写死了只能按ASDW,那也就框死了你的游戏只能在pc上玩了。
在unity中,虚拟轴的设置见下图所示:

水平和垂直是我们关注比较多的。
默认是键盘的left,right, 备用按键是a和d。
名称Horizontal,在代码中获取虚拟轴时会用到。

这里面,只有“水平”和“垂直”是虚拟轴。
其它的项目都只是虚拟按键。
(三)角色控制
使用角色控制器。
你先要为要控制的对象添加这个组件。
注意其中的偏移量和最小移动距离,要适当调小。否则运行起来可能会有警告,或者物体无法移动。

代码如下:
public class player : MonoBehaviour
{
private CharacterController play;
// Start is called before the first frame update
void Start()
{
play=GetComponent<CharacterController>();
}
// 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);
//Debug.DrawLine(transform.position, dir, Color.red);
//不受重力影响的移动
//play.Move(dir*0.01f);
//受重力影响的移动
play.SimpleMove(dir);
}
}运行后,按WASD键可以移动物体。
如果物体移动过快,可以通过dir*0.01f, 即通过向量乘以一个小的值来减慢速度。