Advertisement
Kimeraweb

Click and go

Sep 29th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.29 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5.  
  6. public class Movimiento : MonoBehaviour {
  7.  
  8.     private Camera miCamara;
  9.     private IEnumerator camina;
  10.     private RaycastHit hitInfo; // Intencion de buscar en esa coordenada un objeto fisico con el comando Physics.Raycast(ray, out hitInfo, distancia 300f)
  11.  
  12.     // Use this for initialization
  13.     void Start () {
  14.         miCamara = GetComponentInChildren<Camera>();
  15.  
  16.         // Inicializando la variable para que en su primer uso no arroje NULL
  17.         Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);
  18.         Physics.Raycast(r, out hitInfo, 300f);
  19.         camina = caminar(hitInfo);
  20.     }
  21.    
  22.     // Update is called once per frame
  23.     void Update () {
  24.  
  25.         // Busco la coordenada en la pantalla del raton
  26.         Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);
  27.  
  28.         if (Input.GetMouseButton(0))
  29.         {
  30.             // Si encuentra un objeto fisico en esas coordenadas de la pantalla, devuelve las coordenadas del objeto fisico.
  31.             if (Physics.Raycast(r, out hitInfo, 300f))
  32.             {
  33.                 // Si ya hay una coroutine de "caminar", la paramos para crear otra nueva.
  34.                 // Esto sucede cuando el player quiere cambiar de direccion y aun esta desplazandose.
  35.                 try
  36.                 {
  37.                     if (camina.MoveNext())
  38.                         StopCoroutine(camina);
  39.                 }
  40.                 catch (System.NullReferenceException) { Debug.Log("'camina' no ha sido inicializada"); }
  41.                 catch (System.Exception e) { Debug.Log(e.GetType()); } // Acaso hubo otra excepcion?
  42.  
  43.                 camina = caminar(hitInfo);
  44.                 StartCoroutine(camina);
  45.                
  46.             }
  47.         }
  48.  
  49.         // Mover jugador en direccion a la coordenada X del raton.
  50.         // 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.
  51.         if (Input.mousePosition.x < (Screen.width / 10))
  52.         {
  53.             float velocidad = (Screen.width / 10) - Input.mousePosition.x;
  54.             girarPersonaje(0, velocidad);
  55.         }
  56.  
  57.         if (Input.mousePosition.x > (Screen.width - (Screen.width / 10)))
  58.         {
  59.             float velocidad = (Screen.width / 10) - (Screen.width - Input.mousePosition.x);
  60.             girarPersonaje(1,velocidad);
  61.         }
  62.  
  63.         // Mover la camara arriba y abajo.
  64.         // Misma logica que mirar izquierda y derecha.
  65.  
  66.         if (Input.mousePosition.y < (Screen.height / 10))
  67.         {
  68.             float velocidad = (Screen.height / 10) - Input.mousePosition.y;
  69.             girarCamara(0, velocidad);
  70.         }
  71.  
  72.         if (Input.mousePosition.y > (Screen.height - (Screen.height / 10)))
  73.         {
  74.             float velocidad = (Screen.height / 10) - (Screen.height - Input.mousePosition.y);
  75.             girarCamara(1, velocidad);
  76.         }
  77.  
  78.         //Debug.Log("X " + miCamara.transform.localRotation);
  79.  
  80.  
  81.  
  82.     }
  83.  
  84.     // Al hacer esto, el Jugador puede volar entre los puntos equidistantes.
  85.     IEnumerator caminar(RaycastHit coordenadas)
  86.     {
  87.  
  88.             Vector3 coordenadas_iniciales = this.transform.position;
  89.             Vector3 coordenadas_destino = new Vector3(coordenadas.point.x, coordenadas.point.y + 1.0f, coordenadas.point.z);
  90.  
  91.             // Interrumpir direccion actual para ser sustituido por una nueva.
  92.  
  93.             // tiempo =  distancia / velocidad
  94.  
  95.             float velocidad = 3f;
  96.             float distancia = coordenadas.distance;
  97.             float ahora = Time.time;
  98.  
  99.             float distancia_recorrida = 0f;
  100.             float fotograma = 0f;
  101.  
  102.             while (fotograma < 1f)
  103.             {
  104.                 distancia_recorrida = velocidad * (Time.time - ahora); // superficie = velocidad * tiempo
  105.                 fotograma = distancia_recorrida / distancia; // fotograma valores de 0.0 a 1.0
  106.  
  107.                  this.transform.position = Vector3.Lerp(coordenadas_iniciales, coordenadas_destino, fotograma * velocidad);
  108.  
  109.                 yield return fotograma;
  110.  
  111.         }
  112.     }
  113.  
  114.     void girarPersonaje (byte direccion, float velocidad)
  115.     {
  116.         if (direccion == 0)
  117.             transform.Rotate(Vector3.down * Time.deltaTime * velocidad);
  118.         else if (direccion == 1)
  119.             transform.Rotate(Vector3.up * Time.deltaTime * velocidad);
  120.  
  121.         // Debug.Log("Mouse Screen Point: " + Input.mousePosition.x + " , " + Input.mousePosition.y + " V: " + velocidad);
  122.  
  123.     }
  124.  
  125.     void girarCamara (byte direccion, float velocidad)
  126.     {
  127.         // Para que no se rompa las cervicales del cuello, solo podrá girar 90 grados la camara ;p
  128.         if (direccion == 0)
  129.         {
  130.             if (miCamara.transform.localRotation.x > 0.5 )
  131.                 return;
  132.  
  133.             miCamara.transform.Rotate(Vector3.right * Time.deltaTime * velocidad);
  134.             //Debug.Log("Xdown " + miCamara.transform.localRotation);
  135.         }
  136.         else if (direccion == 1)
  137.         {
  138.             if (miCamara.transform.localRotation.x < -0.5)
  139.                 return;
  140.             miCamara.transform.Rotate(Vector3.left * Time.deltaTime * velocidad);
  141.             //Debug.Log("Xup " + miCamara.transform.localRotation);
  142.         }
  143.  
  144.     }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement