Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by TurboHermit · Mar 03, 2014 at 03:33 PM · rotationguilookatworld space

GUI Element pointing toward object in world

Hi, I'm trying to pull off an interface arrow pointing toward an object in world space. The arrow is already on the location of the object and it also clamps to the edge of the screen, meaning it already indicates where the object is. My only problem is the rotation. I've tried using GUIUtility.RotateAroundPivot together with Vector2.Angle, but honestly I don't really know if it can be done this way or if I'm just miscalculating the whole thing.

This is what I'm currently doing, which results in behaviour I can't really explain.

                     float TempAngle = Vector2.Angle(targetPos, ActualPos);
                     GUIUtility.RotateAroundPivot(-TempAngle, targetPos);

With targetPos being the clamped WorldToScreenPoint of the object and ActualPos being the unclamped version. Anyone ever tried something like this before? I coudn't find it anywhere.

Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image TurboHermit · Mar 03, 2014 at 04:40 PM 0
Share

That said, I don't even understand what GUIUtility.RotateAroundPivot does at all.

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by robertbu · Mar 03, 2014 at 06:07 PM

It is a bit of example code that might help you. It assumes the right side of your texture is what is pointing. It rotates the specified texture (tex) around its middle. 'pivot' is in screen coordinates and is the position to place the texture. 'target' is the game object to follow. Initialize it through drag and drop or add code to Start to find the object:

 #pragma strict
 
 var tex : Texture2D;    // Texture to be rotated
 var target : Transform; // GameObject to point to
 var pivot : Vector2;    // Where to place the center of the texture
 
 private var rect : Rect;
  
 function Start() {
     rect = new Rect(pivot.x - tex.width * 0.5f, pivot.y - tex.height * 0.5f, tex.width, tex.height);
 }
  
 function OnGUI() {
     if (Event.current.type == EventType.Repaint) {
         var dir = Camera.main.WorldToScreenPoint(target.position);
         dir.y = Screen.height - dir.y;
         dir = dir - pivot;  
         var angle = Mathf.Atan2(dir.y, dir.x)  * Mathf.Rad2Deg;
 
         var matrixBackup = GUI.matrix;
         GUIUtility.RotateAroundPivot(angle, pivot);
         GUI.DrawTexture(rect, tex);
         GUI.matrix = matrixBackup;
     }
 }
Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image robertbu · Mar 03, 2014 at 06:11 PM 0
Share

A C# translation:

 using UnityEngine;
 using System.Collections;
 
 public class GUIPointer : $$anonymous$$onoBehaviour {
 
     public Texture2D tex;    // Texture to be rotated
     public Transform target; // GameObject to point to
     public Vector2 pivot;    // Where to place the center of the texture
     
     private Rect rect;
     
     void Start() {
         rect = new Rect(pivot.x - tex.width * 0.5f, pivot.y - tex.height * 0.5f, tex.width, tex.height);
     }
     
     void OnGUI() {
         if (Event.current.type == EventType.Repaint) {
             Vector2 dir = Camera.main.WorldToScreenPoint(target.position);
             dir.y = Screen.height - dir.y;
             dir = dir - pivot;  
             float angle = $$anonymous$$athf.Atan2(dir.y, dir.x)  * $$anonymous$$athf.Rad2Deg;
             
             var matrixBackup = GUI.matrix;
             GUIUtility.RotateAroundPivot(angle, pivot);
             GUI.DrawTexture(rect, tex);
             GUI.matrix = matrixBackup;
         }
     }
 }

Your answer

Hint: You can notify a user about this post by typing @username

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

Answers Answers and Comments

20 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Look at around one axis in local space 1 Answer

Rigidbody constraints in local space? 7 Answers

Look At with SmoothDamp 1 Answer

How do I fix gravity going down(-y) not down form player rotation? I mean if player is rotated in any direction, gravity will go to that direction. 0 Answers

Object isnt rotating when moving towards an object 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges