(一)鼠标与键盘
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, 即通过向量乘以一个小的值来减慢速度。

