Узнать ширину и высоту камеры мира? - PullRequest
0 голосов
/ 22 сентября 2019

Итак, вот моя проблема в двух словах: я хочу знать, как появляется объект в середине экрана, что означает, что я хочу найти значения ширины и высоты экрана в мировых единицах.

Положение камеры: 0,23, -10

Вращение камеры: 60,0,0

Итак, я попробовал это:

Vector3 screenWorldSize = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, -10));

// In the Update function
If(Input.GetKeyDown(Keycode.P))
{
GameObject tempObject = Instantiate(gamePrefab);
tempObject.transform.position = new Vector3(screenWorldSize.x, 1.5f, 10f);
}

НоПоложение tempObject неверно (не посередине), поэтому я попытался Debug.Log(screenWorldSize), и я получил этот результат (-10.3, 28.8, -20.0)

Я попытался использовать Camera.main.ViewPortToWorldPoint() с (0,0,-10) и (1,0,-10), и я получилпочти тот же результат.

Вот изображение сцены .. Scene Image

Есть что-то, чего я не понимаю? Как получить края экрана в мировых точках?

1 Ответ

0 голосов
/ 23 сентября 2019

Очень просто.Вам не нужны ширина и высота, вам просто нужно направление.

// this is a vector matching the camera's direction
Vector3 cameraDirection = Camera.main.transform.rotation * Vector3.forward;
// this is the camera position
Vector3 cameraPosition = Camera.main.transform.position;

Если вы хотите просто создать объект на определенном расстоянии от камеры, вы можете сделать это, чтобы получить его положение

Vector3 position = cameraPosition + cameraDirection * distance;

Если вы хотите создать объект на другом объекте, на который указывает камера, вам понадобится:

RaycastHit hit;
if (Physics.Raycast(cameraPosition, cameraDirection, out hit))
{
    Vector3 position = hit.point;
    [..]
}
...