¡Bienvenido!

Al registrarte con nosotros, podrás conversar, compartir y enviar mensajes privados con otros miembros de nuestra comunidad.

¡Regístrate ahora!

Estoy creando un video juego al estilo word of warcraft con graficos isometricos y necesito la opinion de ustedes

  • Iniciador del tema Iniciador del tema GTACUBA
  • Fecha de inicio Fecha de inicio
  • Etiquetas Etiquetas
    juego
GTACUBA

GTACUBA

本物の藍染惣右介
Nivel 7
Oro
Miembro Comprometido Conversador Frecuente Perfil Activo Iniciador
Mensajes
2,355
Aqui les dejo el video juego, lo estoy creando en htlm, como veran aun le falta los graficos, las texturas, pero ya tiene la base de como mas o menos sera el juego y de su jugabilidad en fin, aqui se los dejo
 
bueno no me deja subirlo porque es un archivo html pero bueno
 
No recuerdo si un .zip estaba en la lista de extensiones permitidas. De todas formas, siempre puedes hacer una captura de pantalla del resultado.
 
ah no sabia que los zip estaban en las extensiones permitidas, espera dejame subirlo
apenas lo he podido trabajar porque estaba enredado haciendo tramites legales(para comenzar un negocio, asi que tranquilos que no es nada penal)
no tampoco me deja subirlo
bueno aqui les dejo capturas, aunque lo bueno es jugarlo porque lo bueno que va a tener es su jugabilidad, pero bueno, como veran le falta mucho aun, texturas conceptuales, graficos animaciones, historia, y muchos mas elementos, ademas de cambiarle el nombre pero bueno como dije esa va a ser la base del jueg WhatsApp Image 2026-10-01 at 3.13.48 PM.webp WhatsApp Image 2026-10-01 at 3.12.38 PM.webp WhatsApp Image 2026-10-01 at 3.11.48 PM.webp WhatsApp Image 2026-10-01 at 3.11.34 PM (1).webp WhatsApp Image 2026-10-01 at 3.11.34 PM (1).webp WhatsApp Image 2026-10-01 at 3.11.24 PM.webp WhatsApp Image 2026-10-01 at 3.11.13 PM.webp WhatsApp Image 2026-10-01 at 3.11.04 PM.webp WhatsApp Image 2026-10-01 at 3.10.58 PM.webp o
 

Archivos adjuntos

  • WhatsApp Image 2026-10-01 at 3.13.57 PM.webp
    WhatsApp Image 2026-10-01 at 3.13.57 PM.webp
    55.4 KB · Visitas: 0
  • WhatsApp Image 2026-10-01 at 3.11.34 PM.webp
    WhatsApp Image 2026-10-01 at 3.11.34 PM.webp
    39.4 KB · Visitas: 0
bueno lo logre subir poniendolo como documento world, pero tienen que abrirlo con un navegador
 

Archivos adjuntos

tienen que cambiarle la extension y ponerle .html para que salga
y tranquilos que no es ningun virus, no soy un haker, bueno al menos no aun
 
bueno lo logre subir poniendolo como documento world, pero tienen que abrirlo con un navegador
¿Por qué lo hardcodeas todo? Creo que mantener una estructura de archivos y directorios lo hace más organizado y fácil de mantener.
 
¿Por qué lo hardcodeas todo? Creo que mantener una estructura de archivos y directorios lo hace más organizado y fácil de mantener.
la verdad es que solo estoy haciendo pruebas para ver cual es la mejor forma de crearlo, como te dije recien lo comence hoy mismo por la mañana, estoy usando geminis para que me ayude a crearlo
 
sin contar el hecho de que recien lo estaba creando me llamaron para firmar una papeles, pero se acepta cualquiera ayuda o sugerencia para este juego que estoy creando.
¿Por qué lo hardcodeas todo? Creo que mantener una estructura de archivos y directorios lo hace más organizado y fácil de mantener.
que significa hardcodear? y disculpa mi ignorancia.
 
  • #10
Bueno la cosa va quedando, asi
asere la IA esta pasa de liga jajajaja
 

Archivos adjuntos

  • #11
recuerden tienen que cambiarle siempre la extension y ponerle html para que les salga sino no les sale, me van diciendo como va quedando
 
  • #12
  • #13
que significa hardcodear? y disculpa mi ignorancia.
Hacía referencia a incrustarlo todo en un solo .html. Aunque no miré mucho como tal lo que había en el js, supongo que sí lo hay; pero es "bastante normal" con las cosas que genera la IA. Ya el src al CDN de Tailwind es una red flag.
 
  • #14
1790938645527.webp

Que con la IA no hacían falta programadores, decía Soma Kurusu's icon Soma Kurusu Soma Kurusu , que cualquiera te creaba una app en 5 minutos... 🤣

b2jcyv.webp

No voy a hablar de que si es web (🤮) ni de que si todo está incrustado en el mismo archivo; es que mientras más lo leo, peor se vuelve. Vale que uses IA -hasta yo uso una para el boilerplate- pero bro, al menos aprende a programar para que sepas cuándo te está haciendo una chapuza.

(Déjame invocar a KZKG^Gaara)
 
  • #15
Oh wow, yo tambien me puse a probar la ia para videojuegos, ando con un plan Pro, y me tienta
la verdad es que solo estoy haciendo pruebas para ver cual es la mejor forma de crearlo, como te dije recien lo comence hoy mismo por la mañana, estoy usando geminis para que me ayude a crearlo
Estoy desactualizado de como ser'a en Cuba pero quiero proponer que lo suba a Google Drive y luego pasas el link. Yo uso ChatGPT, y actualmente tengo un plan Pro. Que plan de Gemini estas utilizando? El gratuito? Yo hice lo mismo que tu pero lo mio es una sala tridimensional simulando una oficina, donde el personaje opera una maquina absurda, y está montado como projecto en mi Github. La verdad es genial, por cosas de la vida al final no me hice desarrollador de videojuegos, asi que esto me resultó una manera de imaginarme que lo soy.
 
  • #16
Cuando veo cosas así no puedo evitar recordar este meme:
ai-is-taking-over-v0-l2pzxryu5gxa1.webp

Tanto "producto" hecho con IA vibecodeando, que significa: "no sé programar pero quiero fardear de que sí, por lo que le diré 2 o 4 cosas a un chatbot (que si me preguntan diré que son prompts, porque suena más cool prompt en vez de decir que pedí pedir algo de forma inexacta) para que me haga una vaina que tampoco entenderé" hace definitivamente que quien sí sabe programar lo tendrá más fácil, porque TODO lo hecho con IA es fácilmente reconocible, fácilmente identificable sin siquiera ver el código en realidad (como cuando vas por internet, entras a un sitio y dices ahhh mira eso es un WP, porque el visual grita WP!!!!) así que ser diferente, cada día es más sencillo.

Contra-parte... todo eso hecho con IA por gente "vibecodeando" tiene más agujeros que queso suizo, por lo que cybersec cada día dá más frutos con menos esfuerzo LMAO!

Y ojo, esto no es una crítica ni al man que creó el thread ni tampoco al juego o producto, supongo que lo que intento decir es que antes de la IA uno necesitaba aprender para poder llegar a un resultado, hoy en día con la IA "llegas" al resultado pero es mediocre y ni siquiera la gente aprende en el proceso.

Justo estaba hablando esto el otro día con mi novia, que en el futuro cuando nuestros hijos tengan nietos, los nietos me mirarán a mí y dirán "wtf abuelo, cómo es eso que para programar antes en tu tiempo tenías que usar los dedos y apretar teclas y escribir cientos y miles de palabras tú solo!?!?!?"... los niños de aquí a 40 años o algo así nos verán como nosotros hoy en día vemos a los druidas de tiempos antiguos, como locos, como trogloditas anti-ciencia HAHAHAHA.

Yo mismo uso mucho IA para agilizar tareas cuando el tiempo apremia, pero es de locos la cantidad ENORME de veces que esas mierdas se equivocan, o se vuelven locas, o entran en loops absurdos y les cuesta salir de ellos, en más de una ocasión he tenido que darle break para decirle que no, que por ahí no va, que se centre en X cosa o que piense en Z enfoque, o directamente que su lógica es un sin sentido y tengo yo que decirle cómo hacer la vaina completa... de locos 😅

