Created
December 19, 2017 12:08
-
-
Save snlehton/27d2aa9591588fdacf75c8ab65bfb5f4 to your computer and use it in GitHub Desktop.
A simple Unity example script that makes a UI component track position of world space object rendered with specific world space camera. Canvas needs to be in Screen Space Camera mode.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// A simple Unity example script that makes a UI component track position of world space object rendered with | |
// specific world space camera. Canvas needs to be in Screen Space Camera mode. | |
[ExecuteInEditMode] | |
public class UIFollow : MonoBehaviour | |
{ | |
[Tooltip("World space object to follow")] | |
public GameObject target; | |
[Tooltip("World space camera that renders the target")] | |
public Camera worldCamera; | |
[Tooltip("Canvas set in Screen Space Camera mode")] | |
public Canvas canvas; | |
private void LateUpdate() | |
{ | |
var rt = GetComponent<RectTransform>(); | |
RectTransform parent = (RectTransform)rt.parent; | |
var vp = worldCamera.WorldToViewportPoint(target.transform.position); | |
var sp = canvas.worldCamera.ViewportToScreenPoint(vp); | |
Vector3 worldPoint; | |
RectTransformUtility.ScreenPointToWorldPointInRectangle(parent, sp, canvas.worldCamera, out worldPoint); | |
rt.position = worldPoint; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Can we do this the other way around? Like the world space object follow the UI object.