Unity3d热门基础之常用API之Input使用详解
2017-11-07 20:19
453 查看
Input
•包装了输入功能的类,可以读取输入管理器中设置的按键, 以及访问移动设备的多点触控或加速感应数据。•建议在Update中监测用户的输入。
引入
Ø 什么是 Input 类•包装了输入功能的类,可以读取输入管理器中设置的按键, 以及访问移动设备的多点触控或加速感应数据。
•建议在Update中监测用户的输入
鼠标输入
Ø 获取鼠标输入•当指定的鼠标按钮被按下时返回true
bool result=Input.GetMouseButton(0);
•在用户按下指定鼠标按键的第一帧返回true
bool result= Input. GetMouseButtonDown(0);
•在用户释放指定鼠标按键的第一帧返回true
bool result= Input. GetMouseButtonUp(0);
•按钮值设定:
0对应左键 ,
1对应右键 , 2对应中键。
输入管理器(虚拟轴)
InputManager(输入管理器):Edit—>ProjectSettings—>Input
使用脚本通过虚拟轴名称获取自定义键的输入。
作用:玩家可以在游戏启动时根据个人喜好对虚拟轴进行修改。
用虚拟按钮绑定按键:
水平负方向2个按钮left和a,正方向2个按钮right和d,可修改
Type可选择键盘鼠标输入
Axis可修改X轴方向Y轴方向滚轮等
默认绑定最多4个按键,若还想多,就再弄一个同名字的虚拟轴。
若修改的名称格式不对,光标移开会自己清除,照着默认格式写。
Descriptive Name:
游戏加载界面中,正向按键的详细描述。
•Descriptive Negative Name:
游戏加载界面中,反向按键的详细描述。
•Negative Button:该按钮会给轴发送一个负值。
•Positive Button:该按钮会给轴发送一个正值。
•Alt Negative Button:给轴发送负值的另一个按钮。
•Alt Positive Button:给轴发送正值的另一个按钮。
•Gravity:输入复位的速度,仅用于类型为键/鼠标的按键。
•*Dead:任何小于该值的输入值(不论正负值)都会被视为0, 用于摇杆。
•Sensitivity:灵敏度,对于键盘输入,该值越大则响应时间 越快,该值越小则越平滑。对于鼠标输入,设置该值会对鼠 标的实际移动距离按比例缩放。
•Snap:如果启用该设置,当轴收到反向的输入信号时,轴 的数值会立即置为0,否则会缓慢的应用反向信号值。仅用 于键/鼠标输入。
•Invert:启用该参数可以让正向按钮发送负值,反向按钮发 送正值。
•Type类型:
--键/鼠标(Key/ Mouse) ,
--鼠标移动和滚轮(Mouse Movement),
--摇杆(Jo
b4b0
ystick Axis) 。
•Axis:设备的输入轴(摇杆,鼠标,手柄等)
•*Joy Num:设置使用哪个摇杆。默认是接收所有摇杆的输 入。仅用于输入轴和非按键。
键盘输入
Ø 获取键盘输入•当通过名称指定的按键被用户按住时返回true
bool result=Input.GetKey(KeyCode.A);
•当用户按下指定名称按键时的那一帧返回true
bool result=Input. GetKeyDown(KeyCode.A);
•在用户释放给定名称按键的那一帧返回true
bool result=Input.GetKeyUp(KeyCode.A);
练习1:瞄准镜
重点: lerp的应用/// <summary>
/// 镜头缩放
/// </summary>
public class CameraZoom : MonoBehaviour
{
privatebool isFar = true;
privateCamera camera;
privatevoid Start()
{
camera = GetComponent<Camera>();
}
private void Update1()
{
if(Input.GetMouseButtonDown(1))
{//按下鼠标右键
isFar = !isFar;//改变状态
if (isFar)
{ //拉远 20 --> 60
camera.fieldOfView = 60;
}
else
{
//拉近 60 --> 20
camera.fieldOfView = 20;
}
}
}
private void Update2()
{
if(Input.GetMouseButtonDown(1))
{//按下鼠标右键
isFar = !isFar;//改变状态
}
//每帧执行
if(isFar)
{ //拉远 20 --> 60
if (camera.fieldOfView < 60)
camera.fieldOfView += 2;
}
else
{
//拉近 60 --> 20
if (camera.fieldOfView > 20)
camera.fieldOfView -= 2;
}
}
//插值 Lerp:根据比例返回起点/终点之间的数值。
private void Update3()
{
if(Input.GetMouseButtonDown(1))
{//按下鼠标右键
isFar = !isFar;//改变状态
}
//每帧执行
if(isFar)
{ //拉远 20 --> 60
//起点向终点无限接近、终点与比例不变
//现象:由快到慢
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, 60, 0.1f);
}
else
{
//拉近 60 --> 20
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, 20, 0.1f);
}
}
//多个缩放等级60 50 20
publicint[] zoomLevel;
privateint index;
privatevoid Update()
{
if(Input.GetMouseButtonDown(1))
{//按下鼠标右键
//如果当前索引小于最大索引 ? 索引增加 : 返回第一个索引
//index = index < zoomLevel.Length - 1 ? index + 1 : 0;
index = (index + 1) % zoomLevel.Length;// 周期性的变化
}
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoomLevel[index],0.1f);
//虚拟按钮 真实按键
if(Input.GetKey(KeyCode.W))
{
transform.Translate(0, 0, 1);
}
}
}
练习2:飞机 (移动+限制边界)
Ø 键盘垂直输入使飞机前后移动,Ø 键盘水平输入使飞机左右移动。
using UnityEngine;
using System.Collections;
public class plane : MonoBehaviour
{
publicfloat speed = 5;
privatevoid Update()
{ //a -1负方向 0 1d正方向
float horDirection = Input.GetAxis("Horizontal");
float verDirection = Input.GetAxis("Vertical");
if(horDirection != 0 || verDirection != 0)
{
Movement(horDirection, verDirection);
}
}
publicvoid Movement(float x,float z)
{
x*= Time.deltaTime * speed;
z*= Time.deltaTime * speed;
//限制范围:世界坐标-->屏幕坐标
LimitPosion(ref x);
transform.Translate(x, 0, z);
}
privatefloat LimitPosion(ref float x)
{
Vector3 screenPoint =Camera.main.WorldToScreenPoint(transform.position);
//如果到了最左边还想向左移动停 如果到了最右边还想向右移动停
x<0表示负方向,若没这个条件,会成为死循环,永远卡在x=0
if(screenPoint.x <=0 && x < 0 ||screenPoint.x>=Screen.width && x>0)//不要写==0,写的太死了
x=0;
//如果到了最上面,还想向上走,则从下边出来
在世界坐标系中,上是z,在屏幕坐标系上是y
if(screenPoint.y>Screen.height)
screenPoint.y = 0;
if(screenPoint.y <0)
screenPoint.y = Screen.height;
//屏幕坐标-->世界坐标-->作用到物体
transform .position = Camera.main.ScreenToWorldPoint(screenPoint);
return x;
}
}
相关文章推荐
- Unity3D之GUI基础以及常用GUI控件使用
- Extjs3常用基础方法使用详解
- 【Android 基础】Android热门网络框架使用详解-Volley
- webview进度条设置之WebChromeClient常用API与功能使用详解
- Unity3D入门之GUI基础以及常用GUI控件使用(2)
- 详解介绍Selenium常用API的使用--Java语言(完整版)
- Java基础中常用API使用
- VC常用数据类型使用转换详解
- VC常用数据类型使用转换详解
- VC常用数据类型使用转换详解-
- VC常用数据类型使用转换详解(摘)
- VC常用数据类型使用转换详解
- VC常用数据类型使用转换详解-
- VC常用数据类型使用转换详解
- VC常用数据类型使用转换详解
- 常用数据类型使用转换详解
- 常用UNIX命令使用基础
- VC常用数据类型使用转换详解
- VC常用数据类型使用转换详解