public override void Invoke() { var targetPos = target.transform.position + offset; Vector3 viewPortPos = CameraUtility.CachedCamera().WorldToViewportPoint(targetPos); Vector2 screenPos = viewPortPos * canvasRect.sizeDelta; rect.anchoredPosition = screenPos; rect.gameObject.SetActive(viewPortPos.z > 0); }
public override void Invoke() { var targetWorld = target.transform.position + offset; var targetLocal = CameraUtility.CachedCamera().transform.InverseTransformPoint(targetWorld); // var thetaX = Mathf.Cos(targetLocal.) var polarX = Math.CartesianToPolar(targetLocal.ZX()); var polarY = Math.CartesianToPolar(targetLocal.ZY()); var quadX = Mathf.Tan(polarX.theta) * quadOffset; var quadY = Mathf.Tan(polarY.theta) * quadOffset; // quadX. // Vector3 viewPortPos = CameraUtility.CachedCamera().WorldToViewportPoint(targetPos); // Vector2 screenPos = viewPortPos * canvasRect.sizeDelta; rect.anchoredPosition = new Vector2(quadX, quadY); // Debug.Log($"target - local:{targetLocal}"); rect.gameObject.SetActive(targetLocal.z > 0); }
void OnEnable() { GetComponent <Canvas>().worldCamera = CameraUtility.CachedCamera(); }