Y que conste que no es porque esté usando una IA "bruta", porque todo esto que describo es usando Claude Enterprise (ni siquiera el pagado normal que paga cualquiera, este es full corporativo) y encima con recursos que no puedo decir exactamente de qué CIA son 😂
PXL_20261002_012355500.MP~2_preview.webp
 
Última edición:
  • #17
SI, yo igual lo detecto facil, es como que I know my bro, lo reconozco cuando le leo. La palabra AUDIT se ha vuelto una de mis mas usadas.... Y he aprendido que si no hago los prompts dictando, es muy lento. Pero voy conociendo al bro y en lo que falla.
 
  • #18
Ironicamente, lo unico que le falta al juego del colega para ser perfecto son unos buenos NFT
 
  • #19
Ironicamente, lo unico que le falta al juego del colega para ser perfecto son unos buenos NFT
No sé qué es más gracioso, el uso del adjetivo "perfecto" o el hecho de que menciones la estafa "NFT" 🤣
 
  • #20
ah ver, al verdad verdad es que yo no se programar, lo que mas hice en mi vida en temas de programacion fue en 4to grado de primaria que aprendio a hacer un calculadora en Visual Fox Pro, y luego en Visual Basic en 9no grado, pero fuera de crear una calculadora en esos dos programas nunca mas aprendi nada en mi vida en lo que a programacion se refiere, pues deje la carrera de informatica en 11 grado para meterme en una carrera de leyes que tambien deje pero bueno eso es otra historia, pero la idea de crear un video juego no es tanto para demostrar las capacidades de la IA pues esas ya me quedaron claras desde hace rato ni tampoco para intentar ganar dinero sino que es porque quiero realizar un experimento con los videojuegos y como no he encontrado ningun programador que quiera ayudarme con eso tuve que entrarle yo mismo al experimento
 
  • #21
Oh wow, yo tambien me puse a probar la ia para videojuegos, ando con un plan Pro, y me tienta

Estoy desactualizado de como ser'a en Cuba pero quiero proponer que lo suba a Google Drive y luego pasas el link. Yo uso ChatGPT, y actualmente tengo un plan Pro. Que plan de Gemini estas utilizando? El gratuito? Yo hice lo mismo que tu pero lo mio es una sala tridimensional simulando una oficina, donde el personaje opera una maquina absurda, y está montado como projecto en mi Github. La verdad es genial, por cosas de la vida al final no me hice desarrollador de videojuegos, asi que esto me resultó una manera de imaginarme que lo soy.
yo uso el geminis gratuito recuerda que vivo en Cuba y no puedo estar pidiendole a mi madre que esta en españa que me pague una IA de pago, ademas de que tambien ya un amigo me va pagar la subscripcion a WOW Forever cuando salga ahora el 4 de novimebre asi que tampoco puedo estar en esa gracia, quiero ver si hago el juego con unity claro con la ayuda de geminis porque no conosco nada sobre programacion en unity
 
  • #22
Ver el archivos adjunto 23067

Que con la IA no hacían falta programadores, decía Soma Kurusu's icon Soma Kurusu Soma Kurusu , que cualquiera te creaba una app en 5 minutos... 🤣

Ver el archivos adjunto 23068

No voy a hablar de que si es web (🤮) ni de que si todo está incrustado en el mismo archivo; es que mientras más lo leo, peor se vuelve. Vale que uses IA -hasta yo uso una para el boilerplate- pero bro, al menos aprende a programar para que sepas cuándo te está haciendo una chapuza.

(Déjame invocar a KZKG^Gaara)
como ya dije en otros mensajes recuerda que yo soy carpintero y algo de cerrajero, lo que mas llegue a hacer en mi vida de programacion fue una calculadora en Visual Fox Pro estando en 4to grado de primerio en las pentium 2 de mi antigua escuela y algo de Visual Basic en 9no grado, pero verdad es que estoy botado en programacion solo quise hacer un experimento con los videojuegos porque no encontre ningun programador que me ayude con el experimento.
 
  • #23
ah ver, al verdad verdad es que yo no se programar, lo que mas hice en mi vida en temas de programacion fue en 4to grado de primaria que aprendio a hacer un calculadora en Visual Fox Pro, y luego en Visual Basic en 9no grado, pero fuera de crear una calculadora en esos dos programas nunca mas aprendi nada en mi vida en lo que a programacion se refiere, pues deje la carrera de informatica en 11 grado para meterme en una carrera de leyes que tambien deje pero bueno eso es otra historia, pero la idea de crear un video juego no es tanto para demostrar las capacidades de la IA pues esas ya me quedaron claras desde hace rato ni tampoco para intentar ganar dinero sino que es porque quiero realizar un experimento con los videojuegos y como no he encontrado ningun programador que quiera ayudarme con eso tuve que entrarle yo mismo al experimento
Te entiendo, en esa época a mi me gustaba intnetinventarme campañas y escenarios en juegos de estrategia, y fantasear en cómo pudiera ser mejor cualquier videojuego que me fascinara. Tener la IA en mis manos me trae a esos tiempos. Pienso que si quieres experimentar con tus ideas de un MMO la IA viene genial en tus circunstancias. Muchas cosas que si hubiese tenido IA no se hubuesen quedado solo en mi cabeza.
 
Última edición:
  • #24
yo uso el geminis gratuito recuerda que vivo en Cuba y no puedo estar pidiendole a mi madre que esta en españa que me pague una IA de pago, ademas de que tambien ya un amigo me va pagar la subscripcion a WOW Forever cuando salga ahora el 4 de novimebre asi que tampoco puedo estar en esa gracia, quiero ver si hago el juego con unity claro con la ayuda de geminis porque no conosco nada sobre programacion en unity
Se lo acabo de mandar a mi Chatgpt, le dije que lo revisara. Te iré actualizando, quiero curiosear con el un poco. Déjame alguans ideas que tienes para pedírselo a la IA. O hazme prompts con el gemini que tienes y yo los aplico
 
  • #25
Se lo acabo de mandar a mi Chatgpt, le dije que lo revisara. Te iré actualizando, quiero curiosear con el un poco. Déjame alguans ideas que tienes para pedírselo a la IA. O hazme prompts con el gemini que tienes y yo los aplico
a ver amigo, no importa si es un MMO o RST, la idea es que el juego le haga hacer al jugador el mayor uso posible de su mano izquierda y el menor uso posible de su mano derecha, segun mi teoria(que ya confirme hace muchisimo tiempo, sobre todo cuando Tencent anuncion que Honor of King tenia mas de 260 millones de usuarios mensuales y mas de 135 millones de usuarios diarios cuando el dota que comenzo el genero moba apenas llega a los 8 millones de usuarios mensaules y el league of legend tiene solo 130 y es tan asi que ya hasta la gente de RIOT se dieron cuenta de esto e implementaron el sistema de movimiento WASD que le hace hace mayor uso de la mano izquierda al jugador, y bueno ya con la furia de la gente este año con GTA 6 y con el wow forever ya me quedo mas que confirmada mi teoria y por supuesto a eso sumale los 400 millones de usuarios mensuales de Roblox)
Pues a ver para resumirte mi idea: se ha intentado una y otra vez hacer un RST que tenga exito pero todos los intentos fracasan pues la gente se termina aburriendo de ello tanto que las compañias se dieron cuenta de ello y dejaron de crearlos o al menos ya no le prestan atencion, pues mi idea es crear un RTS que haga que el jugador tenga que hacer muchisimo uso de su mano izquierda con el juego y muy poco uso de su mano derecha, yo por ejemplo descargue hace poco el winlator y configure asi los controles para jugar Starcraft1 y cogi tremendo vicio con el starcraft tambien cogi tremendo vicio en pc pues desde hace tiempo me di cuenta de que disfruto mas mi tiempo de PC y tengo mas motivacion con esta cuando manejo el mause con la mano izquierda, he leido en internet y a mucha gente le pasa eso, pues el unico de mis amigos que juega actualmente activamente starcraft 1 soy yo presisamente por esta razon(como te dije lo de la mano izquierda ya es mas que confirmado)
Pues ahora quiero crear un RTS con esas condiciones, es decir un RTS donde el jugador tenga que mover el cursor con la mano izquierda y la mano derecha la use cuando mas para dar click secundario es decir para dar la orden de movimiento a las unidades...
esto fue lo que me respondio geminis cuando le plantee esa idea y si me teoria es cierta(que se que lo es) este RTS se volvera viral y exitoso que se que lo hara y muy probablemente renasca el genero de RTS con esta nueva caracterista, de hecho estuve viendo un grupos de gamer que muchos estan haciendo eso con winlator, se descargan el winlator y lo configuran de esa manera solo para jugar starcraft e imperio aun teniendolo en pc prefieren jugarlo asi con jostic en el telefono, y ni hablar del super exitaso de Imperio 2 en consola.
pero como te dije apenas se de programacion y trabajos con IA y no habia encontrado a nadie que me ayudara en esto, pero si te ofreces a ayudarme y el juego tiene exito te dare todo el credito a ti, a mi me bastara con confirmar otra vez que me teoria es correcta, ver el renacimiento de los RTS y ver como las compañias notan eso y comienzan a hacer RTS para moviles asi(sobre todo ver que algun dia Blizard se digne a sacar un starcraft para moviles con esas caracteristas, ese sera mi pago) y bueno si logras sacarle dinero al juego pues te quedas tu con el billete...
 
  • #26
Te entiendo, en esa época a mi me gustaba intnetinventarme campañas y escenarios en juegos de estrategia, y fantasear en cómo pudiera ser mejor cualquier videojuego que me fascinara. Tener la IA en mis manos me trae a esos tiempos. Pienso que si quieres experimentar con tus ideas de un MMO la IA viene genial en tus circunstancias. Muchas cosas que si hubiese tenido IA no se hubuesen quedado solo en mi cabeza.
Conversacion con gemenis
quiero hacer un juego para telefonos en unity, puedes ayudarme a hacerlo?



¡Claro que sí! Unity es una de las mejores herramientas del mundo para crear juegos móviles (tanto para Android como para iOS), ya que utiliza C# y cuenta con una comunidad enorme.

Android Developers



Para empezar con el pie derecho, aquí tienes una guía paso a paso de los primeros pasos que debes dar, junto con una estructura clara para el proyecto:



1. Instalación y Configuración Inicial

Descarga Unity Hub: Es el programa desde el cual gestionarás tus versiones de Unity y proyectos.

Android Developers



Instala el Editor: Te recomiendo una versión LTS (Long Term Support) estable, como la versión actual recomendada. Durante la instalación, asegúrate de marcar los módulos de soporte móvil:

Android Developers



Android Build Support (junto con el SDK y NDK de Android si vas a compilar para Android).

Android Developers



iOS Build Support (si planeas compilar para iPhone y usas Mac).



2. Define la Idea de tu Primer Juego

Como estás empezando, lo ideal es mantener el alcance muy pequeño (lo que en desarrollo se conoce como un MVP o Producto Mínimo Viable). Evita los RPGs masivos o mundos abiertos complejos en tu primer intento. Buenas opciones para empezar:



Un juego estilo Flappy Bird o Endless Runner (control táctil simple).



Un puzle 2D de emparejar o deslizar.



Un juego de preguntas y respuestas (Trivia).



3. Pasos Básicos en Unity para Móviles

Una vez creado el proyecto en 2D o 3D, la hoja de ruta general será:



Configurar la resolución de pantalla: En la ventana de Game, cambia la relación de aspecto a formato vertical u horizontal según tu juego (por ejemplo, Portrait 9:16 para móviles).



Controles táctiles: En lugar de usar el teclado de una PC, programarás la interacción mediante toques en la pantalla usando la clase Input.GetTouch() o el nuevo Input System de Unity.



Interfaz de usuario (UI): Diseñarás los botones, menús y marcadores usando los elementos de Canvas de Unity, asegurándote de que se adapten a diferentes tamaños de pantalla (Canvas Scaler).



¿Cómo te puedo ayudar ahora mismo?

Para guiarte de forma personalizada, dime:



¿Tienes alguna idea específica de juego en mente (género, temática)?



¿Prefieres que sea en 2D o en 3D?

Android Developers



¿Qué tanta experiencia previa tienes programando o usando Unity?



quiero hacer un videojuego RTS para telefono pero donde el jugador tenga que hacer el mayor uso posible de su mano izquierda con el juego el menor uso posible de su mano derecha, donde dentro del juego el jugador tenga que controlar un puntero justo como se hace en juegos de PC pero donde dicho puntero el lo controle con un jostick que estara al lado izquierdo de la pantalla con su mano izquierda



¡Es una excelente idea! Adaptar la precisión de un juego de estrategia en tiempo real (RTS) de PC a pantallas táctiles mediante un cursor controlado por joystick virtual izquierdo es un diseño brillante. Resuelve el principal problema de los RTS móviles: la imprecisión del dedo directo sobre unidades diminutas y la oclusión visual (tu propio dedo tapando lo que quieres tocar).



Dado que tu mano izquierda manejará el joystick de movimiento del cursor y las acciones principales, y la mano derecha quedará casi libre (quizás solo para un par de botones flotantes de emergencia o habilidades secundarias), el flujo de desarrollo en Unity se centra en crear un sistema de cursor virtual en el espacio del juego.



Aquí tienes la guía técnica y la estructura de cómo construir este sistema en Unity:



1. El Enfoque Técnico: ¿Cómo funciona un Cursor Virtual en Móvil?

A diferencia de una PC donde el cursor sigue al ratón, en tu juego el cursor se moverá como si fuera un personaje aplicando velocidad basada en la inclinación del joystick virtual.



Joystick Virtual Izquierdo: Captura la dirección y la fuerza con la que el jugador empuja la palanca (valores de menos 1 a 1 en los ejes X e Y).



Objeto Cursor en Pantalla: Creas un sprite (una cruceta o una manito estilo PC) en la interfaz de usuario (Canvas) o directamente en el mundo del juego.



Script de Movimiento: Un script en C# lee los valores del joystick y desplaza la posición del cursor en pantalla a una velocidad constante.



2. Estructura del Proyecto en Unity

Para empezar este prototipo, te sugiero la siguiente organización:



Jerarquía de la Escena (Scene Hierarchy):



Main Camera: La cámara ortográfica o en perspectiva que sigue al cursor o se desplaza por el mapa.



GameManager: Script central para controlar el estado de la partida, recursos, etc.



Map / Terrain: El escenario donde se mueven las unidades.



Canvas (UI):



VirtualJoystick: El joystick izquierdo (puedes usar el paquete oficial Input System de Unity o un plugin gratuito de la Asset Store como Joystick Pack).



VirtualCursor: Una imagen (Sprite) que representa el puntero del ratón en el centro o la esquina inferior de la pantalla.



ActionButtons (Mano Derecha): Espacio mínimo reservado para un par de botones de acción rápida (ej. "Seleccionar/Clic" y "Cancelar/Menú").



3. Código Base: Mover el Cursor con el Joystick

Aquí tienes un ejemplo de script en C# que puedes adjuntar a tu cursor virtual para que se mueva usando la información de un joystick:



C#

using UnityEngine;

using UnityEngine.UI;



public class VirtualCursorController : MonoBehaviour

{

[Header("Configuración")]

public float cursorSpeed = 1000f; // Velocidad de movimiento del cursor en pantalla



// Referencia al joystick virtual (si usas el Joystick Pack, por ejemplo)

// O puedes enlazarlo al Input System moderno de Unity.

public RectTransform joystickHandle; // O una referencia directa a tu script de joystick

public RectTransform canvasRect;

private RectTransform cursorRect;



void Start()

{

cursorRect = GetComponent<RectTransform>();

}



void Update()

{

// Obtener la entrada del joystick izquierdo (aquí asumimos valores de -1 a 1)

// Si usas el Input System de Unity, esto vendría de una acción de tipo Vector2.

float inputX = Input.GetAxis("Horizontal"); // Simulado con teclado para pruebas, o conectado al joystick

float inputY = Input.GetAxis("Vertical");



// Vector de movimiento

Vector2 movement = new Vector2(inputX, inputY) * cursorSpeed * Time.deltaTime;



// Mover el cursor dentro de los límites de la pantalla

cursorRect.anchoredPosition += movement;



// Opcional: Limitar el cursor para que no salga de los bordes de la pantalla

// ClampPosition();

}

}

4. ¿Cómo interactúa el jugador con el mundo (Acciones RTS)?

Una vez que el cursor virtual se mueve por la pantalla:



Detección de Colisiones / Raycast: Cuando el cursor se detiene sobre una unidad o edificio, el juego emite un rayo (Physics2D.Raycast o Physics.Raycast) desde la posición del cursor hacia el mundo de juego.



El "Clic" con la Mano Izquierda o Derecha:



Puedes hacer que el jugador presione un botón flotante grande al alcance del pulgar izquierdo (por ejemplo, el centro del joystick o un botón justo al lado) para seleccionar o ordenar atacar.



Alternativamente, puedes usar un sistema de "selección automática" donde el cursor resalta objetos al pasar por encima, y la mano derecha (con un solo botón de toque rápido y cómodo) confirma la acción.



¿Cómo avanzamos con esto?

Para ir directo al código y a la configuración exacta que necesitas:



¿Prefieres que usemos el Input System nuevo de Unity o prefieres un paquete de Joysticks prehechos de la Asset Store?



¿Tu juego RTS será en 2D (vista cenital tipo clásico) o en 3D?



el juego ser en 2D vista cenital tipo clasivo



¡Perfecto! Un RTS 2D de vista cenital (estilo clásico tipo Command & Conquer antiguo, Warcraft I/II o Desert Strike) encaja como anillo al dedo con la idea del cursor controlado por joystick. Al ser 2D y cenital, las matemáticas de movimiento, la detección de colisiones y la interfaz son mucho más directas y ligeras de programar en Unity.



Vamos a estructurar cómo construir el prototipo paso a paso enfocado estrictamente en tu requerimiento: mano izquierda controlando el joystick/cursor, vista cenital 2D, y la mano derecha prácticamente libre.



Paso 1: Configurar la Escena 2D en Unity

Crear el Proyecto: Abre Unity Hub, crea un nuevo proyecto seleccionando la plantilla 2D Core.



La Cámara: Selecciona la Main Camera en la jerarquía y configúrala:



Projection: Orthographic (Ortográfica), ya que es un RTS clásico 2D.



Size: Ajusta el zoom inicial (por ejemplo, entre 5 y 8 para ver una buena porción de terreno).



El Terreno/Mapa: Crea un sprite plano o una cuadrícula (Tilemap) que sirva de suelo para que tus unidades se muevan.



Paso 2: El Cursor Virtual 2D (Movido por el Joystick)

Para un juego 2D cenital, el cursor puede ser un objeto dentro del Canvas (UI) o un objeto físico en el mundo 2D. Lo más cómodo para la interfaz móvil es hacerlo en el Canvas con un elemento Image (dibujando una cruceta o un puntero de ratón estilizado).



Aquí tienes un script más completo y adaptado para mover un cursor en pantalla usando un joystick virtual (puedes enlazarlo con cualquier joystick estándar de Unity o el Input System):



C#

using UnityEngine;



public class RTSVirtualCursor2D : MonoBehaviour

{

[Header("Movimiento")]

public float cursorSpeed = 1200f; // Velocidad del cursor en la pantalla

private RectTransform cursorRectTransform;

private RectTransform canvasRectTransform;



// Referencia al joystick (puedes pasar el valor de tu joystick izquierdo aquí)

[HideInInspector] public Vector2 joystickInput;



void Start()

{

cursorRectTransform = GetComponent<RectTransform>();

// Obtenemos el Canvas padre para calcular los límites de la pantalla

Canvas canvas = GetComponentInParent<Canvas>();

if (canvas != null)

{

canvasRectTransform = canvas.GetComponent<RectTransform>();

}

}



void Update()

{

// 1. Mover el cursor basado en la entrada del joystick izquierdo

// joystickInput.x e input.y deben estar entre -1 y 1

Vector2 movement = joystickInput * cursorSpeed * Time.deltaTime;

cursorRectTransform.anchoredPosition += movement;



// 2. Limitar el cursor para que no salga de los bordes de la pantalla móvil

ClampCursorToScreen();

}



void ClampCursorToScreen()

{

if (canvasRectTransform == null) return;



Vector2 anchoredPos = cursorRectTransform.anchoredPosition;



// Obtener los límites del canvas

float maxX = canvasRectTransform.rect.width / 2f;

float maxY = canvasRectTransform.rect.height / 2f;



// Restringir la posición dentro de la pantalla

anchoredPos.x = Mathf.Clamp(anchoredPos.x, -maxX, maxX);

anchoredPos.y = Mathf.Clamp(anchoredPos.y, -maxY, maxY);



cursorRectTransform.anchoredPosition = anchoredPos;

}

}

Paso 3: ¿Cómo interactúa el Cursor con el Mundo 2D?

Como el cursor está en el Canvas (interfaz), para que pueda "seleccionar" unidades u ordenarles ir a un punto del mapa 2D, necesitamos traducir la posición del cursor en pantalla a coordenadas del mundo del juego (World Position).



Puedes añadir este pequeño fragmento o lógica al sistema de selección:



C#

// Desde el script del cursor o un GameManager, puedes convertir la posición UI a Mundo 2D:

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(cursorRectTransform.position);

worldPosition.z = 0f; // Asegurar que Z sea 0 en 2D



// Para seleccionar unidades o hacer clic en el mapa:

// Puedes lanzar un Raycast 2D en esa posición del mundo:

RaycastHit2D hit = Physics2D.Raycast(worldPosition, Vector2.zero);



if (hit.collider != null)

{

// ¡El cursor está sobre algo! (Una unidad enemiga, un edificio, un recurso...)

// Puedes cambiarle el color al cursor para indicarle al jugador que está sobre un objetivo válido.

}

Paso 4: La Ergonomía de las Manos (Diseño de Interfaz)

Dado que tu enfoque principal es proteger la mano izquierda y minimizar la derecha:



Mano Izquierda (Zona Inferior Izquierda):



Ocupará el Joystick Virtual grande y cómodo para mover el cursor.



Justo en la base del joystick o flotando cerca, puedes colocar un botón de acción principal (por ejemplo, un botón grande para "Seleccionar/Confirmar" que el pulgar izquierdo pueda presionar rápidamente sin soltar del todo la zona izquierda).



Mano Derecha (Zona Inferior Derecha):



Quedará casi estática. Puedes dejar un único botón secundario de emergencia (ej. "Cancelar orden" o "Menú de pausa") para que el pulgar derecho apenas tenga que moverse.



¿Cómo seguimos avanzando?

Para ir escribiendo el código específico que necesites:



¿Quieres que armemos el script completo para seleccionar unidades haciendo clic con el cursor (crear un cuadro de selección o selección por toque directo)?



¿Prefieres que implementemos el sistema de movimiento de unidades hacia donde apunta el cursor mediante un comando?



1



¡Excelente elección! Vamos a implementar el sistema para seleccionar unidades haciendo clic con el cursor virtual en tu RTS 2D.



Como el cursor se mueve por la pantalla gracias a la mano izquierda, el flujo será:



El cursor se desplaza por el mapa mediante el joystick virtual.



El jugador presiona un botón de acción con su pulgar izquierdo (o un botón flotante accesible) para hacer "clic".



El juego detecta la posición mundial del cursor y selecciona la unidad o estructura que esté debajo.



Aquí tienes el script en C# listo para colocar en Unity que gestiona la selección de unidades:



Script de Selección de Unidades con el Cursor Virtual (RTSUnitSelector.using)

Crea un nuevo script en C# llamado RTSUnitSelector.cs, pégate este código y adjúntalo a tu objeto del Cursor Virtual o a un GameManager:



C#

using UnityEngine;



public class RTSUnitSelector : MonoBehaviour

{

[Header("Referencias")]

public RectTransform cursorRectTransform; // El RectTransform de tu cursor en el Canvas

public LayerMask unitLayerMask; // Capa asignada a tus unidades (para filtrar el raycast)



[Header("Estado Actual")]

public GameObject selectedUnit; // Unidad seleccionada actualmente



void Update()

{

// Detectar si el jugador presiona el botón de "Seleccionar"

// (Puedes cambiar "Fire1" por el botón o tecla de acción asignada a tu pulgar izquierdo)

if (Input.GetButtonDown("Fire1") || Input.GetKeyDown(KeyCode.Space))

{

AttemptSelection();

}

}



void AttemptSelection()

{

// 1. Convertir la posición de la UI del cursor a coordenadas del mundo 2D

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(cursorRectTransform.position);

worldPosition.z = 0f; // Asegurar que Z sea 0 en 2D



// 2. Lanzar un Raycast 2D en ese punto exacto del mundo

RaycastHit2D hit = Physics2D.Raycast(worldPosition, Vector2.zero, Mathf.Infinity, unitLayerMask);



if (hit.collider != null)

{

// ¡Golpeamos una unidad!

GameObject clickedUnit = hit.collider.gameObject;

SelectUnit(clickedUnit);

}

else

{

// Si el cursor no toca nada, podemos deseleccionar (opcional)

// DesselectUnit();

}

}



void SelectUnit(GameObject unit)

{

// Si ya había otra unidad seleccionada, le quitamos la selección visual

if (selectedUnit != null)

{

ToggleUnitHighlight(selectedUnit, false);

}



// Seleccionamos la nueva

selectedUnit = unit;

ToggleUnitHighlight(selectedUnit, true);



Debug.Log("Unidad seleccionada: " + selectedUnit.name);

}



void ToggleUnitHighlight(GameObject unit, bool isSelected)

{

// Aquí puedes cambiar el color, activar un círculo de selección debajo, etc.

SpriteRenderer sr = unit.GetComponent<SpriteRenderer>();

if (sr != null)

{

sr.color = isSelected ? Color.green : Color.white; // Verde si está seleccionada, blanco normal

}

}

}

¿Cómo configurarlo en el editor de Unity?

Capa de Unidades (Layer): Ve a la esquina superior derecha del Inspector de Unity en una de tus unidades, haz clic en Layer -> Add Layer y crea una nueva capa llamada Units. Asigna tus unidades de juego a esa capa.



Asignar el Script: Arrastra el script RTSUnitSelector a tu objeto del cursor (o a un objeto vacío llamado GameManager).



Vincular Variables:



Arrastra el componente RectTransform del cursor a la casilla Cursor Rect Transform.



En Unit Layer Mask, selecciona la capa Units que acabamos de crear para que el juego solo busque unidades y ignore el suelo u otros elementos.



¿Qué te gustaría hacer a continuación?

Una vez que el jugador selecciona la unidad con su mano izquierda:



¿Quieres que programemos la orden de moverse hacia donde el cursor apunta al presionar otro botón?



¿O prefieres que veamos cómo configurar el joystick virtual izquierdo en pantalla para que mueva el cursor fluidamente?



1



¡Genial! Vamos a programar el siguiente paso lógico: ordenar a la unidad seleccionada que se mueva hacia donde está apuntando el cursor (mediante un comando).



En un RTS clásico, esto suele funcionar así:



Mueves el cursor con el joystick izquierdo.



Presionas el botón de selección/acción para seleccionar una unidad.



Mueves el cursor a otro punto del mapa y presionas un botón de "Mover aquí" (Move Order) para que la unidad camine hacia allí.



Para mantener tu filosofía de máximo uso de la mano izquierda y mínima intervención de la derecha, puedes colocar el botón de "Mover" justo al lado del joystick izquierdo (o hacer que un doble toque / presión prolongada del mismo botón sirva para ordenar el movimiento). Por ahora, crearemos la lógica de programación para recibir esa orden.



Script de Movimiento de Unidades (RTSUnitMovement.cs)

Crea un nuevo script en C# llamado RTSUnitMovement.cs y adjúntalo a tus unidades (los objetos que actúan como soldados o vehículos en el juego):



C#

using UnityEngine;



public class RTSUnitMovement : MonoBehaviour

{

public float moveSpeed = 5f; // Velocidad a la que se desplaza la unidad

private Vector3 targetPosition; // Posición a la que debe ir

private bool isMoving = false; // Estado de movimiento



void Start()

{

targetPosition = transform.position;

}



void Update()

{

// Si la unidad tiene orden de moverse, desplazarla suavemente hacia el objetivo

if (isMoving)

{

transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);



// Si llega a la posición destino, detener el movimiento

if (Vector3.Distance(transform.position, targetPosition) < 0.1f)

{

isMoving = false;

}

}

}



// Método que llamaremos desde nuestro selector o gestor cuando se dé la orden de movimiento

public void SetDestination(Vector3 newDestination)

{

targetPosition = newDestination;

targetPosition.z = 0f; // Asegurar que Z sea 0 en 2D

isMoving = true;

}

}

Integrando la Orden con el Cursor (RTSUnitSelector.cs)

Ahora necesitamos actualizar el script selector que hicimos antes para que, si ya tienes una unidad seleccionada y presionas el botón de orden (por ejemplo, la tecla E o un segundo botón táctil de la mano izquierda), la unidad reciba la posición actual del cursor como destino.



Actualiza tu script RTSUnitSelector.cs con este bloque de código mejorado:



C#

using UnityEngine;



public class RTSUnitSelector : MonoBehaviour

{

[Header("Referencias")]

public RectTransform cursorRectTransform;

public LayerMask unitLayerMask;



[Header("Estado Actual")]

public GameObject selectedUnit;



void Update()

{

// Botón 1: Seleccionar unidad (Ej: Espacio o Click izquierdo simulado)

if (Input.GetButtonDown("Fire1") || Input.GetKeyDown(KeyCode.Space))

{

AttemptSelection();

}



// Botón 2: Ordenar movimiento a la posición actual del cursor (Ej: Tecla 'E' o un botón secundario izquierdo)

if (Input.GetKeyDown(KeyCode.E))

{

AttemptMoveOrder();

}

}



void AttemptSelection()

{

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(cursorRectTransform.position);

worldPosition.z = 0f;



RaycastHit2D hit = Physics2D.Raycast(worldPosition, Vector2.zero, Mathf.Infinity, unitLayerMask);



if (hit.collider != null)

{

GameObject clickedUnit = hit.collider.gameObject;

SelectUnit(clickedUnit);

}

}



void SelectUnit(GameObject unit)

{

if (selectedUnit != null)

{

ToggleUnitHighlight(selectedUnit, false);

}



selectedUnit = unit;

ToggleUnitHighlight(selectedUnit, true);

Debug.Log("Unidad seleccionada: " + selectedUnit.name);

}



void AttemptMoveOrder()

{

// Si tenemos una unidad seleccionada, le ordenamos ir a donde está el cursor ahora mismo

if (selectedUnit != null)

{

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(cursorRectTransform.position);



// Obtenemos el componente de movimiento de la unidad seleccionada

RTSUnitMovement movementScript = selectedUnit.GetComponent<RTSUnitMovement>();

if (movementScript != null)

{

movementScript.SetDestination(worldPosition);

Debug.Log("Orden de movimiento enviada a: " + worldPosition);

}

}

else

{

Debug.Log("No hay ninguna unidad seleccionada para dar la orden.");

}

}



void ToggleUnitHighlight(GameObject unit, bool isSelected)

{

SpriteRenderer sr = unit.GetComponent<SpriteRenderer>();

if (sr != null)

{

sr.color = isSelected ? Color.green : Color.white;

}

}

}

¿Cómo probarlo ahora mismo en Unity?

Añade el script RTSUnitMovement a tu prefab o sprite de unidad en el mapa.



Asegúrate de que el cursor virtual y el RTSUnitSelector estén listos en la escena.



Dale al botón Play en Unity:



Mueve el cursor, ponlo sobre tu unidad y presiona Espacio (verás que se pone de color verde, indicando que está seleccionada).



Mueve el cursor a otra parte del mapa usando tu joystick (o simulando movimiento) y presiona la tecla E.



¡Verás cómo tu unidad se desplaza suavemente hasta la posición exacta donde se encontraba el cursor!



Siguiente paso sugerido:

¿Te gustaría que diseñemos la estructura visual y la lógica del Joystick Virtual Izquierdo para que aparezca en pantalla táctil y mueva el cursor con fluidez en tu teléfono?



si



¡Excelente! Vamos a implementar el Joystick Virtual Izquierdo para que el jugador pueda controlar el cursor fluidamente con el pulgar izquierdo en la pantalla táctil de su teléfono.



Para hacer esto de manera limpia, eficiente y sin depender de plugins externos pesados de la Asset Store, crearemos un script nativo en C# que maneje los eventos táctiles (Touch) de Unity.



Este joystick funcionará así:



El jugador toca cualquier parte de la mitad izquierda de la pantalla.



El joystick aparece dinámicamente bajo su dedo.



Al arrastrar el dedo, el joystick calcula una dirección (de -1 a 1).



Esa dirección se la enviamos directamente a nuestro script del cursor (RTSVirtualCursor2D) para que se mueva de forma fluida.



Paso 1: Crear la Interfaz del Joystick (UI)

Antes del código, necesitamos los elementos visuales en tu Canvas:



Haz clic derecho en tu Canvas -> UI -> Panel (o crea un objeto vacío) y llámalo TouchController_Left. Asegúrate de que ocupe solo la mitad izquierda de la pantalla (puedes ajustar sus anclajes o Anchors para que cubra la mitad izquierda).



Dentro de TouchController_Left, crea dos imágenes de UI (clic derecho -> UI -> Image):



Una imagen grande y semitransparente llamada JoystickBackground (el aro exterior).



Una imagen más pequeña dentro llamada JoystickHandle (la palanca que se mueve).



Paso 2: El Script del Joystick Virtual (VirtualJoystick.cs)

Crea un nuevo script en C# llamado VirtualJoystick.cs, pega el siguiente código y adjúntalo al objeto TouchController_Left:



C#

using UnityEngine;

using UnityEngine.EventSystems;



public class VirtualJoystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler

{

[Header("Elementos Visuales")]

public RectTransform backgroundRing; // El aro exterior del joystick

public RectTransform handle; // La palanca interior



[Header("Configuración")]

public float movementRange = 100f; // Distancia máxima que se puede mover la palanca



[Header("Salida")]

public Vector2 inputVector; // Valores de -1 a 1 que le enviaremos al cursor



private Vector2 touchPosition;



void Start()

{

// Al iniciar, ocultamos el joystick hasta que el jugador toque la pantalla

if (backgroundRing != null)

{

backgroundRing.gameObject.SetActive(false);

}

}



// Cuando el dedo toca la pantalla en la zona izquierda

public void OnPointerDown(PointerEventData eventData)

{

// Posicionamos el joystick exactamente donde el jugador puso el dedo

if (backgroundRing != null)

{

backgroundRing.gameObject.SetActive(true);

backgroundRing.position = eventData.position;

}



handle.anchoredPosition = Vector2.zero;

inputVector = Vector2.zero;



OnDrag(eventData);

}



// Cuando el dedo se arrastra por la pantalla

public void OnDrag(PointerEventData eventData)

{

Vector2 position;

// Convertimos la posición de la pantalla local al RectTransform

RectTransformUtility.ScreenPointToLocalPointInRectangle(

backgroundRing,

eventData.position,

eventData.pressEventCamera,

out position

);



// Calculamos la dirección y limitamos el radio del joystick

inputVector = position;

inputVector = (inputVector.magnitude > movementRange) ? inputVector.normalized * movementRange : inputVector;



// Movemos visualmente la palanca

handle.anchoredPosition = inputVector;



// Normalizamos los valores a un rango de -1 a 1 para usarlos fácilmente

inputVector = new Vector2(inputVector.x / movementRange, inputVector.y / movementRange);

}



// Cuando el jugador levanta el dedo de la pantalla

public void OnPointerUp(PointerEventData eventData)

{

inputVector = Vector2.zero;

handle.anchoredPosition = Vector2.zero;



// Ocultamos el joystick flotante

if (backgroundRing != null)

{

backgroundRing.gameObject.SetActive(false);

}

}

}

Paso 3: Conectar el Joystick con el Cursor

¿Cómo hacemos para que este joystick mueva el cursor que programamos antes? Vamos a actualizar ligeramente el script de tu cursor (RTSVirtualCursor2D) para que lea automáticamente los valores del joystick.



Modifica tu script RTSVirtualCursor2D.cs para añadirle la referencia al joystick:



C#

using UnityEngine;



public class RTSVirtualCursor2D : MonoBehaviour

{

[Header("Movimiento")]

public float cursorSpeed = 1200f;

private RectTransform cursorRectTransform;

private RectTransform canvasRectTransform;



[Header("Control")]

public VirtualJoystick virtualJoystick; // Arrastra aquí tu objeto con el script VirtualJoystick



void Start()

{

cursorRectTransform = GetComponent<RectTransform>();

Canvas canvas = GetComponentInParent<Canvas>();

if (canvas != null)

{

canvasRectTransform = canvas.GetComponent<RectTransform>();

}

}



void Update()

{

Vector2 joystickInput = Vector2.zero;



// Si tenemos asignado el joystick, leemos su entrada (funciona tanto en móvil como con el ratón simulando el toque)

if (virtualJoystick != null)

{

joystickInput = virtualJoystick.inputVector;

}

else

{

// Respaldo por si quieres probar con teclado en la PC (Flechas o WASD)

joystickInput = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));

}



// Mover el cursor basado en la dirección del joystick

Vector2 movement = joystickInput * cursorSpeed * Time.deltaTime;

cursorRectTransform.anchoredPosition += movement;



ClampCursorToScreen();

}



void ClampCursorToScreen()

{

if (canvasRectTransform == null) return;



Vector2 anchoredPos = cursorRectTransform.anchoredPosition;

float maxX = canvasRectTransform.rect.width / 2f;

float maxY = canvasRectTransform.rect.height / 2f;



anchoredPos.x = Mathf.Clamp(anchoredPos.x, -maxX, maxX);

anchoredPos.y = Mathf.Clamp(anchoredPos.y, -maxY, maxY);



cursorRectTransform.anchoredPosition = anchoredPos;

}

}

¿Cómo configurarlo en Unity?

Asigna el script VirtualJoystick a tu panel de la izquierda (TouchController_Left).



En las casillas del script del joystick en el Inspector, arrastra el objeto JoystickBackground y el objeto JoystickHandle.



Ve a tu objeto del Cursor Virtual, busca el script RTSVirtualCursor2D y arrastra el objeto TouchController_Left a la casilla Virtual Joystick.



¡Listo! Al compilar para Android/iOS o probar en el editor tocando y arrastrando con el ratón en la mitad izquierda de la pantalla, verás aparecer el joystick y moverás tu cursor con total fluidez.



¿Qué te parece? Con esto ya tienes la base fundamental de tu RTS móvil (Mano izquierda controlando joystick + cursor + selección y movimiento de unidades). ¿Quieres que diseñemos los botones de acción para la mano izquierda o pasamos a otro detalle?



1



¡Excelente! Vamos a diseñar y programar los botones de acción para la mano izquierda, manteniendo el principio de que todo el control principal recaiga en tu lado izquierdo de la pantalla, dejando la mano derecha prácticamente libre (solo para emergencias o menús secundarios).



Para un RTS, la mano izquierda necesita al menos dos acciones rápidas y cómodas mientras el pulgar se mueve o descansa cerca del joystick:



Botón de Selección / Confirmar ("Click"): Reemplaza la tecla Espacio que usábamos antes.



Botón de Ordenar Movimiento ("Move"): Reemplaza la tecla E que usábamos antes.



Paso 1: Crear los Botones en el Canvas (UI)

Ve a tu Canvas, haz clic derecho y selecciona UI -> Panel (o mantén el panel TouchController_Left que ya creamos para la mitad izquierda).



Dentro de esa zona izquierda (cerca de donde se forma el joystick), crea dos botones de UI (clic derecho -> UI -> Button - TextMeshPro o Button standard):



Boton_Seleccionar: Ponle un texto que diga algo como "SEL" o un icono de selección. Colócalo en una posición cómoda para el pulgar izquierdo.



Boton_Mover: Ponle un texto que diga "MOVER" o una flecha de movimiento. Colócalo cerquita del botón de seleccionar.



Paso 2: Actualizar el Script de Selección/Comandos (RTSUnitSelector.cs)

Vamos a modificar el script para que ya no dependa de las teclas del teclado (Space o E), sino que se conecte directamente con estos nuevos botones de la interfaz táctil.



Actualiza tu script RTSUnitSelector.cs con el siguiente código:



C#

using UnityEngine;

using UnityEngine.UI; // Necesario para trabajar con botones de UI



public class RTSUnitSelector : MonoBehaviour

{

[Header("Referencias")]

public RectTransform cursorRectTransform;

public LayerMask unitLayerMask;



[Header("Botones Táctiles (Mano Izquierda)")]

public Button selectButton; // Arrastra aquí el botón de seleccionar

public Button moveButton; // Arrastra aquí el botón de mover



[Header("Estado Actual")]

public GameObject selectedUnit;



void Start()

{

// Vinculamos automáticamente las funciones de los botones cuando inicia el juego

if (selectButton != null)

{

selectButton.onClick.AddListener(AttemptSelection);

}



if (moveButton != null)

{

moveButton.onClick.AddListener(AttemptMoveOrder);

}

}



// Ya no necesitamos la comprobación por teclado en Update, ¡todo es táctil/clic de interfaz!



public void AttemptSelection()

{

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(cursorRectTransform.position);

worldPosition.z = 0f;



RaycastHit2D hit = Physics2D.Raycast(worldPosition, Vector2.zero, Mathf.Infinity, unitLayerMask);



if (hit.collider != null)

{

GameObject clickedUnit = hit.collider.gameObject;

SelectUnit(clickedUnit);

Debug.Log("Unidad seleccionada mediante botón táctil izquierdo.");

}

}



void SelectUnit(GameObject unit)

{

if (selectedUnit != null)

{

ToggleUnitHighlight(selectedUnit, false);

}



selectedUnit = unit;

ToggleUnitHighlight(selectedUnit, true);

}



public void AttemptMoveOrder()

{

if (selectedUnit != null)

{

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(cursorRectTransform.position);



RTSUnitMovement movementScript = selectedUnit.GetComponent<RTSUnitMovement>();

if (movementScript != null)

{

movementScript.SetDestination(worldPosition);

Debug.Log("Orden de movimiento enviada a: " + worldPosition);

}

}

else

{

Debug.Log("No hay ninguna unidad seleccionada para mover.");

}

}



void ToggleUnitHighlight(GameObject unit, bool isSelected)

{

SpriteRenderer sr = unit.GetComponent<SpriteRenderer>();

if (sr != null)

{

sr.color = isSelected ? Color.green : Color.white;

}

}

}

Paso 3: Conectar los Botones en el Inspector de Unity

Selecciona el objeto donde tienes puesto este script RTSUnitSelector.



Verás dos casillas nuevas en el Inspector: Select Button y Move Button.



Arrastra tu botón Boton_Seleccionar a la casilla Select Button y el botón Boton_Mover a la casilla Move Button.



¿Cómo funciona la experiencia ahora para el jugador?

Mano Izquierda:



Toca la mitad izquierda de la pantalla para mover el joystick y desplazar el cursor virtual por el mapa cenital.



Con los botones flotantes situados en esa misma zona izquierda, el pulgar izquierdo puede presionar "SEL" para seleccionar la unidad bajo el cursor, y luego presionar "MOVER" para mandarla a la posición actual del cursor.



Mano Derecha:



Queda completamente libre de la jugabilidad principal, cumpliendo exactamente con tu premisa de diseño.



¿Qué te gustaría integrar a continuación en el prototipo? ¿Quizás que la cámara siga automáticamente al cursor o añadir un tipo de enemigo/recurso para recolectar?



si



¡Perfecto! Vamos a añadir las dos cosas que enriquecen muchísimo un RTS clásico 2D: hacer que la cámara siga fluidamente al cursor (para que el jugador no pierda nunca de vista dónde está apuntando) y crear un objeto de recurso o estructura en el mapa con el que el jugador pueda interactuar.



Parte 1: Cámara que sigue al Cursor (RTSCameraFollow.cs)

En un juego de estrategia, si el cursor llega al borde de la pantalla o se desplaza lejos, la cámara debe acompañarlo para que el mapa se sienta amplio.



Crea un nuevo script en C# llamado RTSCameraFollow.cs, adjúntalo a tu Main Camera y pega este código:



C#

using UnityEngine;



public class RTSCameraFollow : MonoBehaviour

{

[Header("Referencias")]

public Transform cursorTransform; // Arrastra aquí el RectTransform o Transform de tu cursor virtual



[Header("Configuración de Seguimiento")]

public float followSpeed = 5f; // Velocidad con la que la cámara persigue al cursor

public Vector3 offset = new Vector3(0f, 0f, -10f); // Distancia en Z para la cámara 2D



void LateUpdate()

{

if (cursorTransform == null) return;



// Calculamos la posición del cursor en el mundo 2D

Vector3 targetPosition = Camera.main.ScreenToWorldPoint(cursorTransform.position);

targetPosition.z = offset.z; // Mantener la profundidad de la cámara



// Movimiento suave (Lerp) de la cámara hacia la posición del cursor

transform.position = Vector3.Lerp(transform.position, targetPosition, followSpeed * Time.deltaTime);

}

}

Cómo configurarlo:



Arrastra el script a tu cámara principal.



Arrastra tu objeto de Cursor Virtual a la casilla Cursor Transform del script en el Inspector.



Parte 2: Sistema de Interacción con Recursos / Edificios

Ahora hagamos que además de mover unidades, el jugador pueda interactuar con elementos del escenario (como un depósito de recursos, un edificio enemigo o una base).



Crea un objeto en el mapa: Crea un sprite 2D (puede ser un cuadrado o círculo de otro color, por ejemplo, azul o rojo) que represente una base o recurso.



Crea una capa nueva: Ve al Inspector de ese objeto, haz clic en Layer -> Add Layer y crea una capa llamada Interactables. Asigna este objeto a dicha capa.



Crea el script de interacción (RTSInteractable.cs):



C#

using UnityEngine;



public class RTSInteractable : MonoBehaviour

{

public string objectName = "Base enemiga / Recurso";



// Método que se ejecuta cuando el cursor interactúa con este objeto

public void OnInteracted()

{

Debug.Log("¡El cursor ha interactuado con: " + objectName + "!");



// Aquí puedes sumar recursos, restarle vida al edificio enemigo, abrir un menú, etc.

// Ejemplo visual temporal: cambiar el color al recibir la acción

SpriteRenderer sr = GetComponent<SpriteRenderer>();

if (sr != null)

{

sr.color = Color.yellow;

}

}

}

Añade la opción al Selector (RTSUnitSelector.cs):

Vamos a actualizar tu script de selección para que reconozca tanto unidades (Units) como elementos interactuables (Interactables), permitiendo que la mano izquierda ejecute acciones sobre el mapa.



Actualiza tu RTSUnitSelector.cs agregando esto (puedes integrarlo con lo que ya tenías):



C#

// Añade esta variable arriba con tus otras referencias:

public LayerMask interactableLayerMask;

public Button interactButton; // Opcional: Un tercer botón izquierdo para "Interactuar/Atacar"



// Y dentro de tu clase, añade una nueva función:

void Start()

{

// ... tus listeners anteriores ...

if (interactButton != null)

{

interactButton.onClick.AddListener(AttemptInteraction);

}

}



public void AttemptInteraction()

{

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(cursorRectTransform.position);

worldPosition.z = 0f;



// Lanzamos un raycast buscando elementos interactuables

RaycastHit2D hit = Physics2D.Raycast(worldPosition, Vector2.zero, Mathf.Infinity, interactableLayerMask);



if (hit.collider != null)

{

RTSInteractable interactable = hit.collider.GetComponent<RTSInteractable>();

if (interactable != null)

{

interactable.OnInteracted();

}

}

}

¡Tu Prototipo RTS para Móviles está tomando forma!

Con esto tienes:



Mano Izquierda dominante: Controla el Joystick flotante (movimiento del cursor), los botones de selección, movimiento e interacción.



Cámara dinámica: Sigue la acción del cursor fluidamente.



Mundo interactivo: Unidades que se mueven y objetos con los que interactuar en un entorno 2D cenital.



¿Qué te gustaría afinar ahora? ¿Quieres que veamos cómo empaquetar esto para probarlo directamente en tu teléfono Android/iOS, o prefieres añadir un sistema de salud / combate básico?



quiero probarlo directamente en mi telefono



¡Excelente! Ver tu juego corriendo directamente en la pantalla táctil de tu teléfono es el momento más emocionante del desarrollo.



Si tienes un teléfono Android, el proceso es directo y gratuito desde Windows o Mac. (Si tienes un iPhone, el proceso requiere obligatoriamente una Mac y Xcode, así que nos enfocaremos primero en Android, que es el más universal).



Aquí tienes los pasos exactos para pasar tu prototipo de Unity a tu celular:



Paso 1: Verificar los Módulos en Unity Hub

Asegúrate de tener instalado el soporte para Android:



Abre Unity Hub y ve a la pestaña Installs (Instalaciones).



Haz clic en los tres puntos ... al lado de tu versión de Unity y selecciona Add Modules (Añadir módulos).



Asegúrate de que estén marcadas las opciones:



Android Build Support



Android SDK & NDK



OpenJDK

(Si no estaban marcados, selecciónalos y pulsa Instalar, luego reinicia Unity).



Paso 2: Configurar el Proyecto para Android

Abre tu proyecto en Unity.



Ve al menú superior y selecciona File -> Build Settings.



En la lista de plataformas, haz clic en Android.



Haz clic en el botón inferior izquierdo que dice Switch Platform (Cambiar plataforma). Espera a que Unity recompile los recursos para móvil.



Paso 3: Preparar tu Teléfono Android

