为什么极品飞车等等游戏,都可以通过系统设置很方面地根据自己喜欢设置操作方式,有人喜欢用箭头来控制没有喜欢用用“W,S,A,D”来控制,这就说明了程序员不会把控制方式写死在程序里面,来看看Unity3d如何让用户可以随时修改“快捷键”。
优点:不仅方便后期维护,也可以减少很多代码。
Edit --Project Settings -- Input 打开输入管理器
前面17组是系统配置的,可以修改或删除。
将Size改为18,新增一组。(名称为Test,对应按键为 a)
在发布的程序中,如果要修改对应键,控制面板中默认显示该功能名为Name。
若设置了正值描述名称,即显示功能名为该值。
负按键:比如正按键为 W ,负按键为“S”。它们的返回值分别为1,-1 。在代码区域进行判断,再实现不同的功能。
备选正负按钮:第二组实现与第一组功能相同的按钮。
则这两个键都可以实现同一功能。
脚本代码:
if (Input.GetButton("Test")) { } 相当于: //if (Input.GetKey(KeyCode.A)) //不便于维护 //{ //} Input.GetAxis("Test");//返回正负键值。正为,负为-1,没有按下为0
发布的程序,即可以随时修改对应键值
转动场景
1.转动物体
首先创建一个输入管理器
要实现A和Left 键向左转,D和Right键向右转
创建一个物体和一个脚本,将脚本赋给物体。
void Update () { //Input.GetAxisRaw("TurnLeftOrRight") 当按下A或Left,返回;按下D或Right,返回-1;不按时返回。立即返回 gameObject.transform.Rotate(0, Input.GetAxisRaw("TurnLeftOrRight") * 15 * Time.deltaTime, 0, Space.Self);//松口键时,立即停止 //这时将输入管理器的Sensitivity(灵敏度)由改为 Input.GetAxis("TurnLeftOrRight"); //这样返回值将是变化,例如按下A,将在一定时间内大概从->0.2->0.4…->1变化,这时松开键时,还是立即返回 //这时将输入管理器的Gravity(重力灵敏度)由改为。 //这样,松口按键时,返回值将由"终值"慢慢变化到 }
2.转动视觉
Type 类型,比如下面系统自带的鼠标横向滑动时。Type为Mouse Movement ; Axis 为X axis
……
0.1鼠标平移,镜头绕中心旋转
创建一个新的脚本
void Update () { gameObject.transform.Rotate(0, Input.GetAxis("Mouse X") * 10, 0, Space.Self); }
注意不能只能把脚本扔给摄像机,因为上面的代码只改变Y轴的值
应该新创建一个空物体,让它的坐标为(0,0,0),然后让摄像机成为它的子物体!
将脚本扔给该空物体,即可实现该摄像机到中心点的距离不变,但随着中心点旋转。
0.2转动鼠标滚轮,镜头伸缩。
创建一个新的脚本,直接扔给摄像机。当镜头视觉对准物体时,(Ctrl+Shift+F),摄像机的Z轴便是对准物体的,这时这需要移动摄像机改变Z轴的值,即可实现伸缩镜头效果。
void Update () { gameObject.transform.Translate(0, 0, Input.GetAxis("Mouse ScrollWheel") * 100 *Time.deltaTime, Space.Self); }
09应用输入管理器转动场景--《程序员学Unity3d》