Advanced Unity Architect: Arquitetura e Design do Sistema Red Dot

Durante as entrevistas, muitas vezes me perguntam como projetar um sistema red dot. Este artigo irá apresentar em detalhes como projetar um sistema red dot, quais interfaces ele possui e fornecer uma implementação completa.

Análise de requisitos do sistema red dot

Primeiro, vamos analisar os requisitos de design do sistema red dot: A rigor, o sistema red dot não pertence ao framework, mas à lógica do jogo, portanto o código não deve ser colocado em um framework geral, pois não pertence ao serviço básico. Pretende ser um bom lembrete de informações não processadas no desenvolvimento da lógica do jogo. Para os usuários, eles esperam que o sistema de pontos vermelhos possa fornecer interfaces e serviços diretamente e possa exibir facilmente pontos vermelhos em nós específicos e configurá-los em locais específicos. Os usuários não precisam se preocupar com a "aparência" dos pontos vermelhos, como criar pontos vermelhos, com o desempenho de criar e destruir repetidamente pontos vermelhos, etc.

certo! Há um grupo de intercâmbio de desenvolvimento de jogos aqui, que reúne um grupo de novatos que adoram aprender jogos, bem como alguns especialistas técnicos envolvidos no desenvolvimento de jogos. Você é bem-vindo para vir, trocar e aprender.

Da análise da demanda conclui-se que as interfaces externas disponibilizadas pelo “Red Dot System” são as seguintes:

1: Escreva a interface "CreateRedPoint" para criar um nó "ponto vermelho" e retornar o nó ao usuário. O usuário decide onde colocar o ponto vermelho;

2: Escreva a interface "DestroyRedPoint" para excluir e destruir um nó de ponto vermelho;

3: Escreva a interface "SetRedPointValue", passe o nó do ponto vermelho e defina o valor específico no ponto vermelho;

4: Escreva a interface "DestroyAllRedPoints", que é usada para excluir e reciclar todos os pontos vermelhos na interface UI quando ela é destruída;

Como o "Red Dot System" cria e exclui frequentemente nós, ele adota o modo de pool de nós internamente, o que pode maximizar o desempenho.

Serviços básicos dos quais o sistema Red Dot depende

O sistema red dot não é totalmente independente e depende dos serviços básicos do framework: um é o gerenciamento de recursos, que é o principal responsável pelo carregamento dos recursos do nó red dot, e o outro é o módulo de gerenciamento do pool de nós. O código de amostra do módulo de gerenciamento de recursos usa YooAssets e, em seguida, os nós de ponto vermelho são transformados em pré-fabricados, coletados e empacotados por meio de YooAssets e, em seguida, os recursos do nó são carregados por meio de código. O sistema de ponto vermelho é baseado internamente no mecanismo de pool de nós, portanto, um pool de nós exclusivo deve ser criado para o nó de ponto vermelho.

Versão do YooAssets: 1.5.2

Gerenciamento de recursos ResMgr: gerenciamento de recursos síncronos/assíncronos baseado em YooAssets

Pool de nós: implemente você mesmo, veja o código para detalhes;

Pré-fabricado do nó de ponto vermelho: Existem dois nós filhos sob o nó RedPoint, um elfo circular vermelho e um rótulo de texto, usado para exibir números, conforme mostrado na figura a seguir:

Implementação específica do código do sistema red dot

Escreva um componente RedPointFlag, herdado de Component, para marcar quais nós são pontos vermelhos. A função deste componente é usar este componente Flag para encontrar todos os "pontos vermelhos" quando uma interface UI é destruída, e reciclá-los juntos.

classe pública RedPointFlag: Componente

{

}

Escreva um singleton global de RedPointMgr para fornecer o serviço de "ponto vermelho". Fornece a interface Init. Durante o Init, um pool de nós é criado para o ponto vermelho. código mostrado abaixo:

classe pública RedPointMgr: UnitySingleton<RedPointMgr>

{

public void Inicialização() {

NodePoolMgr.Instance.AddNodePool("GUI/Prefabs/RedPoint.prefab", 10);

}

}

Interface CriarRedPoint:

public GameObject CreateRedPoint() {

GameObject redPoint = NodePoolMgr.Instance.Get("GUI/Prefabs/RedPoint.prefab");

if (redPoint.GetComponent<RedPointFlag>() == nulo) {

redPoint.AddComponent<RedPointFlag>();

}

retornar ponto vermelho;

}

Atenção especial deve ser dada a esta interface. Adicionamos uma instância do componente RedPointFlag ao nó do ponto vermelho para facilitar a localização de todos os pontos vermelhos posteriormente.

Interface SetRedPointValue:

public void SetRedPointValue(GameObject redPoint, int valor) {

var rótulo = redPoint.GetComponentInChildren<Text>();

rótulo.text = valor.ToString();

}

É usado para definir o valor de exibição correspondente para o ponto vermelho. O princípio é relativamente simples: basta encontrar o componente Texto no ponto vermelho e modificar o conteúdo de exibição do componente Texto.

Interface DestruirRedPoint:

public void DestroyRedPoint(GameObject redPoint) {

NodePoolMgr.Instance.Recycle("GUI/Prefabs/RedPoint.prefab", redPoint);

}

Exclua um ponto vermelho. Isso ocorre principalmente para chamar a reciclagem do pool de nós.

Interface DestruirAllRedPoint:

public void DestroyAllRedPoint(GameObject uiRoot) {

RedPointFlag[] redPoints = uiRoot.GetComponentsInChildren<RedPointFlag>();

for (int i = 0; i <pontosvermelhos.Comprimento; i++) {

NodePoolMgr.Instance.Recycle("GUI/Prefabs/RedPoint.prefab", redPoints[i].gameObject);

}

}

Exclua todos os pontos vermelhos. Aqui usamos o componente RedPointFlag. Ao filtrar todos os nós com este componente, temos nossos nós de pontos vermelhos. Depois é só reciclar todos os nós.

A seguir, vamos dar um exemplo de uso simples. É muito simples e conveniente de usar. Crie um ponto vermelho no código da IU e exclua todos os pontos vermelhos quando a interface for destruída:

classe pública UIHomeCtrl: MonoBehaviour

{

// Start é chamado antes da primeira atualização do frame

vazio Início()

{

Raiz da transformação = this.transform.Find("Bottom/start/btnStart");

var redPoint = RedPointMgr.Instance.CreateRedPoint();

redPoint.transform.SetParent (raiz, falso);

redPoint.transform.localPosition = novo Vetor3(120, 40, 0);

RedPointMgr.Instance.SetRedPointValue(redPoint, 20);

}

vazio privado OnDestroy()

{

RedPointMgr.Instance.DestroyAllRedPoint(this.gameObject);

}

}

É isso para o compartilhamento de hoje. Se precisar do código completo, você pode nos seguir e obter o código completo.”

Acho que você gosta

Origin blog.csdn.net/voidinit/article/details/135884026
Recomendado
Clasificación