x


Get Mouse Position GUI

Hi, all! I would like to do this: I have a GUITexture titled 'arrow', and I want it to set its transform.position.y to the transform.position.y of whatever GUILabel the mouse is currently hovering over. Is this possible? How so?

EDIT I have changed the code... The only problem I have now is that when the event fires, the arrow disappears from view, like the y value is off... What's up with that?

The latest bit of code (Edit #3)

@script ExecuteInEditMode;
var skin : GUISkin;
var Choice3 : Rect;
var Choice2 : Rect;
var Choice1 : Rect;
var Answer : Rect;
var Arrow : GUITexture;
var mousePos_2D : Vector2;
function OnGUI(){
    if(skin){
       GUI.skin = skin;
       }else{
       Debug.Log("You Forgot To Add A Skin!");
       }

    GUI.Label(Answer,"How are you today?");
    GUI.Label(Choice1,"Well, Thank You");
    GUI.Label(Choice2,"Do I know you?");
    GUI.Label(Choice3,"I am sad.");
    if(Choice1.Contains(mousePos_2D)){
       Arrow.transform.position.y = Choice1.y;
       Debug.Log("Switched");
       }


}
function Update(){
 mousePos_2D = Vector2(Input.mousePosition.x, (Screen.height - Input.mousePosition.y));
 }
more ▼

asked Dec 17 '11 at 01:59 AM

Youngapprentice gravatar image

Youngapprentice
108 21 26 27

you want a custom mouse cursor so that your arrow follows mouse or you want the arrow to 'highlight' current dialog option?

Dec 17 '11 at 12:06 PM 4illeen

I most definitely want to highlight

Dec 17 '11 at 03:16 PM Youngapprentice
(comments are locked)
10|3000 characters needed characters left

3 answers: sort voted first

Alright. I got the script running quite well! I just had to change the transform into pixelInset.

Thanks for the help guys! -YA

The completed script

@script ExecuteInEditMode;
var skin : GUISkin;
var Choice3 : Rect;
var Choice2 : Rect;
var Choice1 : Rect;
var Answer : Rect;
var Arrow : GUITexture;
var makeup : float;
var mousePos_2D : Vector2;
function OnGUI(){
    if(skin){
       GUI.skin = skin;
       }else{
       Debug.Log("You Forgot To Add A Skin!");
       }

    GUI.Label(Answer,"How are you today?");
    GUI.Label(Choice1,"Well, Thank You");
    GUI.Label(Choice2,"Do I know you?");
    GUI.Label(Choice3,"I am sad.");
    if(Choice1.Contains(mousePos_2D)){
       Arrow.pixelInset = Rect(108,Screen.height - Choice1.y - makeup,16,16);
       Debug.Log("Switched");
       }
    if(Choice2.Contains(mousePos_2D)){
       Arrow.pixelInset = Rect(108,Screen.height - Choice2.y - makeup,16,16);
       Debug.Log("Switched");
       }
    if(Choice3.Contains(mousePos_2D)){
       Arrow.pixelInset = Rect(108,Screen.height - Choice3.y - makeup,16,16);
       Debug.Log("Switched");
       }


}
function Update(){
 mousePos_2D = Vector2(Input.mousePosition.x, (Screen.height - Input.mousePosition.y));
 }

I ended up having to make the 'makeup' variable to keep the arrow aligned with the text

more ▼

answered Dec 17 '11 at 07:18 PM

Youngapprentice gravatar image

Youngapprentice
108 21 26 27

(comments are locked)
10|3000 characters needed characters left

I am not sure I get this right so I will say considering your "I most definitely want to highlight". So this is going to highlight or change the color of the text when you hover the mouse on top of it like you would get on the menu of a game. I would use a 3DText for your words then add a box collider to each of them and then finally:

function OnMouseEnter(){
   renderer.material.color = Color.blue;
}
functionOnMouseExit(){
   renderer.material.color = Color.white;
}

This consider that the original color is white and it turns blue when you place the cursor on top of it and gets back to white when you leave. Once again, I am not sure of what you want, just trying to help though.

more ▼

answered Dec 17 '11 at 03:35 PM

fafase gravatar image

fafase
10.5k 9 15 41

Haha. A bit of a hack solution, but it would work... Still, it is not versatile enough for what I would want to do... Please check my main post, and maybe you'll get a better idea of what I'm talking about. Thanks man!- YA

Dec 17 '11 at 03:41 PM Youngapprentice

Yep the picture wasn't there (or did not show up) when I posted this.

Dec 17 '11 at 03:43 PM fafase
(comments are locked)
10|3000 characters needed characters left

Ok I know what you mean now. You are almost there.

if(Choice1.Contains(Input.mousePosition))

This line means that if your mouse cursor is somewhere in the area of Rect called Choice1 it will do something. Since you want it to work for your labels, I suggest to define them all, so you don't have to write the same stuff again and again. So add (160,300,350,70) coords to your Choice1 variable - same for all the others (Choice2, Choice3 etc)

Then it should look like this

GUI.Label(Choice1,"How are you today?");
    GUI.Label(Choice2,"Well, Thank You");
    GUI.Label(Choice3,"Do I know you?");
    GUI.Label(Choice4,"I am sad.");
    if(Choice1.Contains(Input.mousePosition)){
       Arrow.transform.position.y = Choice1.Y;
       Debug.Log("Switched");
       }

Tell me if this works because I'm not a java guy

more ▼

answered Dec 17 '11 at 12:19 PM

4illeen gravatar image

4illeen
63 33 36 38

Although this does not work, I makes my life easier, because I get to set the values in the inspector like Lo0NuhtiK said. SO MUCH EASIER THANK YOU!

Sadly, this did not fix my problem. But we are much closer now. The debug.Log is triggering, just not in the expected area. I will edit my main post, add the updated code (see Code#2) and supply a picture about what is happening. thanks for the help so far, guys! - YA

Dec 17 '11 at 03:34 PM Youngapprentice
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x3695
x984
x886
x535

asked: Dec 17 '11 at 01:59 AM

Seen: 2788 times

Last Updated: Dec 17 '11 at 10:08 PM