2016-01-22 01:04:24 unity3dliao 阅读数 4362

首先我这里先来总结Input类。

键盘控制类:

1,想要读取轴向使用Input.GetAxis方法获取下列默认轴: "Horizontal" 和"Vertical" 映射于控制杆、A、W、S、D和箭头键(方向键)。 "Mouse X" 和"Mouse Y" 映射于鼠标,"Fire1", "Fire2" "Fire3"映射于键盘的Ctrl、Alt、Cmd键和鼠标中键或控制器的按钮。新的输入设置可以使用输入管理器来添加。

2,如果你使用Input制作某种运动行为可以使用Input.GetAxis方法,它能够返回来自键盘、控制器或鼠标平缓并且可以设置的输入结果。使用Input.GetButton方法只用于像事件之类的动作。不要将它用于移动动作。Input.GetAxis方法可以使脚本代码更简洁。

3,注意:每次输入在"Update()"之前不会再更新,所以建议你将所有的输入调用都写在Update方法中。(Update循环中)

移动设备:

移动设备:

iOS和Android设备能够支持多点触控。你可以通过Input.touches属性集合访问在最近一帧中触摸在屏幕上的每一根手指的状态数据。 

当设备移动时,它们的加速感应器硬件将报告它们在三维空间中沿着三个主轴的线性加速变化数据。你可以使用这些数据检测设备当前的移动方向(相对于地面)和突然间的方向改 变。

硬件沿着某感应一轴加速就会立即返回重力值。如果值为1.0代表沿着给定轴的方向+1g的重力加速度,如果值为-1.0代表-1g的重力加速度。如果你保持设备垂直(主页键在下方)在你正前方,那么X轴就是指向你右侧的方向,Y轴指向正上方,Z轴就是你所面向的方向。

你可以读取Input.acceleration属性获得设备的加速度信息。你也可以使用Input.deviceOrientation属性获取设备在三维空间中的方位偏移。检测方位变化在你想要制作游戏行为中会非常有用,当用户转动设备或拿着设备时它是不同的。

注意:速度感应装置在每一帧中能够轮询多次,想访问上一帧的所有速度样本你可以读取Input.accelerationEvents属性集合。这在重组玩家动作中会非常有用。例如将加速数据放入一个预测器中或者实现其他一些精确的动作捕捉

Class Variables类变量

  • 
    
    当前所在像素坐标的鼠标位置(只读)。
  • Is any key or mouse button currently held down? (Read Only)
    是否有某一按键或鼠标按钮此时被按住?(只读)
  • Returns true the first frame the user hits any key or mouse button (Read Only).
    在第一帧用户按下某一按键或鼠标按钮,返回true(只读)
  • Returns the keyboard input entered this frame (Read Only).
    返回在这一帧的键盘输入(只读)
  • Last measured linear acceleration of a device in three-dimensional space (Read Only).
    最近一次测量的设备在三维空间中的线性加速度(只读)
  • Returns list of acceleration measurements which occurred during the last frame (Read Only) (Allocates temporary variables).
    返回上一帧测量的加速值数据列表(只读)(分配临时变量)
  • Number of acceleration measurements which occurred during last frame.
    上一帧所进行的加速度测量次数。
  • Returns list of objects representing status of all touches during last frame (Read Only) (Allocates temporary variables).
    返回代表上一帧所有的触摸状态的对象列表(只读)(分配临时变量)
  • Number of touches (Read Only).
    触摸的数量(只读)。
  • Property indicating whether the system handles multiple touches.
    此属性表明此系统是否支持多点触控。
  • Device physical orientation as reported by OS (Read Only).
    操作系统所报告的物理设备的方位信息(只读)

