Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

Problemas al bloquear y girar el FPSController

Iniciado por Antonio Casas Rojas, Marzo 14, 2019, 10:00:11 PM

Tema anterior - Siguiente tema
Marzo 14, 2019, 10:00:11 PM Ultima modificación: Marzo 20, 2019, 03:49:49 AM por pioj
Muy buenas. Llevo un tiempo con el mismo problema y ,mirando otros foros, no he conseguido resolverlo. Estoy haciendo un juego en primera persona y cuando el jugador hace click en un objeto se activa otra cámara. Intento que cuando volvamos a nuestro jugador lo tengamos mirando hacia atrás desde la misma posición, pero, inevitablemente, el cursor vuelve a donde estaba mirando justo antes de haber activado el objeto. He probado muchas cosas como bloquear el FPC para así poder rotarlo, pero me vuelve a mirar al mismo sitio. Ya no se que más hacer. Les dejo el script. Espero que puedan ayudarme. Saludos.
 

public Camera camaraExterior;
public Camera camaraJugador;
public int valor=0;
public float distancia=2;
public GameObject  hoja;
public GameObject jugador;
 
public class activarObjeto : MonoBehaviour
 
public void recalcularMouse()
{
GameObject.Find("FPSController").GetComponent<MouseLook>().Init(transform, camaraJugador.transform);
}
void Start()
    {
 
}
 
void Update{
Ray ray = Camera.main.ViewportPointToRay(Vector3.one * 0.5f);
        RaycastHit hitInfo;
        if (Physics.Raycast(ray, out hitInfo, distancia))
 
if (Input.GetMouseButtonUp(0) && hitInfo.transform.CompareTag("hoja") && valor==0)
        {
hoja.SetActive(false);
camaraExterior.enabled = true;
camaraJugador.enabled=false;
 
GameObject.Find("FPSController").GetComponent<FirstPersonController>().enabled = false;
 
valor=1;
}
else if (Input.GetMouseButtonUp(0) &&  valor==1)
{
camaraExterior.enabled = false;
camaraJugador.enabled=true;
jugador.transform.Rotate(0, 180, 0);
 
recalcularMouse();
 
GameObject.Find("FPSController").GetComponent<FirstPersonController>().enabled = true;
 
valor=0;
}
}
}

 
 

Además de formatear el código correctamente, te pido que revises la sintaxis antes de pegarlo aquí, porque te falta corregir errores de cierre de llaves y de expected ';'...
 
Si has creado ya 2 vistas separadas (o presets de la vista) para esos momentos, no debería haber problema. Puede que en algún momento le estés dando siempre prioridad a que vuelva a la vista nº1, en lugar de la que tocara. Además, cuando cambias de vista, deberías también refrescar controles o posiciones, para asegurarte de que sólo se mueve el GameObject que quieres.

Marzo 20, 2019, 05:43:31 PM #2 Ultima modificación: Marzo 20, 2019, 07:19:31 PM por pioj
Cita de: pioj date=1553050398Además de formatear el código correctamente, te pido que revises la sintaxis antes de pegarlo aquí, porque te falta corregir errores de cierre de llaves y de expected ';'...
   
   
      Si has creado ya 2 vistas separadas (o presets de la vista) para esos momentos, no debería haber problema. Puede que en algún momento le estés dando siempre prioridad a que vuelva a la vista nº1, en lugar de la que tocara. Además, cuando cambias de vista, deberías también refrescar controles o posiciones, para asegurarte de que sólo se mueve el GameObject que quieres.
   


Perdón. El script que he enviado tiene errores ya que lo escribí directamente aquí porque el original lo tengo lleno de anotaciones y demás; y quise que fuera lo más legible posible. Lo he pasado a limpio y lo he probado en una escena distinta para comprobr que tiene el mismo error. La cosa es que leí en un foro que las coordenadas del cursor debían recalcularse o guardarse justo despues de girar el FPC y antes de activar el script del controlador; y para ello servía esto:
----> GameObject.Find("FPSController").GetComponent<MouseLook>().Init(transform, jugador.transform); <------

(La verdad es que he encontrado poquísima información de esto en internet).

En efecto, me guarda las coordenadas del cursor al volver al jugador. Sin embargo, el script del controlador de FirstPersonController no se activa y el jugador se queda ahí, mirando hacia atrás sin poder moverse. Además me salta el error:


 
 



   
      ArgumentException: GetComponent requires that the requested component 'MouseLook' derives from MonoBehaviour or Component or is an interface.
| |
ArgumentException: GetComponent requiere que el componente solicitado 'MouseLook' derive de MonoBehaviour o Component o sea una interfaz.
   

[/quote]
 


Sí aquí está la clave del problema, no se cómo hacer para que MouseLook tenga su origen en MonoBehaviour. Yo el que uso es Visual Studio. Les dejo el script comentado con el error o errores que no logro encontrar. Muchas gracias y saludos
 

Etiquetas: