我希望瓷砖(我的地图上的物体)只能在一次触摸时改变颜色,而在我平移或缩放相机时不会改变。我已经尝试了两天并用Google搜索出来,似乎无法弄明白。看起来很简单。
我已经获得了修复此问题的代码,但现在我需要添加时间延迟,因为原始代码对触摸过于敏感。我在考虑一个" if(触摸时间> 200ms){不做任何事情}其他{做东西}或类似的东西。
以下是我的主题:
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;
}
}
}
提前致谢
答案 0 :(得分:0)
我通过一些修补来弄清楚..我创建了两个浮动开始/结束时间并将开始和结束的时间分别放在这些中,而不仅仅是在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);
}
}
}
}
}
}
感谢您帮助我走上正轨 干杯