Class Functions类函数

  • Returns the value of the virtual axis identified by axisName.
    根据坐标轴名称返回虚拟坐标系中的值。
  • Returns the value of the virtual axis identified by axisName with no smoothing filtering applied.
    通过坐标轴名称返回一个不使用平滑滤波器的虚拟坐标值。
  • Returns true while the virtual button identified by buttonName is held down.
    根据按钮名称返回true当对应的虚拟按钮被按住时。
  • Returns true during the frame the user pressed down the virtual button identified by buttonName.
    在给定名称的虚拟按钮被按下的那一帧返回true。
  • Returns true the first frame the user releases the virtual button identified by buttonName.
    在用户释放指定名称的虚拟按钮时返回true。
  • Returns true while the user holds down the key identified by name. Think auto fire.
    当通过名称指定的按键被用户按住时返回true。想想自动开火。
  • Returns true during the frame the user starts pressing down the key identified by name.
    当用户按下指定名称的按键时的那一帧返回true。
  • Returns true during the frame the user releases the key identified by name.
    在用户释放给定名字的按键的那一帧返回true。
  • Returns an array of stings describing the connected joysticks.
    返回一个用来描述已连接的控制杆的字符串集合。
  • Returns whether the given mouse button is held down.
    当指定的鼠标按钮被按下时返回true
  • Returns true during the frame the user pressed the given mouse button.
    在用户按下指定鼠标按键的那一帧返回true。
  • Returns true during the frame the user releases the given mouse button.
    在用户释放指定鼠标按键的那一帧返回true。
  • Resets all input. After ResetInputAxes all axes return to 0 and all buttons return to 0 for one frame.
    在一帧中重置所有的输入,重置输入指令之后所有的方向轴都被设置为0并且所有的按键都被设置为0。
  • Returns specific acceleration measurement which occurred during last frame (Does not allocate temporary variables).
    返回上一帧发生的指定的加速度测量(不允许分配临时变量)
  • Returns object representing status of a specific touch (Does not allocate temporary variables).
    返回一个存放触摸信息的对象(不允许分配临时变量)。 


有关鼠标事件的总结:

鼠标事件由两方面完成

1,本身的鼠标事件


上面就是鼠标事件的几个继承子monobehavier里面的事件函数。用本身自带函数会省事很多。



下面是有关Raycast射线的讲解:

Physics.Raycast 光线投射

static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

Parameters参数

  • origin
    The starting point of the ray in world coordinates.
    在世界坐标,射线的起始点。
  • direction
    The direction of the ray.
    射线的方向。
  • distance
    The length of the ray
    射线的长度。
  • layerMask
    A Layer mask that is used to selectively ignore colliders when casting a ray.
    只选定Layermask层内的碰撞器,其它层内碰撞器忽略。 
实例:

鼠标拖拽物体移动实例代码:

public class text_Drag : MonoBehaviour {
    public Camera mCamera;
    public float depth=10f;

//进入物体放大
    void OnMouseEnter()
    {
        this.transform.localScale = new Vector3(1.3f,1.3f,1.3f);
    }

//退出物体还原
    void OnMouseExit()
    {
        this.transform.localScale = new Vector3(1,1,1);
    }

//放在物体上面旋转
    void OnMouseOver()
    {
        this.transform.Rotate(Vector3.up,45*Time.deltaTime,Space.Self);
    }

//拖动物体
    void OnMouseDrag()
    {
       Drag();
       // moveObject();
    }
    void Drag()
    {
        Ray mRay = mCamera.ScreenPointToRay(Input.mousePosition);//这是从屏幕发射一条射线到鼠标位置
        RaycastHit hit;
        if (Physics.Raycast(mRay, out hit, 1000, 2))
        {
            this.transform.position = new Vector3(hit.point.x,hit.point.y+0.5f,hit.point.z);
        }
        Debug.DrawLine(mRay.origin,hit.point,Color.red);
    }
    void moveObject()
    {
        Vector3 mousescreen = Input.mousePosition;
        mousescreen.z = depth;//固定Z轴
        Vector3 mPoint = mCamera.ScreenToWorldPoint(mousescreen);//将鼠标的位置映射在屏幕上面,这样可以使物体自由拖拽,可以使物体拖出界面。
        this.transform.position = mPoint;//把转换后的坐标赋值给物体本身的世界坐标。
    }
}

