需求是这样子的:
倒计时期间,1,2,3,所有人都不要动哦,移动了脚下会有危险提示图标,移动了就炸你哦
using System.Collections;
using System.Collections.Generic;
using TouchScript;
using TouchScript.Pointers;
using UnityEngine;
using UnityEngine.UI;
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;
// 我项目特殊的情况因为某些特殊的原因 正常用上面那行代码赋值
//cursor.GetComponent<RectTransform>().anchoredPosition3D = new Vector3((3468f / (float)Screen.width) * item.Position.x, (2892f / (float)Screen.height) * item.Position.y,0);
// 实时检测距离
if (OffsetTimerFirst[item.Id])
{
OffsetTimerFirst[item.Id] = false;
StartCoroutine(MoveDistanceInOneMic(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 MoveDistanceInOneMic(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);
Image dangerPre = GameObject.Find(p.Id.ToString()).transform.GetComponent<Image>();
//1 2 3 木头人 你个傻X 移动了吧
if (length > 5)
{
dangerPre.enabled = true;
}
//else
//{
// dangerPre.enabled = false;
//}
}
}
这个是挂在脚下危险提示的脚本,因为他移动了看到了危险就不动了,所以我要取消掉这个危险图标的提示,对的,乖乖站着不要动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Danger : MonoBehaviour
{
Image DangerImage;
private IEnumerator Start()
{
DangerImage = GetComponent<Image>();
while (true)
{
bool b = DangerImage.enabled;
yield return new WaitForSeconds(2.5f);
if(DangerImage.enabled && b)
{
DangerImage.enabled = false;
}
}
}
}