Hola, quizas este video te puede ayudar si es que ya lo resolviste.
Girar alrededor u orbitar un objeto de juego en Unity 3D C #
Saludos.
Girar alrededor u orbitar un objeto de juego en Unity 3D C #
Saludos.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
Cita de: Ness date=1572478860Bueno en mi opinión, seria desactivar la cámara del jugador o el scritp del Player cuando estuvieras cerca del enemigo en cuestión que quieres fijar, luego emparentar esa cámara al enemigo, usar un Array almacenar el total de enemigos y una tag o algo para saber cual enemigo en especifico es el quieres fijar.
luego de emparentarlo la cámara al enemigo, le das distancia para que puedas ejecutar lo que gustes durante ese tiempo, por ultimo le das salida, todo y des-emparentas la cámara y se le devuelves al jugador, vuelves a activar el scritp de la cámara del jugador.
https://answers.unity.com/questions/715058/lock-target-and-orbit-it.html
Cita de: Antonio date=1572662890La cámara esa sencilla del CamaraPlayer
public class CamaraPlayer : MonoBehaviour
{
public float mouseSensitivity = 10f;
public float dstFromTarget = 2f;
public Vector2 pitchMininMax = new Vector2(-40, 85);
public float rotationSmoothTime = .12f;
Vector3 rotationSmoothVelocity;
Vector3 currentRotation;
float yaw;
float pitch;
public GameObject PLAYER;
public Transform target;
private void Awake()
{
PLAYER = GameObject.FindGameObjectWithTag("Player");
target = PLAYER.transform;
}
void LateUpdate()
{
yaw += Input.GetAxis("GiroHorizontalCamara") * mouseSensitivity;
yaw += Input.GetAxis("Mouse X") * mouseSensitivity;
pitch -= Input.GetAxis("MovVerticalCamara") * mouseSensitivity;
pitch -= Input.GetAxis("Mouse Y") * mouseSensitivity;
pitch = Mathf.Clamp(pitch, pitchMininMax.x, pitchMininMax.y);
currentRotation = Vector3.SmoothDamp(currentRotation, new Vector3(pitch, yaw), ref rotationSmoothVelocity, rotationSmoothTime);
transform.eulerAngles = currentRotation;
transform.position = target.position - transform.forward * dstFromTarget;
}
}
Está usando el valor yaw (que irá desde -infinito hacia +infinito aunque en la práctica, es de -360 a +360), es un ángulo que usas después para ponérselo a la Y en el transform.eulerAngles.
En este código, ese ángulo se modifica moviendo el ratón, pero si tuvieras un enemigo, o un objetivo específico al que apuntar la cámara, lo que necesitas es hallar el ángulo para que apunte a ese punto.
De modo que si tienes la X y Z de la posición del enemigo...
En ese código que tienes después de hacer la rotación, simplemente mueve la cámara a la posición del jugador y da unos pasos hacia atrás, luego según veo yo no haría falta hacer más modificaciones para el asunto de la rotación.
Para el pitch, la idea es igual, pero usando la distancia y la altura (Y) en lugar del X y Z. (Si haces algún enemigo volador pues puede que lo necesites, pero ten cuidado de aplicar también la línea del clamp o puede que la cámara empiece a dar vueltas raras y a ponerse bocabajo).
Otra cosa sería cuando hallar el yaw mediante trigonometría y cuando mover el yaw mediante el ratón, se puede hacer dos cámaras, o también podrías poner alguna variable Transform para el "objetivo" de la cámara, si es igual a null, moverla con el ratón, si es distinto de null, hallar el yaw con la fórmula.
Cita de: Igor date=1572351841hola
en ese script no se puede ver como el "player" gira para dar la espalda a la camara... supongo que esa parte esta en el script del player...
en el script tendria que hacer dos funciones, una para el control normal de la camara, y otra para cuando esta fijada...
tampoco has dicho como quieres fijarla... que se fije mientras mantengas pulsado un boton? y cuando lo sueltes que se "libere" la camara?
pues seria algo asi...
public class CamaraPlayer : MonoBehaviour
{
public float mouseSensitivity = 10f;
public float dstFromTarget = 2f;
public Vector2 pitchMininMax = new Vector2(-40, 85);
public float rotationSmoothTime = .12f;
Vector3 rotationSmoothVelocity;
Vector3 currentRotation;
float yaw;
float pitch;
public GameObject PLAYER;
public Transform target;
private Transform enemyTransform;//transform del enemy
public float enemyOffsetY = 3;
private void Awake()
{
PLAYER = GameObject.FindGameObjectWithTag("Player");
target = PLAYER.transform;
}
void LateUpdate()
{
//buscar el enemy mas cerca del centro de la pantalla
if (Input.GetMouseButton(1)) {
GetMoreCenteredEnemy();
}
//que se fije la camara mientras mantengas pulsado el boton derecho del raton
if (Input.GetMouseButton(1)) {
fixetToEnemy();
} else {
NormalCamera()
}
}
void NormalCamera() {
yaw += Input.GetAxis("GiroHorizontalCamara") * mouseSensitivity;
yaw += Input.GetAxis("Mouse X") * mouseSensitivity;
pitch -= Input.GetAxis("MovVerticalCamara") * mouseSensitivity;
pitch -= Input.GetAxis("Mouse Y") * mouseSensitivity;
pitch =