Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales

francoe1

Registrados
  • Content Count

    778
  • Joined

  • Last visited

  • Days Won

    56

francoe1 last won the day on January 17

francoe1 had the most liked content!

Community Reputation

483 Excellent

About francoe1

  • Rank
    Experto

Profile Information

  • Especialidad
    Coder

Recent Profile Visitors

2,488 profile views
  1. Fíjate que deje un link con el código que utilizé para llegar a ese resultado.
  2. Te dejo el código más un video demostrativo de la implementación que te estamos comentando. https://paste.ofcode.org/8qR7JPkKkDexMtEfcCV5a3 Espero te sirva :)
  3. @Jhonatan00_00 te estás complicando demasiado por algo simple. 1º Deberías resolver el problema de la dirección relativa, esto es simple, unity tiene un función TransformDirection que permite transformar direcciones locales a direcciones globales. Sabiendo esto te darás cuenta que para que la dirección del AXIS sea relativa a la cámara deberias transformar su dirección. Vector3 axis = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); axis.Normalize(); axis = cameraTransform.trasformDirection(axis); Ya puedes utilizar axis como vector de dirección relativo a la camara. 2º Ahora deberias tener un look target, esto seria, posición actual del jugador más dirección Vector3 lookTarget = playerTransform.position + axis; Con esto puedes empezar a crear la lógica de ángulos que comentamos arriba, para comparar los ángulos deberias sacar la diferencia entre playerTransform.forward y axis. Vector3 angleDiff = axis - playerTransform.forward; Ahora tenes los 3 valores necesarios para la lógica.. if(Mathf.Abs(angleDiff.y) < 5) playerTransform.Translate(axis * speed * Time.deltaTime); playerTransform.rotation = Quaternion.Lerp(playerTransform.rotation, Quaternion.Look(lookTarget, Vector3.up), 15 * Time.deltaTime);
  4. Esto es algo que subí hace unos días a instagram. Para que la cámara funcione correctamente tenes tener múltiples axis disponibles, por lo que la mejor idea es ir anidando la camara. 1 Nivel - Rotación X 2 Nivel - Rotación Y 3 Nivel - Rotación Z 4 Nivel - Retroceso 5 Nivel - Respiración 6 Nivel - Movimientos de Pasos. De esta manera lo resolvi fácil y el movimiento queda fluido, existe otra técnica que es un poco más compleja, pero al final termina realizando los mismo cálculos. Recuerda siempre rotar y mover los niveles en su espacio local.
  5. Para esta práctica necesitas 2 "eventos", MouseUp y MouseDown. private void Update() { if (Input.GetMouseButton(0)) // Si fuera DOWN se ejecutaria 1 vez. De esta menera detecta si el mouse esta siendo presionado. { } if (Input.GetMouseButtonUp(0)) { } } Teniendo esto ahora necesitarás un factor, número del 0 al 1 que será utilizado para multiplicar el valor máximo que desees. Para esto la forma más simple y de alguna manera "segura" es utilizando Time.deltaTime para incrementar una variable. Dentro de el bloque IF del mouse "DOWN". time_amount += Time.deltaTime; Dentro de el bloque IF del mouse UP OnFinishEvent(time_amount); time_amount = 0; La función OnFinishEvent es donde ejecutaras la mecanica necesario, multiplicando time_amount normalizado * el maximo valor permitido.
  6. El "efecto" que estas buscando es el mismo que el de Super Mario 64, lamento comentarte que existen múltiples problemas matemáticos a solventar, primero vamos a diferenciar los dos tipos.. La dirección del jugador en el eje FORWARD es relativa a la camara. La dirección del jugador en el efe FORWARD es absoluta a la camara. En la forma (1) vas a tener que ver la diferencia angular absoluta sobre el eje Y entre la cámara y el jugador. float diff = Mathf.Abs(cam.angle.y - player.angle.y); Teniendo la diferencia puedes crear el comportamiento necesario para compensar la rotación con el movimiento. player.angle.y = Mathf.Lerp(player.angle.y, cam.angle.y, lerp_time); if (diff < 2) MovePlayer(); Esta explicación es la que te dimos anteriormente, a diferencia que se intenta crear un valor "factor" para que la rotación no sea constante. En la forma (2) vas a tener que ver la diferencia angular absoluta sobre el eje Y entre la cámara y el "Joystick Target" - ¿Que es "Joystick target"? Esto es un Vector que predice la posición futura del jugador en función al valor del joystick y la posición actual. Vector3 joystickTarget = player.position + joystick.axis; ¡Importante! - los AXIS del Joystick siempre se deben normalizar, para evitar una velocidad 1.5 en los movimientos diagonales. Ahora deberias tomar la diferencia angular entre el FORWARD del player y el valor de joystickTarget. Vector3 angle_joystick = (josytickTarget - player.position).normalized; Vector3 angle_diff = angle_joystick - player.forward; Y a partir de acá se vuelve a repetir los pasos para la forma (1). Esto no soluciona el problema al 100% en Super Mario 64 la cámara se "AUTO AJUSTA" detrás del jugador mientras este se mueve, por lo cual faltaría la implementación de la compensación de la cámara. ¿Los saltitos de rigidbody solo son perceptibles en la ventana "GAME" o tambien se ven dentro de "INSPECTOR"? Debería de sacarte esta duda por que podria ser un error en el comportamiento de seguimiento de la cámara, tal como para las físicas se utiliza FixedUpdate para la actualización de la posición y rotación de la cámara se recomienda utilizar LateUpdate. Los códigos no funcionan son solo ejemplos.
  7. Se puede deber a. 1º La forma del collider 2º Los materiales de colisión que estén actuando. 3º La masa del objeto. 4º (Sleep mode) La configuración de actualización de físicas. 5º (Interpolate) El modo de interpolación. Muchas variables ....
  8. 1º Deberías evaluar si el proyecto tiene como requerimiento más de 20 CCU. En muchos casos nos preocupa que el CCU sea bajo, pero ¿Realmente se requiere tantos clientes activos?. Si el proyecto tiene mucho potencial te recomiendo implementar una librería de red que te permita desplegar servidores a gusto haciendo uso de los VPS distribuidos de Google Cloud, o bien utilizando un CPU en tu hogar y un servicio SIMÉTRICO de por lo menos 150 MB/s con IP pública estática. 2º ¿Tenes alguna idea de cuantos kb/s por usuario usará la aplicación?. Esto es más importante que el CCU, todos o casi todos los servicios de red tienen un limite en cuanto a kb/s se refiere, y tambien una tarifa. 3º ¿Se definió una estructura para la aplicación? Al definir la estructura de red tendrás referencias para medir el CCU y KB/s necesario. ------------------------------------------ Si tenes ganas de experimentar con librerías de red te dejo en orden (LLAPI -> HLAPI) algunos proyectos Open Sources. Telepathy Librería escrita en C# sobre Sockets TCP con alta eficiencia y rendimiento. https://github.com/vis2k/Telepathy Mirror Librería escrita en C# sobre (Network Drive) con alta eficiencia y rendimiento, se intentó seguir la misma metodología que implementa HLAPI de UNET para que la implementación, migración y aprendizaje sean agradables. https://github.com/vis2k/Mirror Te invito te animes a explorar soluciones propias. Saludos.
  9. Con esto se llevó mi corazón jajaja
  10. Fijate que tengas seleccionada la versión correcta, debajo del título de la página de la documentación.
  11. Muy bien, lo estare probando. Hay muchos pasos, restricciónes y esperas para que admob funcione correctamente, si todo está correcto en unos dias tendras impresiones (15 aprox.) de lo contrario te llegara una notificación a Google Console para solucionar el problema.
  12. 1º Estas muy lejos del camino a seguir. 2º Para los RTS o muchos otros juegos las entidades utilizan Pathfinding, el más simple y utilizado es A* 3º Si vas a utilizar un sistema de tiles no tiene mucho sentido utilizar colisión para todo, dejaría las colisiones para las entidades. 4º Si estas con esta duda es por que aún te falta mucho por aprender... Te recomiendo empezar por algo más simple.
  13. 1º Tomas 2 muestras del ángulo en el eje Y del objeto. BackFrame CurrentFrame 2º Obtener la diferencia absoluta de las muestras Math.Abs(CurrentFrame - BackFrame). 3º Creas tu propia fórmula para obtener un valor del 0 al 1 según el valor de la diferencia. Ejemplo, suponiendo que la diferencia máxima sea 20. 1 - Clamp(diff, 0, 20) / 20 4º Multiplicas la velocidad de movimiento con el resultado del paso 3.
  14. Me referia que esto posteo el 2018 Yo hice unos puntos, todavia estoy esperando que anuncien el ganador. jajaja
×
×
  • Create New...