2017-11-07 20:19:42 dongkaixuan 阅读数 189

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),

--摇杆(Joystick 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;

    }

}

2017-09-11 23:20:59 dongkaixuan 阅读数 1796

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),

--摇杆(Joystick 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:瞄准镜



empty
/// 
/// 镜头缩放
/// 
public class CameraZoom : MonoBehaviour
{
    private bool isFar = true;

    private Camera camera;
    private void Start()
    {
        camera = GetComponent();
    }

    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
    public int[] zoomLevel;
    private int index;
    private void 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);
        }
    }
}
2013-05-31 23:08:40 cp790621656 阅读数 10483
#pragma strict

var buttonTexture : Texture2D;  //按钮的图片,public,可以在外面设置

private var str : String;//一个string

private var frameTime : int;   //记录时间的数字 int型

function Start () {
str="请点击按钮"; //初始化赋值
}

function OnGUI()
{
	GUI.Label(Rect(10,10,Screen.width,30),str);  //新建一个label显示str
	
	if(GUI.Button(Rect(10,50,buttonTexture.width,buttonTexture.height),buttonTexture))
	{
		str="点击了图片按钮";
	}
	GUI.color=Color.green;  //设置str显示颜色
	GUI.backgroundColor=Color.red; //按钮的背景颜色
	
	if(GUI.Button(Rect(10,200,70,30),"文字按钮"))//只有按下和没按下状态,没有持续按下这个状态
	{
		str="点击了文字按钮"+frameTime;
		frameTime++;
	}
	GUI.color=Color.yellow;
	GUI.backgroundColor=Color.black;
	if(GUI.RepeatButton(Rect(10,250,100,30),"按钮按下中")) //持续按下的状态
	{	
		str="按钮按下中的时间:"+frameTime;
		frameTime++;
	}
	
}

function Update () {

}


新建脚本,拖到工程的摄像头。

RepeatButton这个按钮有监听持续按下的功能。

2015-02-08 16:08:32 linkfly1 阅读数 562

Input



使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据。

 
这里重点记录一下这几个东西的用法,鼠标,键盘,触摸,重力(陀螺仪)

 

 
鼠标:

 
Input.mousePosition表示鼠标当前的像素位置(坐标系如何?以左下角为原点)

 
float GetAxis(string) "Mouse X"和"Mouse Y" 可以获取这一帧鼠标在X,Y上移动的偏移量,正常速度在-1和1之间,快速移动鼠标会超过这个数值(根据我的猜测,这个数值可能是像素?看样子不是像素,或者是一个单位比例吧)

 
接下来这三个函数的参数,0左键,1右键,2中键

 
GetMouseButton 对应的键处于按下状态时返回true

 
GetMouseButtonDown 对应的键被按下时返回true

 
GetMouseButtonUp 对应的键弹起时返回true

 
除了Input组件之外,可以使用MonoBehaviour的回调函数来监听

 
以下几个回调函数需要当对象添加了Collider组件或者GUIElement组件才会被回调,这几个函数在iPhone上无效

 
OnMouseDown 当鼠标点击到对象的时候回调

 
OnMouseDrag 当鼠标拖拽对象时调用,在Ignore Raycast层上无效

 
OnMouseEnter 当鼠标进入对象时调用

 
OnMouseExit 当鼠标离开对象时调用

 
OnMouseOver 当鼠标停留在对象上面时调用

 
OnMouseUpAsButton 鼠标在同一个对象上按下,并弹起时调用

 
OnMouseUp 跟楼上一样

 
键盘:
 

