UGUI 2D:
using System.Collections;
using System.Collections.Generic;
using TouchScript;
using TouchScript.Pointers;
using UnityEngine;
public class DangerTipMsg : MonoBehaviour
{
//public List<bool> OffsetTimerFirst = new List<bool>();
//物体跟随的对象
public GameObject obj;
private Dictionary<int, GameObject> cursors = new Dictionary<int, GameObject>(50);
private void OnEnable()
{
if (TouchManager.Instance != null)
{
TouchManager.Instance.PointersAdded += pointersAddedHandler;
TouchManager.Instance.PointersRemoved += pointersRemovedHandler;
TouchManager.Instance.PointersUpdated += PointersUpdatedHandle;
TouchManager.Instance.PointersReleased += PointersReleasedHandle;
}
//for (int i = 0; i < 200; i++)
//{
// OffsetTimerFirst.Add(true);
//}
}
private void OnDisable()
{
if (TouchManager.Instance != null)
{
TouchManager.Instance.PointersAdded -= pointersAddedHandler;
TouchManager.Instance.PointersRemoved -= pointersRemovedHandler;
TouchManager.Instance.PointersUpdated -= PointersUpdatedHandle;
TouchManager.Instance.PointersReleased -= PointersReleasedHandle;
}
}
private void PointersUpdatedHandle(object sender, PointerEventArgs e)
{
foreach (var item in e.Pointers)
{
GameObject cursor;
if (!cursors.TryGetValue(item.Id, out cursor)) continue;
cursor.GetComponent<RectTransform>().anchoredPosition3D = item.Position;
//if (OffsetTimerFirst[item.Id])
//{
// OffsetTimerFirst[item.Id] = false;
// StartCoroutine(MoveLength(item));
//}
}
}
private void pointersAddedHandler(object sender, PointerEventArgs e)
{
var count = e.Pointers.Count;
for (var i = 0; i < count; i++)
{
var pointer = e.Pointers[i];
// Don't show internal pointers
if ((pointer.Flags & Pointer.FLAG_INTERNAL) > 0) continue;
GameObject trail = Instantiate(obj, transform);
trail.name = pointer.Id.ToString();
trail.transform.GetComponent<RectTransform>().anchoredPosition3D = e.Pointers[i].Position;
cursors.Add(pointer.Id, trail);
}
}
private void pointersRemovedHandler(object sender, PointerEventArgs e)
{
var count = e.Pointers.Count;
for (var i = 0; i < count; i++)
{
var pointer = e.Pointers[i];
// Don't show internal pointers
if ((pointer.Flags & Pointer.FLAG_INTERNAL) > 0) continue;
GameObject cursor;
if (!cursors.TryGetValue(pointer.Id, out cursor)) continue;
Destroy(cursor, 1f);
cursors.Remove(pointer.Id);
}
}
private void PointersReleasedHandle(object sender, PointerEventArgs e)
{
var count = e.Pointers.Count;
for (var i = 0; i < count; i++)
{
var pointer = e.Pointers[i];
// Don't show internal pointers
if ((pointer.Flags & Pointer.FLAG_INTERNAL) > 0) continue;
GameObject cursor;
if (!cursors.TryGetValue(pointer.Id, out cursor)) continue;
cursor.transform.position = Vector3.zero;
}
}
// 多点触摸 每隔一秒 判断每个触摸点的移动距离
IEnumerator MoveLength(Pointer p)
{
Vector3 v = p.Position;
yield return new WaitForSeconds(1f);
float length = Vector3.Distance(p.Position, v);
//OffsetTimerFirst[p.Id] = true;
//Debug.Log(length);
}
}
?3d:
?
using System.Collections.Generic;
using TouchScript;
using TouchScript.Pointers;
using UnityEngine;
public class Player : MonoBehaviour
{
// 用于射线检测的的摄像头
public Camera RayCamera;
public GameObject obj;
private Dictionary<int, GameObject> cursors = new Dictionary<int, GameObject>(50);
private void OnEnable()
{
if (TouchManager.Instance != null)
{
TouchManager.Instance.PointersAdded += pointersAddedHandler;
TouchManager.Instance.PointersRemoved += pointersRemovedHandler;
TouchManager.Instance.PointersUpdated += PointersUpdatedHandle;
TouchManager.Instance.PointersReleased += PointersReleasedHandle;
}
}
private void OnDisable()
{
if (TouchManager.Instance != null)
{
TouchManager.Instance.PointersAdded -= pointersAddedHandler;
TouchManager.Instance.PointersRemoved -= pointersRemovedHandler;
TouchManager.Instance.PointersUpdated -= PointersUpdatedHandle;
TouchManager.Instance.PointersReleased -= PointersReleasedHandle;
}
}
private void PointersReleasedHandle(object sender, PointerEventArgs e)
{
var count = e.Pointers.Count;
for (var i = 0; i < count; i++)
{
var pointer = e.Pointers[i];
// Don't show internal pointers
if ((pointer.Flags & Pointer.FLAG_INTERNAL) > 0) continue;
GameObject cursor;
if (!cursors.TryGetValue(pointer.Id, out cursor)) continue;
cursor.transform.position = Vector3.zero;
}
}
private void pointersAddedHandler(object sender, PointerEventArgs e)
{
var count = e.Pointers.Count;
for (var i = 0; i < count; i++)
{
var pointer = e.Pointers[i];
// Don't show internal pointers
if ((pointer.Flags & Pointer.FLAG_INTERNAL) > 0) continue;
GameObject trail = Instantiate(obj, e.Pointers[i].Position, Quaternion.identity, transform);
cursors.Add(pointer.Id, trail);
}
}
private void pointersRemovedHandler(object sender, PointerEventArgs e)
{
var count = e.Pointers.Count;
for (var i = 0; i < count; i++)
{
var pointer = e.Pointers[i];
// Don't show internal pointers
if ((pointer.Flags & Pointer.FLAG_INTERNAL) > 0) continue;
GameObject cursor;
if (!cursors.TryGetValue(pointer.Id, out cursor)) continue;
Destroy(cursor,1f);
cursors.Remove(pointer.Id);
}
}
/// <summary>
/// 点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PointersUpdatedHandle(object sender, PointerEventArgs e)
{
foreach (var pointer in e.Pointers)
{
UnityEngine.Ray ray = RayCamera.ScreenPointToRay(pointer.Position);
RaycastHit[] hits = Physics.RaycastAll(ray);
if (hits.Length > 0)
{
foreach (var item in hits)
{
GameObject gameObject = item.collider.gameObject;
if (gameObject.CompareTag("AAA") && gameObject.activeSelf)
{
GameObject cursor;
if (!cursors.TryGetValue(pointer.Id, out cursor)) continue;
//cursor.transform.position = item.point;
// 我的项目的特殊情况,z 是个固定值 正确使用应该是上面这句
cursor.transform.position = new Vector3(item.point.x, item.point.y, 14.55008f);
}
}
}
}
}
// 射线检测
void RayHitFunction(Vector2 pos,Pointer p)
{
UnityEngine.Ray ray = RayCamera.ScreenPointToRay(pos);
RaycastHit[] hits = Physics.RaycastAll(ray);
if (hits.Length > 0)
{
foreach (var item in hits)
{
GameObject gameObject = item.collider.gameObject;
if (gameObject.CompareTag("AAA") && gameObject.activeSelf)
{
print(item.collider.gameObject.name);
GameObject cursor;
if (!cursors.TryGetValue(p.Id, out cursor)) continue;
cursor.transform.position = item.point;
}
}
}
}
}
|