首页 > 代码库 > 09应用输入管理器转动场景--《程序员学Unity3d》

09应用输入管理器转动场景--《程序员学Unity3d》

为什么极品飞车等等游戏,都可以通过系统设置很方面地根据自己喜欢设置操作方式,有人喜欢用箭头来控制没有喜欢用用“W,S,A,D”来控制,这就说明了程序员不会把控制方式写死在程序里面,来看看Unity3d如何让用户可以随时修改“快捷键”。

优点:不仅方便后期维护,也可以减少很多代码。


Edit --Project Settings -- Input 打开输入管理器

 

前面17组是系统配置的,可以修改或删除。

Size改为18,新增一组。(名称为Test,对应按键为 a



在发布的程序中,如果要修改对应键,控制面板中默认显示该功能名为Name

若设置了正值描述名称,即显示功能名为该值。

负按键:比如正按键为 ,负按键为“S”。它们的返回值分别为1-1 。在代码区域进行判断,再实现不同的功能。

备选正负按钮:第二组实现与第一组功能相同的按钮。

则这两个键都可以实现同一功能。

脚本代码:

if (Input.GetButton("Test"))
        { 
        }
相当于:
        //if (Input.GetKey(KeyCode.A)) //不便于维护
        //{ 
        //}
Input.GetAxis("Test");//返回正负键值。正为,负为-1,没有按下为0


发布的程序,即可以随时修改对应键值

 

转动场景

1.转动物体

首先创建一个输入管理器

 

要实现ALeft 键向左转,DRight键向右转

创建一个物体和一个脚本,将脚本赋给物体。

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 类型,比如下面系统自带的鼠标横向滑动时。TypeMouse 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轴的值,即可实现伸缩镜头效果。

 unity3

void Update () {
        gameObject.transform.Translate(0, 0, Input.GetAxis("Mouse ScrollWheel") * 100 *Time.deltaTime, Space.Self);
}