Unity Input.Touches 如果按住 touch 则不执行任何操作
本文关键字:执行 任何 操作 touch Input Touches 如果 Unity | 更新日期: 2023-09-27 17:57:23
新手...学习Unity制作手机游戏,我有一个小的六角网格地图,当触摸瓷砖时会变成随机颜色。我有一个脚本,让相机用手指按压来移动它,用两根手指放大一个。
我希望磁贴只在单次触摸时更改颜色,而不会在平移或缩放相机时更改。我已经尝试了两天,用谷歌搜索了自己,似乎无法弄清楚。这似乎很简单。
下面是当光线投射击中对象时从 Update() 调用的代码。这只会改变十六进制的颜色,但我希望它只在不平移或缩放相机时执行此操作。
void Touch_Hex(GameObject ourHitObject)
{
Touch[] touches = Input.touches;
if (touches[0].phase == TouchPhase.Ended)
{
MeshRenderer mr = ourHitObject.GetComponentInChildren<MeshRenderer>();
mr.material.color = color[Random.Range(0, color.Length)];
}
}
我已经尝试了所有不同的阶段组合等,但无法让它按照我想要的方式工作。我认为deltaTime或deltaPostion是答案,但我无法解决。
干杯
您需要使用 boolean
变量和 touches[0].phase == TouchPhase.Moved
的组合。当touches[0].phase == TouchPhase.Moved
true
时,您的输入现在被视为无效。然后,您可以将变量设置为 boolean
true
或 false
稍后使用它来决定是否更改颜色。
bool onlyTouched;
void Update()
{
if (Input.touchCount > 0)
{
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
RaycastHit hit;
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
//Touched
onlyTouched = true;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
//Moved Finger (Now Invalid!)
onlyTouched = false;
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
//Check if only touched then change color
if (onlyTouched)
{
Debug.Log("Only touched Finger");
//MeshRenderer mr = ourHitObject.GetComponentInChildren<MeshRenderer>();
//mr.material.color = color[Random.Range(0, color.Length)];
if (Physics.Raycast(ray, out hit))
{
if (hit.transform != null)
{
MeshRenderer mr = hit.transform.gameObject.GetComponentInChildren<MeshRenderer>();
mr.material.color = color[Random.Range(0, color.Length)];
//hit.transform.GetComponent<MeshRenderer>().material.color = Color.red;
}
}
}
else
{
Debug.Log("Finger was moved while touching");
}
//Reset onlyTouched for next read
onlyTouched = false;
}
}
}