How to differ between a mousedown over the map and a click on a GUI-Button
I want to pan my map when the user drag-and-drops the map of my game with his mouse. I have written this script to do so:
if (Input.GetMouseButton (0)) {
Vector3 currMousePosition = Input.mousePosition;
Vector3 mouseDelta = prevMousePosition - currMousePosition;
Vector3 newCamPos = new Vector3(
Mathf.Clamp(transform.position.x + mouseDelta.x * MouseScrollSpeed * Time.deltaTime, ScrollBottomLeft.x, ScrollTopRight.x),
transform.position.y,
Mathf.Clamp(transform.position.z + mouseDelta.y * MouseScrollSpeed * Time.deltaTime, ScrollBottomLeft.z, ScrollTopRight.z));
transform.position = newCamPos;
}
In addition, I have several GUI-Buttons appearing on the screen. What happens now is that when I position my mouse over one of those elements, mouse-down over it and move the mouse, my camera script is triggered. How can I determine if the mouse is over any GUI-Element or not and if so avoid scrolling! I'm looking for something like
if (Input.GetMouseButton (0) && <mouseNotOverGuiElements>) { <scroll> }
Answer by Craftnime · Aug 26, 2015 at 10:56 AM
You should make it so that all your game objects are a child of an empty parent (MAKE SURE WHEN YOU CREATE THAT EMPTY PARENT, IT IS AT POSITION 0,0,0 AND ROTATION 0,0,0 AND SIZE 1,1,1 BEFORE YOU MOVE THE REST TO IT). Once you do that you should add:
transform.root.BroadcastMessage("ThisFunctionNameShouldNotHaveTheSameNameAsAnyOtherFunctionInTheGameInAnyScript", true);
to the part of a script that activates the map being held by the cursor. then you should have an else option which has
transform.root.BroadcastMessage("ThisFunctionNameShouldNotHaveTheSameNameAsAnyOtherFunctionInTheGameInAnyScript", false);
Then do in the script you mentioned
function ThisFunctionNameShouldNotHaveTheSameNameAsAnyOtherFunctionInTheGameInAnyScript(stuff) {
PlsNotAffectThoseGUIButtons = stuff;
}
Then at the very beginning of your same script
var PlsNotAffectThoseGUIButtons = false;
then finally
if (Input.GetMouseButton (0) && PlsNotAffectThoseGUIButtons) { <scroll> }
Your answer
Follow this Question
Related Questions
Invert UI scrolling 1 Answer
Can't disable Mouse wheel's navigation actions,Can't disable Mouse wheel's navigation 0 Answers
Mouse or Touch events independent of framerate 0 Answers
Efficient way to use UGui.Overlap for a GUI Mouse 0 Answers
2d collisions physics not working when using mouse as input 0 Answers