...新手 学习Unity制作手机游戏,我有一个小的六角形网格地图,当触摸时,瓷砖会变成随机颜色。我有一个相机的脚本,用手指按下它并用两根手指放大。
我希望瓷砖只在一次触摸时改变颜色,而在平移或缩放相机时不会改变。我已经尝试了两天并用Google搜索出来,似乎无法弄明白。看起来很简单。
以下是当光线投射到达对象时从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是答案,但我无法解决。
干杯
答案 0 :(得分:0)
您需要使用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;
}
}
}