Сверху вниз фокус камеры с углом
Я делаю игру сверху вниз с камерой под углом 40 градусов. Что я хочу сделать, так это когда я щелкаю игровой объект, он перемещает камеру и помещает объект с левой стороны от центра обзора камеры независимо от его вращения. Так что я могу разместить меню на правой стороне. Как получить смещение камеры под углом, чтобы объект находился в средней левой части обзора камеры?
Прямо сейчас я использую lerp, но он выходит за пределы цели из-за угла камеры. Извините за вопрос нуба, я новичок в unity3d.
transform.position = Vector3.Lerp(transform.position, new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z), 0.1f);
1 ответ
Прежде всего, вы должны начать с нахождения точки, в которую будет перемещаться ваша камера.
В вашем случае это может быть упрощено до 2D-Space:
Не должно быть трудно найти тот.
использование
transform.forward
камеры, чтобы получить вектор (Vector3 cameraDir) направления, на которое смотрит ваша камераПовернуть на
horizontal fov / 4
вокруг оси у:
Vector3 cameraDirRotated = Quaternion.AngleAxis(hFov/4f, Vector3.up) * cameraDir;
-cameraDirRotated
будет вектор из куба в точку P, которую вы ищете, вы также можете масштабировать ее:Vector3 PtoMoveTo = cube.transform.position - cameraDirRotated.normalized * 5f;
Полный:
Vector3 FindCameraTarget(Transform targetObj, float hFov)
{
Vector3 cameraDir = transform.forward;
Vector3 cameraDirRotated = Quaternion.AngleAxis(hFov / 4f, Vector3.up) * cameraDir;
Vector3 target = targetObj.transform.position - cameraDirRotated.normalized * 5f;
return target;
}
Затем:
transform.position = Vector3.Lerp(transform.position, FindCameraTarget(target, 90f) , 2f * Time.deltaTime);
Для производительности вы можете сохранить этот целевой вектор один раз, если куб не движется. Поиск в интернете, как точно считать горизонтальные поля. Умножьте скорость на Time.timeDelta, если вы скачали в Update().