hola estoy intentando hacer una vista en primera persona como la de metroid prime pero tengo problemas de rotacion , ya proble con mathf.clamp() , pero nada alguna subjerncia de como pueda arreglarla?
using UnityEngine;
using System.Collections;
public class CamaraSamus : MonoBehaviour {
public float velocidad = 10f;
public float margen = 5f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
if (Input.mousePosition.y >= Screen.height - margen)
{
transform.Rotate(-Vector3.right * velocidad * Time.deltaTime , Space.Self );
}
if (Input.mousePosition.y <= margen)
{
transform.Rotate(Vector3.right * velocidad * Time.deltaTime , Space.Self );
}
if (Input.mousePosition.x >= Screen.width - margen)
{
transform.Rotate(Vector3.up * velocidad * Time.deltaTime , Space.Self );
}
if (Input.mousePosition.x <= margen)
{
transform.Rotate(-Vector3.up * velocidad * Time.deltaTime , Space.Self );
}
}
}
"problemas de rotacion"?, la sugerencia seria que uses mas de diez palabras mas para describir tu problema, nadie de entrada se va a poner a leer codigo ajeno si no sabe que tiene que buscar, podria ser cualquier cosa.
voy a ver si lo puedo explicar mejor hay alguna forma de que mi script pueda rotar como mouse look sin que este al ver objetos de escenas quede en diagonal? por que lo que sucede es que al no se como limitar la camara en los ejes vertical y horizontal por que no quiero hacer un mouse look "normal"
adjunto demo de la camara por si quedan dudas
test camara.rar
no se si te entendi bien con lo que el script pueda rotar como mouselook. si queres que no gire en diagonal trabaja mas los ifs vos sabes que si se llega a dar el giro horizontal no se puede dar el otro, usa
else, podes usas enums, flags(bool) o una funcion para salir de un giro o de otro.
void Girar(){
if (Input.mousePosition.y >= Screen.height - margen){
transform.Rotate(-Vector3.right * velocidad * Time.deltaTime , Space.Self );
return; //si de dio el giro sale de la funcion evitando el otro giro
}else if (Input.mousePosition.y <= margen){
transform.Rotate(Vector3.right * velocidad * Time.deltaTime , Space.Self );
return; //si de dio el giro sale de la funcion evitando el otro giro
}
//aca no se dio el giro vertical
if (Input.mousePosition.x >= Screen.width - margen){
transform.Rotate(Vector3.up * velocidad * Time.deltaTime , Space.Self );
}else if (Input.mousePosition.x <= margen){
transform.Rotate(-Vector3.up * velocidad * Time.deltaTime , Space.Self );
}
}
void Update()
{
Girar();
}
o podrias dentro del update con una flag
void Update(){
bool sedioGiro = false;
if (Input.mousePosition.y >= Screen.height - margen){
transform.Rotate(-Vector3.right * velocidad * Time.deltaTime , Space.Self );
sedioGiro = true; //si de dio el giro sale de la funcion evitando el otro giro
}else if (Input.mousePosition.y <= margen){
transform.Rotate(Vector3.right * velocidad * Time.deltaTime , Space.Self );
sedioGiro = true; //si de dio el giro sale de la funcion evitando el otro giro
}
if(!sedioGiro){
if (Input.mousePosition.x >= Screen.width - margen){
transform.Rotate(Vector3.up * velocidad * Time.deltaTime , Space.Self );
}else if (Input.mousePosition.x <= margen){
transform.Rotate(-Vector3.up * velocidad * Time.deltaTime , Space.Self );
}
}
}