输入管理器:虚拟轴
-
虚拟轴的定义
编辑(edit)->Project Settings ->输入
虚拟轴如下:
Gravity为按键由按下到复位时数值的回复速度;
Snap选中为当两个按键同时按下时,视为复位状态更改Size可以调整虚拟轴的个数,可增加自定义的虚拟轴(比如说Z拿东西啊等等);注意:虚拟轴可以同名,同名的虚拟轴相当于并集触发,比如说按下空格和shift都可视为跳跃。
-
获取虚拟轴数值:
其中获取的value值范围为0,1,-1,未按下时为0,正触发为1(上面的right和D),负触发为-1(上面的left和A); -
虚拟轴的应用Input.GetAxis
public class carDrive : MonoBehaviour { float speed = 10; float rotationSpeed = 100; void Update() { float translation = Input.GetAxis("Vertical") * speed; //秒 float rotation = Input.GetAxis("Horizontal") * rotationSpeed; translation *= Time.deltaTime; //帧 rotation *= Time.deltaTime; transform.Translate(0, 0, translation); transform.Rotate(0, rotation, 0); } }
注意:
- Time.deltaTime是每一帧的耗时(秒)。
translation *= Time.deltaTime;
表示的是将每秒刷新的translation转换为每帧刷新的translation,再在每一帧中画出 - 区别transform.Translation(平移!)和transform.Rotate(旋转!)
- Time.deltaTime是每一帧的耗时(秒)。
键盘事件
检测按键事件:GetKey、GetButton
if(Input.GetKey("up")) 等同于
if (Input.GetKey(KeyCode.UpArrow))
if(Input.GetButton("Vertical"))
- 注意GetKey和GetButton的不同:
GetKey用的是键名up,GetButton用的虚拟轴名Vertical - 引申:GetKeyDown、GettKeyUp、GetButtonDown、GetButtonUp
GetKey按下状态为真,GetKeyDown按下瞬间为真 - GetButton常用于事件性的虚拟轴,如Fire(射击ctrl等),用于检测事件
鼠标事件
GetMouseButton(参数0鼠标左键,1右键,2中键)
——引申GetMouseButtonDown、GetMouseButtonUp
if(Input.GetMouseButtonDown(0))
Debug.Log(Time.time+"鼠标左键按下");
if(Input.GetMouseButtonDown(1))
Debug.Log(Time.time+"鼠标右键按下");
用GUI事件也可检测鼠标事件
void OnGUI()
{
Event e = Event.current;
if (e.button == 0 && e.isMouse)
{
Debug.Log("鼠标左键被按下");
}
else if (e.button == 1 && e.isMouse)
{
print("鼠标右键被按下");
}
}
按下时多次输出!因为OnGUI每帧执行
(此处定义的事件和用委托定义的事件不一样?关于事件的部分还要好好看看)
检测鼠标双击:
void OnGUI()
{
Event e = Event.current;
if(e.isMouse && (e.clickCount == 2)){
Debug.Log("双击鼠标");
}
}
角色控制
standard资源包中角色控制器组件