Para que tu PC pueda instalar el juego directamente en el celular:



Ve a los Ajustes de tu teléfono -> Información del teléfono -> Información de software.



Busca la opción Número de compilación y presiona sobre ella 7 veces seguidas hasta que aparezca un aviso flotante que diga: "¡Ahora eres un desarrollador!".



Regresa al menú principal de Ajustes, ahora verás un nuevo menú llamado Opciones de desarrollador.



Entra ahí y activa la opción Depuración USB (USB Debugging).



Paso 4: Conectar y Probar ("Build and Run")

Conecta tu teléfono a la computadora mediante un cable USB. Si en la pantalla del celular aparece un aviso pidiendo permiso para "Permitir depuración USB", acéptalo.



En Unity, vuelve a File -> Build Settings.



Asegúrate de que en Run Device esté seleccionado tu teléfono (si no aparece, haz clic en Refresh).



Haz clic en el botón Build and Run (Compilar y Ejecutar).



Unity te pedirá que guardes el archivo (por ejemplo, llámalo RTS_Prototipo.apk).



¡Listo! Unity compilará el juego y lo instalará automáticamente en tu teléfono para que puedas probar el joystick virtual y los botones con tus propias manos.



Opción alternativa (Generar APK para pasar por WhatsApp / Drive)

Si prefieres no conectar el celular por cable cada vez que hagas un cambio:



En Build Settings, haz clic solo en Build (en lugar de Build and Run).



Guarda el archivo .apk.



Pásate ese archivo .apk a ti mismo por Telegram, Google Drive, WhatsApp o conéctalo por cable y pásalo a la memoria interna.



Abre el archivo en tu teléfono, dale permisos para instalar aplicaciones de origen desconocido y ¡juega!



¿Tienes todo listo para hacer la prueba o te surge alguna duda con la conexión USB?







Gemini es una IA y puede cometer errores, incluso sobre personas. Tu privacidad y G
 
Última edición por un moderador:
  • #27
Se lo acabo de mandar a mi Chatgpt, le dije que lo revisara. Te iré actualizando, quiero curiosear con el un poco. Déjame alguans ideas que tienes para pedírselo a la IA. O hazme prompts con el gemini que tienes y yo los aplico
y se que te pareceran algo locas las cosas que te dije mas arriba pero estoy 100% seguro de que si alguien creara un RTS con esas caracteristicas que yo digo seria el primer RTS exitoso en decadas y se volveria super viral y super jugado.
tambien tengo otras ideas como crear un shuter donde el jugador controle la camara en vez de con su mano derecha con su mano izquierda y la mano derecha la uso solo para presionar el boton de adelante mientras que con la izquierda controlaria la camara, el boton de disparar y la mayoria de cosas(justo como se hacia en los juegos shuter de nintendo 64 sobre todo en el que fue su segundo video juego mas vendido de nintendo 64: 007) o crear un cabeza de playa para PC donde en vez de controlar la camara con el mause como se hacia con el beach of head, se controle con el WASD, pero bueno eso ya serian otros proyectos
 
  • #28
Se lo acabo de mandar a mi Chatgpt, le dije que lo revisara. Te iré actualizando, quiero curiosear con el un poco. Déjame alguans ideas que tienes para pedírselo a la IA. O hazme prompts con el gemini que tienes y yo los aplico
fijate que hasta geminis me respondio esto cuando le plantee lo de usar un jostick para controlar un cursor con la mano izquierda
...
¿Qué tanta experiencia previa tienes programando o usando Unity?



quiero hacer un videojuego RTS para telefono pero donde el jugador tenga que hacer el mayor uso posible de su mano izquierda con el juego el menor uso posible de su mano derecha, donde dentro del juego el jugador tenga que controlar un puntero justo como se hace en juegos de PC pero donde dicho puntero el lo controle con un jostick que estara al lado izquierdo de la pantalla con su mano izquierda



¡Es una excelente idea! Adaptar la precisión de un juego de estrategia en tiempo real (RTS) de PC a pantallas táctiles mediante un cursor controlado por joystick virtual izquierdo es un diseño brillante. Resuelve el principal problema de los RTS móviles: la imprecisión del dedo directo sobre unidades diminutas y la oclusión visual (tu propio dedo tapando lo que quieres tocar).



Dado que tu mano izquierda manejará el joystick de movimiento del cursor y las acciones principales, y la mano derecha quedará casi libre (quizás solo para un par de botones flotantes de emergencia o habilidades secundarias), el flujo de desarrollo en Unity se centra en crear un sistema de cursor virtual en el espacio del juego.
 
  • #29
Ok, pregunta, todo lo qe me has mandado es relacionado con el mismo proyecto, verdad?
 
  • #30
Ok, pregunta, todo lo qe me has mandado es relacionado con el mismo proyecto, verdad?
pues si, el proyecto de un juego RTS para mobiles, lo del juego MMO fue solo un experimento para ver que tan lejos podia llegar creando un juego con una IA pero el objetivo principal es crear un RTS, porque al final ya hay muchos MMO que cumplen las condiciones que yo pongo(ES DECIR: la de hacer mucho uso de la mano izquierda con el juego: WOW, genchi impact, etc), el objetivo principal es crear un RTS pero con esa idea que yo tengo.
 
  • #31
Primero hice que identificara los bugs y los corrigiera, luego que haga que El gameplay loop que tenias establecido de inicio verdaderamente funcione de manera coherente, para asi aplicar los sigiientes cambios en algo funcional. Puedes USAR Google drive?
 
  • #32
Ok, pregunta, todo lo qe me has mandado es relacionado con el mismo proyecto, verdad?
a ver yo te voy a dar mis ideas:
Crear un juego RTS para telefono donde el jugador tenga que hacer el mayor uso posible de su mano izquierda con el juego, para ello el jugador tendra que manejar un cursor con un jostick en su mano izquierda el cual sera como el clasico cursor de los juegos RTS para pc, donde a la derecha de la pantala habran cuando mas solo 2 botones, uno para el click primario y otro para el secundario aunque lo idea es que haya un solo boton el cual sera para el click secundario es decir para dar la orden de movimiento y ataques a las unidades y el click primario(es decir el de seleccionar unidades y el de mandar a construir) se pondria en la parte izquierda de la pantalla donde el jugador solo tendria que tocar dos veces la pantalla para activar dicho click primario(como si fuera el touchpad de una lapton)
me vas entendiendo?
 
  • #33
Primero hice que identificara los bugs y los corrigiera, luego que haga que El gameplay loop que tenias establecido de inicio verdaderamente funcione de manera coherente, para asi aplicar los sigiientes cambios en algo funcional. Puedes USAR Google drive?
si puedo usar googledrive
 
  • #34
Primero hice que identificara los bugs y los corrigiera, luego que haga que El gameplay loop que tenias establecido de inicio verdaderamente funcione de manera coherente, para asi aplicar los sigiientes cambios en algo funcional. Puedes USAR Google drive?
tengo que descargar tambien Unity una amigo me lo habia grabado hace unos meses pero lo borre porque pense que nunca lo iba necesitar, quiero descargar la ultima version que hay en internet que pesa 4 gigas pero quiero ver si la dejo descargando esta misma noche para usarla mañana por la mañana
 
  • #35
ok te pondre al tanto mañana
 
  • #36
ok te pondre al tanto mañana
okey, te voy a agredecer mucho tu ayuda con esto, desde hace tiempo tenia esa idea en mente pero no tenia ni los medios, ni el conocimiento ni la ayuda para llevarla a cabo,
voy a intentar descargar el unity esta noche, de todas formas tiempo de maquina es lo que se me va a sobrar en los proximos meses porque monte un negocio de impresion de documentos en mi casa y durante el tiempo que espero que vengan clientes puedo dedicarlo a esta otro proyecto.
 
  • #37
ok te pondre al tanto mañana
pero como te dije mis conocimientos en programacion son escasos o nulos o no tenia a nadie que me ayudara con este proyecto.
 
  • #38
pero como te dije mis conocimientos en programacion son escasos o nulos o no tenia a nadie que me ayudara con este proyecto.
Hazte una cuenta de GitHub please,asi podrás acceder al proyecto y lo que la IA está haciendo. Me pasas el link para agregarte al proyecto
 
  • #39
Hazte una cuenta de GitHub please,asi podrás acceder al proyecto y lo que la IA está haciendo. Me pasas el link para agregarte al proyecto
voy pa alla
 
  • #40
Atrás
Arriba