Estoy confundido si usar Rotate() y .rotation entrarán en conflicto entre sí.
Estoy moviendo una transformación para apuntar a un objetivo automáticamente con .rotation y cuando elijo mover manualmente, uso Rotate(). Pero después de detener el control manual y usar el modo automático, la transformación se compensará con el movimiento manual que había hecho. Entonces Rotate() está agregando desplazamiento. El control manual no importa lo que sea preciso. La orientación automática se agrega un desplazamiento después de usar el control manual.
Aquí está el código para el control manual.
xDif = Input.GetAxis("Mouse X") * mouseSensitivity.x; yDif = -Input.GetAxis("Mouse Y") * mouseSensitivity.y; float zDif = 0; // <-- gets changed with buttons transformToMove.Rotate(new Vector3(yDif, xDif, zDif));Aquí está el código para la segmentación automática
/// Returns true if the transform has been successfully oriented to fire at the current target. private bool TrackTarget(out Vector3 hitPosition, out float hitTime) { hitPosition = Vector3.zero; hitTime = -1.0f; if (!IsTargetValid(currentTarget)) { state = TransformState.NoTarget; return false; } if (!GetFiringDirectionToHitTarget(currentTarget, out Vector3 firingDirection, out hitPosition, out hitTime)) { return false; } Quaternion desiredRotation = Quaternion.LookRotation(invertFiringDirection ? -firingDirection : firingDirection); Quaternion currentRotation = transformToMove.rotation; float maxDeltaAngle = maxRotationDegreesPerSecond * Time.fixedDeltaTime; transformToMove2.rotation = Quaternion.RotateTowards( currentRotation, desiredRotation, maxDeltaAngle );Parece que la variable desiredRotation está siendo influenciada por la rotación actual del jugador. Su desiredRotation se establece en función de LookRotation() de una dirección de firingDirection . ¿Su método GetFiringDirectionToHitTarget() está usando la posición actual del jugador, por casualidad?
Básicamente fue un error "estúpido". En mi control manual, estaba aplicando la rotación a transformToMove y en el Editor se aplicó a un elemento secundario de la transformación principal. Entonces, obviamente, habría un desplazamiento si la rotación inicial es para el padre ( transformToMove2 ).
Perdón por esto, dejaré la publicación para enseñar Unity e incluso programadores en el futuro. Que no importa cuántas veces revise su código y lo refactorice, la solución puede estar justo frente a sus ojos. Por ejemplo, usando la transformación incorrecta...