using System.Collections; using System.Collections.Generic; using UnityEngine; public static class CameraExtend { public static Vector3 WorldToCameraSpace(this Camera camera, Vector3 worldPos) { Vector4 camPos = camera.worldToCameraMatrix * worldPos.ToVector4(); return camPos.ToVector3(); } public static Vector3 CameraToViewportSpace(this Camera camera, Vector3 camPos) { Matrix4x4 proj = GL.GetGPUProjectionMatrix(camera.projectionMatrix, false); Vector4 clipPos = proj * camPos.ToVector4(); Vector3 ndcPos = (clipPos / clipPos.w); Vector3 viewPos = (ndcPos + Vector3.one) / 2f; return viewPos; } public static Vector3 CameraToScreenSpace(this Camera camera, Vector3 camPos) { Vector3 viewPos = camera.CameraToViewportSpace(camPos); Vector3 screenPos = new Vector3( viewPos.x * camera.pixelWidth, viewPos.y * camera.pixelHeight, viewPos.z ); return screenPos; } } public class CameraUtility : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } }