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?

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;