- Home /
Touch screen coordinates is not same Rect class coordinates?
Hello everyone. Firstly sorry about my english. I'm developing a game for android platfom. I'm making gui controller for my game. I started to coding touch input. I have a problem with 'y' coordinate of screen for different class. Rect class is using top-left for (0,0)point of screen but touch input is using bottom-left of screen for (0,0) coordinates.
I'm making a button on GUI. My GUI.Button using my defined rectangle. Touch is using same rect for check. In this point, I have a problem.
simple example for my problem:
public Rect rectOfMyButton;//my rect defination for use later.
public GUIStyle myGuiStyle;
void Awake(){
//rect adjusment
rectOfMyButton = new Rect(0, 0, 200, 200);
}
void Update(){
if (Input.touchCount > 0) {
for(int i = 0; i < Input.touchCount; i++){
Touch toc = Input.GetTouch(i);
if (toc.phase == TouchPhase.Began) {
if(rectOfMyButton.Contains(toc.position)){
//Do what I want
}
}
}
}
}
void OnGUI(){
GUI.Button(rectOfMyButton, "", myGuiStyle);
}
I'm touching top-left of screen but game is not doing what I want. Because it's thinking rectangle is down of screen.
Here some example tutorial about this subject:
http://docs.unity3d.com/ScriptReference/Rect.html
http://unity3d.com/learn/tutorials/modules/beginner/platform-specific/multitouch-input
As a result, How can I fix this problem?
Answer by robertbu · Jul 17, 2014 at 07:30 PM
The Rect class is not the problem. The issue is that screen coordinates and GUI coordinates are not the same. And you nailed the difference when you point out where (0,0) is on each. To convert between the two you can do:
pos.y = Screen.height - pos.y;
Thanks for answer. Your solution simple and logical. Why unity is using different coordinate system for Gui?
Your answer
Follow this Question
Related Questions
GUI label dimensions bug 2 Answers
Need help understanding GUI and Rect.Contains interaction 0 Answers
'Button' is not a member of 'GUI' 1 Answer