我们正在开发一款基于触控的Android应用程序,用于Unity3D和C#,可根据触摸颜色部分覆盖Flood Fill。
问题是,虽然在大多数设备上触摸工作都很顺利,但在特别是三星Note 5和S6上,只需轻点几下即可注册单个触控。为了扩大这种混淆,当我们在这些设备上尝试其他类似的应用程序时,它们完全没有问题。
这是我们用于触摸的代码。它基本上是一个点击屏幕的简单光线投射。我们尝试使用mousePosition和GetTouch。
if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.GetTouch(0).position), out hit, Mathf.Infinity)) {
Renderer rend = hit.transform.GetComponent<Renderer> ();
MeshCollider meshcol = hit.collider as MeshCollider;
myImage = Instantiate (rend.material.GetTexture ("_MainTex")) as Texture2D;
Vector3 texCoord = hit.textureCoord;
float scaleX = rend.material.GetTextureScale ("_MainTex").x;
float scaleY = rend.material.GetTextureScale ("_MainTex").y;
float deg = rend.material.GetFloat ("_RotationDegrees");
deg *= Mathf.Rad2Deg;
texCoord.x = (((texCoord.x * scaleX + rend.material.GetTextureOffset ("_MainTex").x)));
texCoord.y = (((texCoord.y * scaleY + rend.material.GetTextureOffset ("_MainTex").y)));
#region ROTATION
float s = Mathf.Sin ((deg * Mathf.PI) / 180);
float c = Mathf.Cos ((deg * Mathf.PI) / 180);
Vector2 temp = new Vector2 (texCoord.x, texCoord.y);
temp.x -= 0.5f;
temp.y -= 0.5f;
float xnew = temp.x * c + temp.y * s;
float ynew = -temp.x * s + temp.y * c;
temp.x = xnew + 0.5f;
temp.y = ynew + 0.5f;
texCoord.x = temp.x;
texCoord.y = temp.y;
#endregion
texCoord.x *= myImage.width;
texCoord.y *= myImage.height;
FloodFiller.RevisedQueueFloodFill (myImage, (int)texCoord.x, (int)texCoord.y, GameplayConstants.currentColor, false);
// penSprite.GetComponent<Animation> ().Play ();
rend.material.mainTexture = myImage;
}
我们甚至使用了一个检测DPI的脚本并动态更改Unity UI灵敏度,但这也无济于事。事实上,我们的其他设备具有相似的DPI级别。
感谢任何帮助!