index | 设备屏幕上的触控输入。 |
Touch 结构体中的触控详细信息。
调用 Input.GetTouch 以获取 Touch 结构体。
注意:此 API 是传统 Input
类的一部分,不推荐用于新项目。此处提供的文档是为了支持使用旧输入管理器和输入类的传统项目。对于新项目,您应该使用更新的 Input 系统包。(了解更多)。
Input.GetTouch 返回 Touch,用于选定的屏幕触控(例如,来自手指或触控笔)。Touch 描述了屏幕触控。 index 参数选择屏幕触控。
Input.touchCount 提供当前的屏幕触控数量。如果 Input.touchCount 大于零,则 GetTouch index 设置要检查的屏幕触控。 Touch 返回一个包含屏幕触控详细信息的 struct
。每个额外的屏幕触控使用一个递增的 Input.touchCount。
GetTouch 返回一个 Touch 结构体。使用零来获取第一个屏幕触控。例如,Touch 包含 position(以像素为单位)。
不会分配任何临时变量。
using UnityEngine; using System.Collections; using UnityEngine.iOS;
// Input.GetTouch example. // // Attach to an origin based cube. // A screen touch moves the cube on an iPhone or iPad. // A second screen touch reduces the cube size.
public class ExampleClass : MonoBehaviour { private Vector3 position; private float width; private float height;
void Awake() { width = (float)Screen.width / 2.0f; height = (float)Screen.height / 2.0f;
// Position used for the cube. position = new Vector3(0.0f, 0.0f, 0.0f); }
void OnGUI() { // Compute a fontSize based on the size of the screen width. GUI.skin.label.fontSize = (int)(Screen.width / 25.0f);
GUI.Label(new Rect(20, 20, width, height * 0.25f), "x = " + position.x.ToString("f2") + ", y = " + position.y.ToString("f2")); }
void Update() { // Handle screen touches. if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0);
// Move the cube if the screen has the finger moving. if (touch.phase == TouchPhase.Moved) { Vector2 pos = touch.position; pos.x = (pos.x - width) / width; pos.y = (pos.y - height) / height; position = new Vector3(-pos.x, pos.y, 0.0f);
// Position the cube. transform.position = position; }
if (Input.touchCount == 2) { touch = Input.GetTouch(1);
if (touch.phase == TouchPhase.Began) { // Halve the size of the cube. transform.localScale = new Vector3(0.75f, 0.75f, 0.75f); }
if (touch.phase == TouchPhase.Ended) { // Restore the regular size of the cube. transform.localScale = new Vector3(1.0f, 1.0f, 1.0f); } } } } }
第二个例子
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { public GameObject projectile; public GameObject clone;
void Update() { for (int i = 0; i < Input.touchCount; ++i) { if (Input.GetTouch(i).phase == TouchPhase.Began) { clone = Instantiate(projectile, transform.position, transform.rotation) as GameObject; } } } }
第三个例子
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { public GameObject particle; void Update() { for (int i = 0; i < Input.touchCount; ++i) { if (Input.GetTouch(i).phase == TouchPhase.Began) { // Construct a ray from the current touch coordinates Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);
// Create a particle if hit if (Physics.Raycast(ray)) { Instantiate(particle, transform.position, transform.rotation); } } } } }