void Update() { //float scale = Vector3.SqrMagnitude(cam.transform.position - transform.position); //scale = Mathf.Min(Mathf.Max(scaleBounds.x, scale), scaleBounds.y); //transform.localScale = scale * Vector3.one; uiElement.anchoredPosition = w2c.ConvertWorldToCanvas(worldPos); }
void Update() { Vector2 screenPos2 = w2c.ConvertWorldToCanvas(ship.transform.position); //Vector3 screenPos = cam.WorldToScreenPoint(ship.transform.position); //if (screenPos.z > 0 && // screenPos.x > 0 && screenPos.x < Screen.width && // screenPos.y > 0 && screenPos.y < Screen.height) //{ // Vector2 viewportPos = Camera.main.WorldToViewportPoint(ship.transform.position); // Vector2 screenPos2 = new Vector2( // ((viewportPos.x * canvasRect.sizeDelta.x) - (canvasRect.sizeDelta.x * 0.5f)), // ((viewportPos.y * canvasRect.sizeDelta.y) - (canvasRect.sizeDelta.y * 0.5f)) // ); if (screenPos2.x > w2c.canvasRect.rect.xMin + canvasBorder.x && screenPos2.x < w2c.canvasRect.rect.xMax - canvasBorder.x && screenPos2.y > w2c.canvasRect.rect.yMin + canvasBorder.y && screenPos2.y < w2c.canvasRect.rect.yMax - canvasBorder.y) { pointerRect.anchoredPosition = screenPos2 + 70f * Vector2.up; transform.rotation = Quaternion.identity; offset = true; } else // offscreen { Vector3 screenPos = cam.WorldToScreenPoint(ship.transform.position); if (screenPos.z < 0) { screenPos *= -1; } Vector3 screenCenter = 0.5f * new Vector3(Screen.width, Screen.height); screenPos -= screenCenter; float angle = Mathf.Atan2(screenPos.y, screenPos.x); angle += 90 * Mathf.Deg2Rad; Vector2 screenBounds = 0.5f * 0.9f * new Vector3(Screen.width, Screen.height); transform.localRotation = Quaternion.Euler(Vector3.forward * angle * Mathf.Rad2Deg); transform.localPosition += transform.up * 30f * (offset ? 1 : 0); offset = false; } }