u3d中的INput

属性

属性:功能:
轴 (Axes) 包含当前工程的所有定义的输入轴:数目 (Size) 该工程中不同输入轴的数量,元素 0、1、... 是要修改的特定的轴。
名称 (Name) 在游戏启动器中以及通过脚本处理时用于指称特定轴的字符串。
描述性名称 (Descriptive Name) 显示在游戏启动器中的正向按钮 (Positive Button) 功能的详细定义。
描述性负向名称 (Descriptive Negative Name) A显示在游戏启动器中的负向按钮 (Negative Button)功能的详细定义。
负向按钮 (Negative Button) 将负值发送给轴的按钮。
正向按钮 (Positive Button) 将正值发送给轴的按钮。
Alt 负向按钮 (Alt Negative Button) 将负值发送给轴的辅助按钮。
Alt 正向按钮 (Alt Positive Button) 将正值发送给轴的辅助按钮。
重力 (Gravity) 输入回到中心位置的速度。只有当类型 (Type) 是键盘/鼠标按钮时才使用。
无效 (Dead) 任何小于该数值的正值或负值都将记为零。适用于游戏杆。
灵敏度 (Sensitivity) 对于键盘输入来说,数值越大,响应时间越快。较低值会更加平滑。对于鼠标增量,该数值会计算出真实的鼠标增量。
捕捉 (Snap) 若启用,则在收到反向输入后,轴的数值会立即重置为零。 只有当类型 (Type) 是键盘/鼠标按钮时才使用。
反转 (Invert) 若启用,则正向按钮会将负值发送给轴,反之亦然。
类型 (Type) 键盘/鼠标按钮 (Key/Mouse Button)用于任何类型的按钮,鼠标移动 (Mouse Movement) 用于鼠标增量和滚轮,游戏杆轴 (Joystick Axis) 用于模拟游戏杆轴,而窗口移动 (Window Movement) 在玩家晃动窗口时使用。
轴 (Axis) 来自设备(游戏杆、鼠标、手柄等)的输入的轴
游戏杆号 (Joy Num) 应该使用哪个游戏杆。默认情况下设置为检索来自所有游戏杆的输入。仅用于输入轴,不包括按钮。

 PS : Unity内并没有内建android(返回与选单)功能键设定,必须使用者自行设定,在Inpu.GetButton(“ ”)中”escpae”&”menu”有对应返回与选单键

虚拟轴:将键盘,操纵杆和游戏手柄上的按键映射到u3d中。。达到轴的效果。既然是轴则有正向和负向按钮

例: if(Input.GetKeyDown (“escpae”)){ Application.Quit(); } 按下返回就退出

Input.GetAxis(需求的是按下的过程)

  适用于运动行为

  • 水平线 (Horizontal) 和垂直线 (Vertical) 映射至 w、a、s、d 和方向键。
  • Fire1、Fire2、Fire3 分别映射至 Control、Option (Alt) 和 Command 键。
  • Mouse X 和 Mouse Y 映射至鼠标移动增量。
  • Window Shake X 和 Window Shake Y 对应窗口的移动。
使用控制器和键盘输入时此值范围在-1到1之间。如果坐标轴设置为鼠标运动增量,鼠标增量乘以坐标轴灵敏度的范围将不是-1到1 。
var translation : float = Input.GetAxis ("Vertical") * speed; //ws 上下键 var rotation : float = Input.GetAxis ("Horizontal") * rotationSpeed;//ad 左右键
var h : float = horizontalSpeed * Input.GetAxis ("Mouse X");  鼠标在水平方向的移动
var v : float = verticalSpeed * Input.GetAxis ("Mouse Y"); 鼠标在垂直方向的移动

Input.GetAxisRaw 获取原始轴

键盘和控制器取值范围在-1...1之间,此时输入没有使用平滑。键盘输入必然会是-1、0或1。这一点在你想自己处理键盘平滑输入时很实用。

Input.GetButton  (需求的是判断是否被按下)  总是按住

想象一下自动开火 - 如果按钮一直被按住此方法将永远返回true。只有当执行像武器射击这样的事件时才可用此方法,Input.GetAxis适用于各种运动行为。

Input.GetButtonDown  按下那一刻

在给定名称的虚拟按钮被按下的那一帧返回true。你需要在Update方法中调用这个方法,此后每一帧重置状态时,它将不会返回true除非用户释放此按键然后重新按下。

Input.GetButtonUp 获取按钮弹起 弹起那一刻


Input.GetKey 获取键

Input.GetKeyDown 获取键按下

