Объект относится к типу спутника, поэтому у меня есть скрипт для перемещения объекта по орбите с использованием его положения. У меня также есть скрипт для перемещения объекта спутника в режиме от первого лица.
Проблема в том, что пользователь не может перемещать камеру по оси «Мышь X» и «Мышь Y» для режима от первого лица. Проблема возникает из-за того, что сценарий орбиты и сценарий от первого лица управляют камерой, поэтому она не может двигаться. В игре, когда вы перемещаете мышь, вы видите рывок камеры, и когда я отключаю скрипт орбиты, работает первый человек.
Как я могу решить эту проблему?
Решением может быть использование только положения для орбиты и вращения для контроля от первого лица ?? Режим от первого лица не будет контролировать положение объектов только вращением. Орбита не будет контролировать только вращение объектов.
Спасибо!
Орбитальный скрипт
private void FixedUpdate()
{
transform.RotateAround(centerOfOrbit.position, orbitAxis, orbitSpeed * Time.deltaTime);
desiredOrbitPosition = (transform.position - centerOfOrbit.position).normalized * orbitRadius + centerOfOrbit.position;
transform.position = Vector3.MoveTowards(transform.position, desiredOrbitPosition, Time.deltaTime * orbitAdjustSpeed);
}
Управление режимом от первого лица (не работает с орбитой)
private void Update()
{
if(allowFirstPerson)
{
x+= Input.GetAxis ("Mouse X") * turnSpeed;
if (allowTiltingForward)
{
y -= Input.GetAxis("Mouse Y") * turnSpeed;
}
y = ClampAngle(y, minVerticalAngle, maxVerticalAngle);
if (minHorizontalAngle != 0 || maxHorizontalAngle != 0)
{
x = ClampAngle(x, minHorizontalAngle, maxHorizontalAngle);
}
Quaternion rotation = Quaternion.Euler(y, x, 0);
Vector3 direction = (rotation * Vector3.forward * 100);
aimPoint = new Vector3(direction.x + aimError, direction.y + aimError, direction.z + aimError);
aimDir = (aimPoint - playerCamera.transform.position).normalized;
}
}
Этот элемент управления режима Top View работает со сценарием Orbit, но вид сверху не использует те же элементы управления, что и от первого лица, но я не могу понять, почему один работает, а другой - нет.
Управление режимом просмотра сверху (работает с орбитой)
private void Update()
{
if(allowTopView)
{
Ray ray = playerCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
topDownAimPoint = new Vector3(0,0,0);
if(Physics.Raycast(ray, out hit))
{
topDownAimPoint = hit.point;
}
aimPoint = new Vector3(topDownAimPoint.x + aimError, topDownAimPoint.y + aimError, topDownAimPoint.z + aimError);
}
}