public Vector3 ScreenToWorldPoint(Vector3 position) {
float x = (2.0f * position.x / Camera.main.pixelWidth) - 1.0f;
float y = (2.0f * position.y / Camera.main.pixelHeight) - 1.0f;
float z = position.z * 2 - 1;
Vector3 clip = new Vector3(x, y, -1.0f);
Matrix4x4 viewInverse = Camera.main.cameraToWorldMatrix;
Matrix4x4 projectionInverse = Matrix4x4.Inverse(Camera.main.projectionMatrix);
Matrix4x4 viewProjectionInverse = viewInverse * projectionInverse;
Vector3 worldPoint = viewProjectionInverse.MultiplyPoint(clip);
return worldPoint;
}
参考:How calculated ScreenToWorldPoint - Questions & Answers - Unity Discussions