Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Movimiento : MonoBehaviour {
- private Camera miCamara;
- private IEnumerator camina;
- private RaycastHit hitInfo; // Intencion de buscar en esa coordenada un objeto fisico con el comando Physics.Raycast(ray, out hitInfo, distancia 300f)
- // Use this for initialization
- void Start () {
- miCamara = GetComponentInChildren<Camera>();
- // Inicializando la variable para que en su primer uso no arroje NULL
- Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);
- Physics.Raycast(r, out hitInfo, 300f);
- camina = caminar(hitInfo);
- }
- // Update is called once per frame
- void Update () {
- // Busco la coordenada en la pantalla del raton
- Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);
- if (Input.GetMouseButton(0))
- {
- // Si encuentra un objeto fisico en esas coordenadas de la pantalla, devuelve las coordenadas del objeto fisico.
- if (Physics.Raycast(r, out hitInfo, 300f))
- {
- // Si ya hay una coroutine de "caminar", la paramos para crear otra nueva.
- // Esto sucede cuando el player quiere cambiar de direccion y aun esta desplazandose.
- try
- {
- if (camina.MoveNext())
- StopCoroutine(camina);
- }
- catch (System.NullReferenceException) { Debug.Log("'camina' no ha sido inicializada"); }
- catch (System.Exception e) { Debug.Log(e.GetType()); } // Acaso hubo otra excepcion?
- camina = caminar(hitInfo);
- StartCoroutine(camina);
- }
- }
- // Mover jugador en direccion a la coordenada X del raton.
- // Si el raton se encuentra en el 10% de la pantalla del lado derecho o izquierdo, giraremos al jugador. A más próximidad a los márgenes, más velocidad.
- if (Input.mousePosition.x < (Screen.width / 10))
- {
- float velocidad = (Screen.width / 10) - Input.mousePosition.x;
- girarPersonaje(0, velocidad);
- }
- if (Input.mousePosition.x > (Screen.width - (Screen.width / 10)))
- {
- float velocidad = (Screen.width / 10) - (Screen.width - Input.mousePosition.x);
- girarPersonaje(1,velocidad);
- }
- // Mover la camara arriba y abajo.
- // Misma logica que mirar izquierda y derecha.
- if (Input.mousePosition.y < (Screen.height / 10))
- {
- float velocidad = (Screen.height / 10) - Input.mousePosition.y;
- girarCamara(0, velocidad);
- }
- if (Input.mousePosition.y > (Screen.height - (Screen.height / 10)))
- {
- float velocidad = (Screen.height / 10) - (Screen.height - Input.mousePosition.y);
- girarCamara(1, velocidad);
- }
- //Debug.Log("X " + miCamara.transform.localRotation);
- }
- // Al hacer esto, el Jugador puede volar entre los puntos equidistantes.
- IEnumerator caminar(RaycastHit coordenadas)
- {
- Vector3 coordenadas_iniciales = this.transform.position;
- Vector3 coordenadas_destino = new Vector3(coordenadas.point.x, coordenadas.point.y + 1.0f, coordenadas.point.z);
- // Interrumpir direccion actual para ser sustituido por una nueva.
- // tiempo = distancia / velocidad
- float velocidad = 3f;
- float distancia = coordenadas.distance;
- float ahora = Time.time;
- float distancia_recorrida = 0f;
- float fotograma = 0f;
- while (fotograma < 1f)
- {
- distancia_recorrida = velocidad * (Time.time - ahora); // superficie = velocidad * tiempo
- fotograma = distancia_recorrida / distancia; // fotograma valores de 0.0 a 1.0
- this.transform.position = Vector3.Lerp(coordenadas_iniciales, coordenadas_destino, fotograma * velocidad);
- yield return fotograma;
- }
- }
- void girarPersonaje (byte direccion, float velocidad)
- {
- if (direccion == 0)
- transform.Rotate(Vector3.down * Time.deltaTime * velocidad);
- else if (direccion == 1)
- transform.Rotate(Vector3.up * Time.deltaTime * velocidad);
- // Debug.Log("Mouse Screen Point: " + Input.mousePosition.x + " , " + Input.mousePosition.y + " V: " + velocidad);
- }
- void girarCamara (byte direccion, float velocidad)
- {
- // Para que no se rompa las cervicales del cuello, solo podrá girar 90 grados la camara ;p
- if (direccion == 0)
- {
- if (miCamara.transform.localRotation.x > 0.5 )
- return;
- miCamara.transform.Rotate(Vector3.right * Time.deltaTime * velocidad);
- //Debug.Log("Xdown " + miCamara.transform.localRotation);
- }
- else if (direccion == 1)
- {
- if (miCamara.transform.localRotation.x < -0.5)
- return;
- miCamara.transform.Rotate(Vector3.left * Time.deltaTime * velocidad);
- //Debug.Log("Xup " + miCamara.transform.localRotation);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement