Как установить расстояние от камеры до масштабируемого объекта? - PullRequest
0 голосов
/ 30 августа 2018

Моя камера должна фокусироваться на GameObject, который можно масштабировать с течением времени. Как я могу вычислить положение камеры, чтобы она всегда находилась на одном и том же расстоянии от GameObject? Я уже пытался сделать что-то вроде

camera.position.y += object.scaleFactor / 2;
camera.position.z -= object.scaleFactor / 2;

Но чем больше становится объект, тем меньше он работает. Я думаю об использовании ограничительной рамки, как вы думаете, это будет работать?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 30 августа 2018
public class ObjectRelativeScale : MonoBehaviour
{
    public float objectScale = 1.0f;
    private Vector3 initialScale;

void Start()
{
    initialScale = transform.localScale;
}

void Update()
{
    Plane plane = new Plane(Camera.main.transform.forward, Camera.main.transform.position);
    float dist = plane.GetDistanceToPoint(transform.position);
    transform.localScale = initialScale * dist * objectScale;
}

}

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

https://gph.is/2Pfpg3g

ура!

0 голосов
/ 30 августа 2018

используйте это:

// compute this when scale is 1.0f
Vector3 originalPosition = camera.position;
Vector3 originalDistance = camera.position - gameObject.position;

// then use:
camera.position = originalPosition + originalDistance * gameObject.scaleFactor;

если это не сработает, пожалуйста, опишите вашу ситуацию более подробно, и я отредактирую ответ

например: если вы хотите, чтобы камера сохраняла расстояние до объекта, вам придется использовать BoundingSphere.radius:

// compute this when scale is 1.0f
Vector3 originalPosition = camera.position;
Vector3 temp = camera.position - gameObject.position;
Vector3 originalDirection = temp.normalized;
float originalDistance = temp.magnitude - boundingSphere.radius;

// use this when object is scaled:
camera.position = originalPosition + originalDirection * (boundingSphere.radius + originalDistance);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...