¿Cómo crear una función enumerador para intercambiar piezas?
En el desarrollo de un juego de lógica como Max3, una característica clave es el intercambio de piezas. Este proceso no es simple, ya que debe permitir al jugador ver el intercambio en tiempo real y determinar si el movimiento es válido en función de los matches encontrados. Para lograr esto, transformamos la función swapTiles en un enumerador, lo que nos permite manejar la secuencia y el tiempo de ejecución del intercambio de manera controlada.
Implementación de la nueva variable swappingPieces
Primero, añadimos una variable booleana llamada swappingPieces al comienzo de nuestra clase. Esta variable sirve para gestionar el estado del juego evitando que múltiples movimientos se procesen simultáneamente.
privatebool swappingPieces =false;
Conversión de swapTiles a un enumerador
La función swapTiles deja de ser del tipo void y pasa a ser un enumerador para controlar el flujo y la visualización de los movimientos en el juego.
Esperar el movimiento: Utilizamos yield return new WaitForSeconds para pausar la ejecución por 0.6 segundos, lo que permite visualizar el intercambio de piezas.
yieldreturnnewWaitForSeconds(0.6f);
Detección de matches: Creamos las variables startMatches y endMatches para almacenar los posibles matches al inicio y al final del intercambio, utilizando la función getMatchesByPiece.
var startMatches =getMatchesByPiece(startTile.x, startTile.y,3);var endMatches =getMatchesByPiece(endTile.x, endTile.y,3);
Proceso de matches: Si se detectan matches, se actualiza el sistema y se destruyen las piezas correspondientes; de lo contrario, las piezas vuelven a su posición original.
¿Cómo encontrar y corregir errores en la función de detección?
Es vital que nuestra lógica de matches funcione bien en un juego Match3. Si el sistema no detecta matches, debemos revisar nuestras funciones analizando desde la llamada swapTiles, pasando por getMatchByPiece hasta getMatchByDirection.
Una línea incorrecta que afectaba el funcionamiento del código era:
nextY *= direction.y;
Esto debe corregirse para avanzar correctamente por las coordenadas:
nextY += direction.y;
Tras aplicar los cambios correctos, ejecuta el juego en Unity para asegurarte de que los matches ahora se identifican correctamente. ¡Continúa perfeccionando e iterando sobre tu implementación, y tu juego será más robusto y emocionante! Recuerda que los errores son oportunidades de aprendizaje, y cada ajuste te acerca a un resultado más óptimo.
La respuesta la encontre comparando el codigo de la clase con el mio en el repo de github
Estoy teniendo este error, el código como tal funciona bien, pero no sé de donde surge este problema. alguna idea?
NullReferenceException:Object reference not set to an instance of an object
UnityEditor.PropertyHandler.IsArrayReorderable(UnityEditor.SerializedProperty property)(at /Users/bokken/build/output/unity/unity/Editor/Mono/ScriptAttributeGUI/PropertyHandler.cs:449)UnityEditor.PropertyHandler.UseReorderabelListControl(UnityEditor.SerializedProperty property)(at /Users/bokken/build/output/unity/unity/Editor/Mono/ScriptAttributeGUI/PropertyHandler.cs:499)UnityEditor.PropertyHandler.GetHeight(UnityEditor.SerializedProperty property,UnityEngine.GUIContent label,System.Boolean includeChildren)(at Users/bokken/build/output/unity/unity/Editor/Mono/ScriptAttributeGUI/PropertyHandler.cs:308)UnityEditor.EditorGUI.GetPropertyHeightInternal(UnityEditor.SerializedProperty property,UnityEngine.GUIContent label,System.Boolean includeChildren)(at /Users/bokken/build/output/unity/unity/Editor/Mono/EditorGUI.cs:7179)UnityEditor.EditorGUI.GetPropertyHeight(UnityEditor.SerializedProperty property,UnityEngine.GUIContent label,System.Boolean includeChildren)(at /Users/bokken/build/output/unity/unity/Editor/Mono/EditorGUI.cs:8655)UnityEditor.Editor.CanBeExpandedViaAFoldoutWithoutUpdate()(at /Users/bokken/build/output/unity/unity/Editor/Mono/Inspector/Editor.cs:1259)UnityEditor.UIElements.EditorElement.UpdateInspectorVisibility()(at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Editor/Inspector/EditorElement.cs:215)UnityEditor.UIElements.EditorElement.Init()(at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Editor/Inspector/EditorElement.cs:142)UnityEditor.UIElements.EditorElement..ctor(System.Int32 editorIndex,UnityEditor.IPropertyView iw,System.Boolean isCulled)(at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Editor/Inspector/EditorElement.cs:94)UnityEditor.EditorUIServiceImpl.CreateEditorElement(System.Int32 editorIndex,UnityEditor.IPropertyView iw,System.String title)(at Users/bokken/build/output/unity/unity/Modules/UIServiceEditor/EditorUIService.cs:33)UnityEditor.PropertyEditor.DrawEditors(UnityEditor.Editor[] editors)(at /Users/bokken/build/output/unity/unity/Editor/Mono/Inspector/PropertyEditor.cs:1749)UnityEditor.PropertyEditor.RebuildContentsContainers()(at /Users/bokken/build/output/unity/unity/Editor/Mono/Inspector/PropertyEditor.cs:896)UnityEditor.InspectorWindow.RedrawFromNative()(at /Users/bokken/build/output/unity/unity/Editor/Mono/Inspector/InspectorWindow.cs:156)
Hola! parece que esto es un error del Editor de unity tratando de renderizar un widget para alguna propiedad en uno de tus scripts, no es algo que vaya a afectar al juego, pero puede ser dificil de debuggear. Yo probaria creando una nueva escena y agregando los game objects uno por uno y mirar cuando aparece el error de nuevo.
Chicos, queria aportar que veo que varios en los comentarios se quejan por errores.
Por si alguno se desmotiva, yo segui el codigo al pie de la letra y el mismo funciona bien!
A no desanimarse que parte del desarrollador es poder encontrar y resolver los errores que tira el codigo, seguramente haya algo mal escrito! Animos!
Me siento estafado. Pague mas de 300 mil pesos por este curso de mierda. Copie TAL CUAL el codigo del video y me da error, y ningun profe se digna a responder a las preguntas en los comentarios. Ademas intente copiar y pegar el codigo directamente usado, pero en la descripcion hay un codigo cualquiera super mal hecho. ESTAFADO
Ahi esta solucionado. Descargue directamente el proyecto en la descripcion. Lo que si, cuando comparas los dos codigos, el del video y el de la descarga, son totalmente distintos