anyKey 此时是否有某一按钮或者鼠标按键被按住

 
anyKeyDown 当你松开一个按钮的时候,是true,其他情况都是false

 
GetButton 当某个按钮被按下时返回true,攻击用的...GetAxis通用

 
GetButtonDown 当某个按钮被按下的那一帧返回true

 
GetButtonUp 当某个按钮弹起时返回true

 
GetKey,GetKeyDown,GetKeyUp 支持KeyCode参数,敲代码时有自动提示,会舒服一些

 
触摸:

 
multiTouchEnabled 是否支持多点触摸

 
touchCount 只读变量,触摸对象的数量

 
touches 一个Touch的静态数组,表示上一帧所有的触摸对象

 
GetTouch(int index) 相当于touches[index]

 
Touch结构表示一个手指在触摸屏上的状态

 
int fingerId 触摸的唯一索引

Vector2 position 触摸的位置

Vector2 deltaPosition 距离上次改变的距离增量

float deltaTime 距离上次改变的时间增量

int tapCount 点击的次数?

TouchPhase phase 触摸的状态

 
TouchPhase有五种状态:

Began 开始触摸

Move 在屏幕上移动

Stationary 触摸但没有移动

Ended 手指从屏幕上离开

Canceled 触摸被系统取消

陀螺仪重力感应神马的,以后用到再了解吧

 
           想要读取轴向使用Input.GetAxis方法获取下列默认轴: "Horizontal" 和"Vertical" 映射于控制杆、A、W、S、D和箭头键(方向键)。 "Mouse X" 和"Mouse Y" 映射于鼠标,"Fire1", "Fire2" "Fire3"映射于键盘的Ctrl、Alt、Cmd键和鼠标中键或控制器的按钮。新的输入设置可以使用输入管理器来添加。

 

           如果你使用Input制作某种运动行为可以使用Input.GetAxis方法,它能够返回来自键盘、控制器或鼠标平缓并且可以设置的输入结果。使用Input.GetButton方法只用于像事件之类的动作。不要将它用于移动动作。Input.GetAxis方法可以使脚本代码更简洁。

 

           注意:每次输入在"Update()"之前不会再更新,所以建议你将所有的输入调用都写在Update方法中。(Update循环中)

iOS和Android设备能够支持多点触控。你可以通过Input.touches属性集合访问在最近一帧中触摸在屏幕上的每一根手指的状态数据。

 

            当设备移动时,它们的加速感应器硬件将报告它们在三维空间中沿着三个主轴的线性加速变化数据。你可以使用这些数据检测设备当前的移动方向(相对于地面)和突然间的方向改 变。

 

            硬件沿着某感应一轴加速就会立即返回重力值。如果值为1.0代表沿着给定轴的方向+1g的重力加速度,如果值为-1.0代表-1g的重力加速度。如果你保持设备垂直(主页键在下方)在你正前方,那么X轴就是指向你右侧的方向,Y轴指向正上方,Z轴就是你所面向的方向。

 

             你可以读取Input.acceleration属性获得设备的加速度信息。你也可以使用Input.deviceOrientation属性获取设备在三维空间中的方位偏移。检测方位变化在你想要制作游戏行为中会非常有用,当用户转动设备或拿着设备时它是不同的。


             在开发手机游戏的时候,常用的一种做法是对可点击的对象添加一个碰撞器,并调整好大小,在对象脚本上添加OnMouseDown回调,然后在回调中编写相关的代码,最后在游戏主循环的Update中添加下面的脚本,你就会发现,代码在PC上和手机上的运行效果是一样的。 


if (Input.GetKey(KeyCode.Escape))

{

Application.Quit();

}

RaycastHit hit = new RaycastHit();

for (int i = 0; i < Input.touchCount; ++i)

{

if (Input.GetTouch(i).phase.Equals(TouchPhase.Began))

{

// Construct a ray from the current touch coordinates

Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);

if (Physics.Raycast(ray, out hit))

{

hit.transform.gameObject.SendMessage("OnMouseDown");

}

}

}
          
           上面这段代码在手机上生效,在PC上是不会被触发的,它通过触点发射出一道射线与场景中的碰撞体进行检测,如果检测到对象,则调用对象的OnMouseDown函数。那么在PC上,当我们点击一个碰撞体的时候,会直接调用该对象的OnMouseDown回调,所以我们就可以在PC上测试我们的游戏了
没有更多推荐了,返回首页