Unity Input.touches-按住延迟时的动作
本文关键字:延迟 Input touches- Unity | 更新日期: 2023-09-27 17:57:33
我希望瓷砖(地图上的对象)只在一次触摸时改变颜色,而在平移或缩放相机时不改变。我已经试了两天了,在谷歌上搜索了一下,似乎都想不通。这看起来很简单。
我已经得到了修复这个问题的代码,但现在我需要添加一个时间延迟,因为原始代码太敏感了,无法触摸。我在想一个"如果(触摸时间>200ms){什么都不做}其他{做一些事情}或类似的事情
这是我的atm:
bool onlyTouched;
void Update()
{
if (Input.touchCount > 0)
{
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
RaycastHit hitInfo;
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
onlyTouched = true;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
onlyTouched = false;
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
if (onlyTouched)
{
if (Physics.Raycast(ray, out hitInfo))
{
GameObject ourHitObject = hitInfo.collider.transform.parent.gameObject;
if (ourHitObject.GetComponent<Hex>() != null)
{
Touch_Hex(ourHitObject);
}
else if (ourHitObject.GetComponent<Unit>() != null)
{
Touch_Unit(ourHitObject);
}
}
}
onlyTouched = false;
}
}
}
提前感谢
我花了一点时间才弄明白。。我创建了两个float start/endtime,并将started和end的时间分别放入其中,而不是在if语句中使用它们来检查它们之间的时间是否小于0.150。
float startTime;
float endTime;
void Update()
{
if (Input.touchCount > 0)
{
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
RaycastHit hitInfo;
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
startTime = Time.time;
}
//Debug.Log("Start time is: " + startTime);
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
endTime = Time.time;
//Debug.Log("End time is: " + endTime);
if (endTime - startTime < 0.150f)
{
if (Physics.Raycast(ray, out hitInfo))
{
GameObject ourHitObject = hitInfo.collider.transform.parent.gameObject;
if (ourHitObject.GetComponent<Hex>() != null)
{
Touch_Hex(ourHitObject);
}
else if (ourHitObject.GetComponent<Unit>() != null)
{
Touch_Unit(ourHitObject);
}
}
}
}
}
}
谢谢你的帮助,让我走上正轨干杯