- Home /
Distance activated GUI
hi all, i was woundering if there is a way to active a gui object (like a button) when my character get close to it and deactivates when he is far and WITHOUT using colliders (they are just messy and difficult to use, they'll be my last resort).
My game is a space so it has to be able to go everywhere aswell
here is a copy of my GUI code:
var windowRect : Rect = Rect (20, 40, 127, 70); var icon : Texture2D; var customSkin : GUISkin; var target : Transform; var place1 : Transform; var place2 : Transform; var place3 : Transform; var place4 : Transform; var place5 : Transform;
function OnGUI () { GUI.skin = customSkin;
// Register the window. Notice the 3rd parameter windowRect = GUI.Window (0, windowRect, DoMyWindow, ""); }
// Make the contents of the window function DoMyWindow (windowID : int) {
GUI.Label (Rect (6, 1, 2500, 20), "Object In Area"); if (GUI.Button (Rect (10,20,100,20), "Harvest")){ print ("Got a click"); target = place1; } if (GUI.Button (Rect (15,40,100,20), "-Moon Mounter")){ print ("Got a click"); target = place2; } GUI.DragWindow (Rect (0,0,10000,10000));
}
function Update () { var targetPoint = target.position; var targetRotation = Quaternion.LookRotation (targetPoint - transform.position, Vector3.up); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 2.0);
}
Thank you in advance, Lachee
Answer by The_r0nin · Nov 18, 2010 at 12:13 PM
Use the Pythagorean theorem: SqRoot[(x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2]. This gives you the distance between 2 points in 3D-Space. If dist < trigger radius, then activate button. You might not want to do this every frame... but if you do it every half-second/quarter-second or so it won't affect your frame-rate that much...
Example:
var radiusOfButton: float = 20.0; var playerDist: float; var pPos: Vector3 = transform.position; var ePos: Vector3 = enemy.transform.position;
playerDist = Mathf.Sqrt((pPos.x-ePos.x)^2 + (pPos.y-ePos.y)^2 + (pPos.z-ePos.z)^2))
if (playerDist <= radiusOfButton){
if (GUI.Button(Rect(0,0,50,50),"Button")){
//Do Whatever
}
}
I added a quick example. Note that I only stored the player and enemy positions in another variable for ease of coding (it's not necessary); otherwise I'd have to do (transform.position.x - enemy.transform.position.x), etc.
thank you for helping. I can now use this to advance my gui! (once i debug the previous problem :])
Your answer
Follow this Question
Related Questions
Make GUI box appear and disappear 2 Answers
Appear after set number of seconds 2 Answers
The next problem with gui. 1 Answer
Hide/show GUI Buion 1 Answer
individual letters appear in GUI from a word from array 1 Answer