Input.GetKeyUp 获取键弹起

Input.GetAxisXXX  Input.GetButton Input.GetKeyXXX函数在台式机平台上非常方便,可强化键盘和手柄输入。然而该函数对依靠触摸屏输入的移动平台来说毫无意义。同样,对任何内容来说标准台式机键盘输入都无法很好地移植到移动装置,键入文本除外。

Input.GetMouseButton 获取鼠标按钮

Input.GetMouseButtonDown 获取鼠标按钮按下

Input.GetMouseButtonUp 获取鼠标按钮弹起

 Input.GetMouseButtonXXX 函数被设计出来,即使没有“鼠标”,也能明显地合理解读移动设备,单点触摸屏幕报告为左键单击,只要手指触摸屏幕,Input.mousePosition 属性就能给出点击位置。也就是说带简单鼠标互动操作的游戏通常可在台式机和移动平台上正常工作。当然,两者之间的转换往往要复杂得多。台式机游戏能利用一个以上鼠标按键,而移动游戏可同时检测到多点触摸。

Input.GetTouch 获取触摸  

Input.touchCount ~ 触碰数量

Input.GetTouch(0) ~ 当第一支手指触碰时

0=第一支1=第二支2=第三支以此类推(触碰到点的侦测数量上限未测不知)

TouchPhase ~ 触碰状态有分五种Began Moved Stationary Ended Canceled

Began按下Moved移动Stationary按住没移动Ended离开

Canceled用于触碰超过5点以上或贴至脸上时取消追踪

Input.GetTouch(0).position 取得第一支手指触碰座标

 

例 :

Touch 单点移动判断式

if(Input.touchCount == 1 && Input.GetTouch(0).phase==TouchPhase.Moved){执行}

(触碰数量为1个) 和(第一支手指触碰时的状态为移动) 时{执行}

 

Touch 双点移动判断式

if(Input.touchCount >1){

 if(Input.GetTouch(0).phase==TouchPhase.Moved || Input.GetTouch(1).phase==TouchPhase.Moved){ 执行}}

(触碰数量超过1个) 和

 (第一支手指触碰时的状态为移动)或着(第二支手指触碰时的状态为移动) 时{执行}

 

 

 

 

Input.GetAccelerationEvent 获取加速度事件

Input.GetJoystickNames 获取控制杆名称列表

Input.ResetInputAxes 重置输入轴

 

 

射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。

用途:射线应用范围比较广, 多用于碰撞检测(如:子弹飞行是否击中目标)、角色移动等 等。

 

相关API:

 

1、Ray Camera.main.ScreenPointToRay(Vector3 pos)   返回一条射线Ray从摄像机到屏幕指定一个点

2、Ray Camera.main.ViewportPointToRay(Vector3 pos)  返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点

3、Ray 射线类 

4、RaycastHit 光线投射碰撞信息

5、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)

    当光线投射与任何碰撞器交叉时为真,否则为假。

    bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask)

    在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。

    bool Physics.Raycast(Ray ray, float distance, int layerMask)

    当光线投射与任何碰撞器交叉时为真,否则为假。

    bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask)

    当光线投射与任何碰撞器交叉时为真,否则为假。

 

    注意:如果从一个球型体的内部到外部用光线投射,返回为假。

    参数理解:

  origin : 在世界坐标中射线的起始点

  direction: 射线的方向

  distance: 射线的长度

  hit: 使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。 

  layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。 选择性的碰撞

6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask)

   投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。

 

  下面一个利用射线做的拾取的小例子(将代码直接拖拽到主相机上)

复制代码
 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class RayTest : MonoBehaviour {
 5 
 6     // Use this for initialization
 7     void Start () {
 8     
 9     }
10     
11     // Update is called once per frame
12     void Update () 
13     {
14         if(Input.GetMouseButton(0))
15         {
16             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出到点击坐标的射线
17             RaycastHit hitInfo;
18             if(Physics.Raycast(ray,out hitInfo))
19             {
20                 Debug.DrawLine(ray.origin,hitInfo.point);//划出射线,只有在scene视图中才能看到
21                 GameObject gameObj = hitInfo.collider.gameObject;
22                 Debug.Log("click object name is " + gameObj.name);
23                 if(gameObj.tag == "boot")//当射线碰撞目标为boot类型的物品 ,执行拾取操作
24                 {
25                     Debug.Log("pick up!");
26                 }
27             }
28         }
29     }
30 }
复制代码

 

posted @ 2015-03-10 20:28  zhepama  阅读(981)  评论(0编辑  收藏  举报