GTACUBA
本物の藍染惣右介
Nivel 7
Oro
- Mensajes
- 2,355
A continuación, siga el video para ver cómo instalar este sitio como una aplicación web en su pantalla de inicio.
Nota: Esta función puede no estar disponible en algunos navegadores.
Al registrarte con nosotros, podrás conversar, compartir y enviar mensajes privados con otros miembros de nuestra comunidad.
¡Regístrate ahora!
o¿Por qué lo hardcodeas todo? Creo que mantener una estructura de archivos y directorios lo hace más organizado y fácil de mantener.bueno lo logre subir poniendolo como documento world, pero tienen que abrirlo con un navegador
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¿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.¿Por qué lo hardcodeas todo? Creo que mantener una estructura de archivos y directorios lo hace más organizado y fácil de mantener.
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.que significa hardcodear? y disculpa mi ignorancia.

) 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.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.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


No sé qué es más gracioso, el uso del adjetivo "perfecto" o el hecho de que menciones la estafa "NFT"Ironicamente, lo unico que le falta al juego del colega para ser perfecto son unos buenos NFT

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 unityOh 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.
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.Ver el archivos adjunto 23067
Que con la IA no hacían falta programadores, decía 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)
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.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
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 aplicoyo 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
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)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
Conversacion con gemenisTe 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.
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?
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.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 izquierdaSe 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
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.Ok, pregunta, todo lo qe me has mandado es relacionado con el mismo proyecto, verdad?
a ver yo te voy a dar mis ideas:Ok, pregunta, todo lo qe me has mandado es relacionado con el mismo proyecto, verdad?
si puedo usar googledrivePrimero 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ñanaPrimero 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?
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,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.ok te pondre al tanto mañana
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 proyectopero como te dije mis conocimientos en programacion son escasos o nulos o no tenia a nadie que me ayudara con este proyecto.
voy pa allaHazte 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
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
Foros Cuba es un espacio digital creado para fortalecer el diálogo y la conexión entre cubanos, dentro y fuera del país. Nuestro objetivo es construir una comunidad informada, participativa y respetuosa.