Durante las entrevistas, a menudo me preguntan cómo diseñar un sistema de puntos rojos. Este artículo presentará en detalle cómo diseñar un sistema de puntos rojos, qué interfaces tiene y brindará una implementación completa.
Análisis de requisitos del sistema de puntos rojos.
Primero, analicemos los requisitos de diseño del sistema de puntos rojos: estrictamente hablando, el sistema de puntos rojos no pertenece al marco, sino a la lógica del juego, por lo que el código no debe colocarse en un marco general, ya que no pertenece. al servicio básico. Su objetivo es ser un buen recordatorio de la información no procesada en el desarrollo de la lógica del juego. Para los usuarios, esperan que el sistema de puntos rojos pueda proporcionarles directamente interfaces y servicios, y pueda mostrar fácilmente puntos rojos debajo de nodos específicos y configurarlos en ubicaciones específicas. Los usuarios no necesitan preocuparse por el "aspecto" de los puntos rojos, cómo crear puntos rojos, el rendimiento de crear y destruir puntos rojos repetidamente, etc.
¡bien! Aquí hay un grupo de intercambio de desarrollo de juegos , que reúne a un grupo de principiantes a quienes les encanta aprender juegos, así como a algunos expertos técnicos que participan en el desarrollo de juegos. Le invitamos a venir, intercambiar y aprender.
Del análisis de la demanda se concluye que las interfaces externas proporcionadas por el “Red Dot System” son las siguientes:
1: Escriba la interfaz "CreateRedPoint" para crear un nodo de "punto rojo" y devolver el nodo al usuario, quien decide dónde colocar el punto rojo;
2: Escriba la interfaz "DestroyRedPoint" para eliminar y destruir un nodo de punto rojo;
3: Escriba la interfaz "SetRedPointValue", pase el nodo del punto rojo y luego establezca el valor específico en el punto rojo;
4: Escriba la interfaz "DestroyAllRedPoints", que se utiliza para eliminar y reciclar todos los puntos rojos debajo de la interfaz UI cuando se destruye;
Dado que el "Sistema Red Dot" creará y eliminará nodos con frecuencia, adopta internamente el modo de grupo de nodos, lo que puede maximizar el rendimiento.
Servicios básicos en los que se basa el sistema Red Dot
El sistema Red Dot no es completamente independiente y se basa en los servicios básicos del marco: uno es la administración de recursos, que es el principal responsable de cargar los recursos del nodo Red Dot, y el otro es el módulo de administración del grupo de nodos. El código de muestra del módulo de gestión de recursos utiliza YooAssets, y luego los nodos de punto rojo se convierten en casas prefabricadas, luego se recopilan y empaquetan a través de YooAssets, y luego los recursos del nodo se cargan mediante código. El sistema de puntos rojos se basa internamente en el mecanismo del grupo de nodos, por lo que se debe crear un grupo de nodos único para el nodo de puntos rojos.
Versión de YooAssets: 1.5.2
Gestión de recursos ResMgr: gestión de recursos sincrónica/asincrónica basada en YooAssets
Grupo de nodos: impleméntelo usted mismo; consulte el código para obtener más detalles;
Prefabricado de nodo de punto rojo: hay dos nodos secundarios debajo del nodo RedPoint, un elfo circular rojo y una etiqueta de texto, que se utilizan para mostrar números, como se muestra en la siguiente figura:
Implementación específica del código del sistema de puntos rojos.
Escriba un componente RedPointFlag, herede del Componente, para marcar qué nodos son puntos rojos. La función de este componente es usar este componente Bandera para encontrar todos los "puntos rojos" cuando se destruye una interfaz de interfaz de usuario y reciclarlos juntos.
clase pública RedPointFlag: Componente
{
}
Escriba un singleton global de RedPointMgr para proporcionar el servicio de "punto rojo". Proporciona la interfaz de inicio. Durante el inicio, se crea un grupo de nodos para el punto rojo. El código se muestra a continuación:
clase pública RedPointMgr: UnitySingleton<RedPointMgr>
{
inicio público vacío() {
NodePoolMgr.Instance.AddNodePool("GUI/Prefabs/RedPoint.prefab", 10);
}
}
Crear interfaz RedPoint:
GameObject público CreateRedPoint() {
GameObject redPoint = NodePoolMgr.Instance.Get("GUI/Prefabs/RedPoint.prefab");
if (redPoint.GetComponent<RedPointFlag>() == nulo) {
redPoint.AddComponent<RedPointFlag>();
}
devolver punto rojo;
}
Se debe prestar especial atención a esta interfaz: agregamos una instancia del componente RedPointFlag al nodo de punto rojo para facilitar la búsqueda de todos los puntos rojos más adelante.
Interfaz SetRedPointValue:
público vacío SetRedPointValue (GameObject redPoint, valor int) {
var etiqueta = redPoint.GetComponentInChildren<Text>();
etiqueta.texto = valor.ToString();
}
Se utiliza para establecer el valor de visualización correspondiente para el punto rojo. El principio es relativamente simple: simplemente busque el componente de texto en el punto rojo y modifique el contenido de visualización del componente de texto.
Interfaz DestroyRedPoint:
vacío público DestroyRedPoint (GameObject redPoint) {
NodePoolMgr.Instance.Recycle("GUI/Prefabs/RedPoint.prefab", redPoint);
}
Eliminar un punto rojo. Esto es principalmente para llamar al reciclaje del grupo de nodos.
Interfaz DestroyAllRedPoint:
vacío público DestroyAllRedPoint (GameObject uiRoot) {
RedPointFlag[] redPoints = uiRoot.GetComponentsInChildren<RedPointFlag>();
for (int i = 0; i < puntosrojos.Longitud; i++) {
NodePoolMgr.Instance.Recycle("GUI/Prefabs/RedPoint.prefab", redPoints[i].gameObject);
}
}
Eliminar todos los puntos rojos. Aquí usamos el componente RedPointFlag. Al filtrar todos los nodos con este componente, tenemos nuestros nodos de puntos rojos. Luego simplemente recicla todos los nodos.
A continuación, demos un ejemplo de uso simple. Es muy simple y conveniente de usar. Cree un punto rojo en el código de la interfaz de usuario y elimine todos los puntos rojos cuando se destruya la interfaz:
clase pública UIHomeCtrl: MonoBehaviour
{
// Se llama al inicio antes de la actualización del primer cuadro
inicio vacío()
{
Transformar raíz = this.transform.Find("Bottom/start/btnStart");
var redPoint = RedPointMgr.Instance.CreateRedPoint();
redPoint.transform.SetParent(raíz, falso);
redPoint.transform.localPosition = nuevo Vector3(120, 40, 0);
RedPointMgr.Instance.SetRedPointValue(redPoint, 20);
}
vacío privado OnDestroy()
{
RedPointMgr.Instance.DestroyAllRedPoint(this.gameObject);
}
}
Eso es todo para compartir hoy. Si necesita el código completo, puede seguirnos y obtener el código completo”.