用户输入管理

用户输入管理

1虚拟轴

使用的API:.GetAxis("/*Edit>Project Settings>Input Manager>Axes中对应的名字*/");

1.1控制位置  

示例

using UnityEngine;

public class Test : MonoBehaviour

{
    void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        if (horizontal != 0)
        {
            transform.position=new Vector3(transform.position.x+horizontal*0.1f, transform.position.y,transform.position.z);
        }
        if(vertical != 0)
        {
            transform.position=new Vector3(transform.position.x,transform.position.y+vertical*0.1f,transform.position.z);
        }
    }
}

  该段代码实现的目标是在运行时可以通过WASD来控制前后左右,Horizontal和VerticalEdit>Project Settings>Input Manager>AxesHorizontal和Vertical的名字。

1.2控制旋转

示例

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        if (horizontal != 0)
        {
            transform.eulerAngles=new Vector3(transform.eulerAngles.x, transform.eulerAngles.y+horizontal, transform.eulerAngles.z);
        }
    }
}

  该段代码实现的功能是通过AD来控制左右旋转。

1.3控制其他

示例

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        Debug.Log(Input.GetAxis("Mouse X"));
    }
}

  该段代码实现的功能是在控制台输出鼠标在X轴方向移动的值,Mouse X也可以换成Edit>Project Settings>Input Manager>Axes中的其他值来实现相应的控制。

2获取键盘事件

使用的API:GetKey("相应的键"/*也可以用KeyCode.A*/)

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKey("a"/*也可以用KeyCode.A*/))
        {
            Debug.Log("A键被按下了");
        }
    }
}

      该段代码实现的功能是,在按住A键时控制台不停输出:A键被按下了。

   若上面代码将GetKey换成GetKeyDown,则控制台会在按键按下时打印一次输出。

   若上面代码将GetKey换成GetKeyUp,则控制台会在按键抬起时打印一次输出。

3获取鼠标事件

3.1获取鼠标按键

使用的API:GetMouseButtonDown(数字)、GetMouseButtonUp(数字)、GetMouseButton(数字)/*数字0代表鼠标左键,数字1代表鼠标右键,数字2代表鼠标滚轮*/

示例1

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject cube = GameObject.Find("Cube");
            cube.transform.localScale=new Vector3(2,2,2);
        }
    }
}

  画面中创建一个立方体,当上述代码执行时,按下鼠标左键,画面中的立方体会放大一倍。

       若将上面代码中的GetMouseButtonDown换成GetMouseButtonUp则会在按键抬起时执行效果。

示例2

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject cube = GameObject.Find("Cube");
            cube.transform.localScale+=new Vector3(1,1,1);
        }
    }
}

  上述代码的功能是,在播放时不停按下鼠标左键,立方体会被不断放大。

3.2获取鼠标位置

使用的API:Input.mousePosition;

示例

using UnityEngine;

public class Test : MonoBehaviour
{
    bool isDown=false;
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            isDown=true;
        }
        if (Input.GetMouseButtonUp(0))
        {
            isDown = false;
        }
        if (isDown)
        {
            GameObject go = GameObject.Find("Image");
            go.transform.position=Input.mousePosition;
        }
    }
}

  创建一个图片,该段代码实现的功能是,点击鼠标左键后,图片会回到鼠标指针所在的位置,当鼠标持续点击并移动时,图片会跟随鼠标指针。

4移动设备输入

使用的API:Input.touchCount

       Input.touches[0].fingerId

       Input.touches[0].position

       Input.touches[0].deltaPosition;

示例

using UnityEngine;
using UnityEngine.UI;

public class MyText : MonoBehaviour
{
    Text juse;
    void Start()
    {
        juse = GameObject.Find("Text").GetComponent<Text>();
    }
    void Update()
    {
        if (Input.touchCount >= 1)
        {
            juse.text= "当前有:" + Input.touchCount + "根手指触碰。" + "当前手指的ID是:" + Input.touches[0].fingerId + "当前手指所在位置是:" + Input.touches[0].position + "从上一帧到现在移动了:" + Input.touches[0].deltaPosition;
        }
    }
}

  在场景中新建一个Text,将上面的代码写好并打包成apk文件,运行apk文件,在点击屏幕的时候,屏幕上会显示当前有几根手指触碰,当前手指的ID,当前手指所在位置,和从上一帧到现在移动了多少。

posted @ 2023-03-11 15:19  gatran  阅读(17)  评论(0编辑  收藏  举报