Unity es una herramienta poderosa que permite crear experiencias visuales impresionantes, pero a veces esto puede sobrecargar nuestra computadora. Aquí te dejo algunos consejos para optimizar tu escena si experimentas bajos índices de fotogramas por segundo (FPS) o la computadora está lenta.
Ajusta la iluminación: modifica la intensidad de la luz direccional (Directional Light) a valores como 2.5 para simular adecuadamente la luz del día.
Reduce la complejidad gráfica: si el rendimiento sigue siendo un problema, considera eliminar el pasto, ya que es muy exigente tanto en GPU como en CPU. También puedes disminuir la cantidad de árboles en la escena.
Utiliza la pestaña de estadísticas: la pestaña de Stats en Unity proporciona información detallada acerca del consumo de recursos de tu escena, como la cantidad de polígonos (tris) y verts, el frame rate y otros detalles cruciales que te permitirán mejorar el rendimiento.
¿Cómo crear un script de movimiento en Unity?
Cuando desees que tu personaje se desplace en el mundo de Unity, es esencial crear un script que controle su movimiento. He aquí una guía básica para estructurar un script de movimiento.
Declaración de variables
Para empezar, declaremos las variables necesarias:
CharacterController: una clase de Unity que ayuda a gestionar las colisiones.
velocidad: define qué tan rápido se moverá tu personaje.
Implementación del Input en el Update
Ahora trabajaremos en el método Update, que recogerá las entradas de teclado para el desplazamiento de tu personaje:
voidUpdate(){ float x =Input.GetAxis("Horizontal"); float z =Input.GetAxis("Vertical");Vector3 movimiento = transform.right* x + transform.forward* z; controlador.Move(movimiento * velocidad *Time.deltaTime);}
Input.GetAxis("Horizontal") y Input.GetAxis("Vertical"): estos comandos capturan las teclas WASD, útiles para movimiento horizontal y vertical.
Vector3 movimiento: representa la dirección en la cual el personaje se desplazará.
Configuración y Prueba en Unity
Para ver tu script en acción, sigue estos pasos:
Añade el CharacterController al jugador: en el Inspector de Unity, agrega el componente CharacterController a tu objeto jugador.
Asocia el script al jugador: arrastra el script de movimiento creado al componente que contiene el controlador del personaje en Unity.
Prueba el movimiento: una vez guardado todo, presiona Play y verifica que el personaje se mueva adecuadamente con las teclas WASD.
¡Este sencillo script es la base de cualquier juego donde necesites tener control del personaje! Con más cursos, aprenderás a desarrollar esta estructura básica y agregar características cada vez más complejas como colisiones y controladores más personalizados. ¡Sigue explorando y expandiendo tus habilidades en Unity!
muy buena explicación. les paso mi código para los que tengan el problema de que el personaje queda flotando sin gravedad si usan un mapa con relieve o montañas
Muchas gracias Ross! justo tenía ese problema pero añadí el código y va perfecto ;)
Lo implementé así:
!captura del codigo
!demo video
Uso Physics para obtener el valor de la gravedad global de la escena
y sumo el valor al crear el movement, ya que el valor viene como un Vector3
Como ya se está multiplicando por el deltaTime no hace falta multiplicarlo de nuevo
Quite la comprobación del "isGrounded" porque la misma colisión del terreno impide que se vaya para abajo, y asi al jugador le sigue afectando la gravedad
TLDR: Me di cuenta que con sumar "Physics.gravity" cuando se declara movement basta
:)
Buenos días una pregunta, si el personaje no se mueve por defecto como lo menciona (haber si me logro explicar); tengo Norte, sur, este y oeste, si mi personaje lo aprieto w se va al norte, pero si meneo la cámara al sur y vuelvo a presionar w sigue caminando al norte y sale del terreno, si voy hacia la izquierda y doy la vuelta ala derecha, sigue moviéndose para la la parte contaría, no se corrige con la cámara el movimiento, que se puede hacer en ese caso, el movimiento es fijo, no se corrige con la cámara, podrían por favor responder ese detalle, ya revise el código, realice el de los aportes de los compañeros , y no sigue pasando lo mismo.
Podrían ayudarme? Mi programa no me muestra el: Controller None (Character) y cuando corro Unity me manda error. Todo lo que se hizo en los demás videos me funcionó a la perfección, solo esto no me funciona.
Hola, yo no estoy siguiendo esta curso, pero abrí un doc en blanco con un objeto en unity para probar el código, y sin problemas me salio la opción , prueba asignándolo a otro objeto...
Si claro, el código no manda errores en el IDE, pero lo que no funciona es a la hora de agregar el componente en Unity y a la hora de Asociar el Script no me aparece el Controller None (Character) para referenciar el jugador.
el editor de código visual studio no me complementa cuando escribo clases o objetos de unity ejemplo .CharacterControler como puedo hacer que los detecte y que lo escriba cuando yo lo empiezo a escribir?
Me pasa exactamente lo mismo, igual despues al usarlo lo toma bien. Pero no me aparecen en el visual studio
tienes que ir a la pestaña de preferencias y en el apartado de External tools en la opcion de External Script editor por defecto esta en Open by file extencion , lo tienes que cambiar por visualStudio y listo cuando escribas clases o objetos de unity visual studio te lo complementara y te permitira usar los atajos al escrivir :D.
Alguien tiene algunas info de como entender un poco mejor la función Vector3? no termino de entender como funciona
En esta sección de la documentación está más desglosado la función y capacidad de Vector3
Yo he entendido que se trata de un vector de 3 dimensiones, teniendo un plano cartesiano con x, y, z
Y para usar mando de ps4, xbox hay que usar otras librerías para poder asignar sus botones??
Brillante esta clase. Les puede pasar, como a mi, que el personaje no responde como quisiéramos. En caso de ser así por favor revisen el código y que no esté lleno de símbolos como este "\". Porque eso deja a el código obsoleto por completo.
using System.Collections;using System.Collections.Generic;using UnityEngine;publicclassMovimiento:MonoBehaviour{publicCharacterController controller;public float speed = 20f;// Update is called once per framevoidUpdate(){ float x =Input.GetAxis("Horizontal"); float z =Input.GetAxis("Vertical");Vector3 movement = transform.right* x + transform.forward* z; controller.Move(movement * speed *Time.deltaTime);}}
al hacer un juego low poli deberia subir la taza de FPS's .verdad?
me sigue andando un poquito atrasado el mouse pero hay una increible mejora en el rendimiento gracias a sacarle arboles y pasto, pero lei de algo llamado oclussion culing o algo asi, que es que la camara solo renderisa lo que estamos viendo y el resto no, como lo aplico?
🟢 Hello!
¿Podrías comentarnos más sobre ello o compartir la fuente, para guiarte de una manera precisa? 🤗
Un abrazo de gol! 🦾
Mi ero naje no anda hacia la camara, quiero decir, si lo giro y doy w igual va hacia "atras" que sería adelante con la camara en cero
la camara de unity ve las demas camaras y cosas que solo se ven con scene y se ve borrosa que hago
¿cuando debemos usar characterController y cuando RigidBody? siempre uso rigid body y cambio la velocidad en el eje que se mueva el jugador ¿debería dejar de hacerlo?
No puedo agregar el Player1 al controller del script de movimiento, sin embargo si puedo hacerlo con la main camera; alguna sugerencia?
Tengo duda, cuando inicio la prueba la cámara apunta al suelo, pero en la vista previa de la cámara ve al frente, alguien sabe como? Revise los scripts 10 veces, están igualitos
me salió este error, ¿Qué debo hacer?
Tienes que ir a edit, setting y luego input 0ara definir el eje horizontal
exactamente en que momento de esta clase me explica que es un MonoBehaviour ????
por que en el examen me redirige aquí y necesito ayuda para saber en donde me dicen tal cosa. gracias
Hola José,👋🏻
Gracias por el reporte, ya pasamos la recomendación al team, vamos a revisar el examen.
¿Al realizar un movimiento combinado ya sea con W y A o cualquier movimiento en diagonal se suman las velocidades de los vectores y esto hace que nuestro personaje se mueva mas rápido de los establecido, como se puede solucionar este problema?
Hola compañero, esto es normal, puesto que en ningun momento le damos un limite a la velocidad y estamos sumando todas las entradas, si observamos, al aplicar un movimiento a la izquierda y a la derecha generamos la velocidad equivalente a la hipotenusa de ambas direcciones.
Te invito a tomar el curso avanzado de creacion de RPGs donde nuestro profesor jotabe le da solución y explica por que y como se soluciona el problema.
este es el movimiento y gravedad y salto ,con investigaciones , teorias , ect
si carga la imagen, esto es todo lo que estuve investigando, aprendiendo con videos , aciendo teorias con imaginacion para entender algo que no sabia , teorias de como afecta el script a unity del porque hace esto
Dejó aqui el enlace a la documentación del MonoBehaviour