Jump to content
UnitySpain
Sign in to follow this  
Guest

Problemas al bloquear y girar el FPSController

Recommended Posts

Guest

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;

}

}

}

 

Edited by pioj
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
Guest
15 hours ago, pioj said:

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.

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:

 

Quote

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.



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

scriptPrueba.png

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...