Componentes pequenos
Parte da seção Arquitetura de jogos no Unity do Journey de Unity da Coddy. Lição 1 de 50.
Um GameObject é uma lista de componentes, e cada script que você escreve é mais um deles. Os jogos Unity são construídos atribuindo uma tarefa a cada script e colocando vários scripts em um objeto. O movimento, os tiros e os pontos de vida de um jogador poderiam ficar todos em um único PlayerController, mas, como três componentes, Mover, Shooter e Health, cada um também pode ser usado em outros objetos:
public class Health : MonoBehaviour
{
public int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}- Jogador: Mover, Shooter, Health
- Torreta: Shooter, Health
- Caixa: Health
Com classes C# simples, você poderia construir uma árvore: Character, depois ShootingCharacter : Character, depois Player : ShootingCharacter. Uma torreta atira, mas nunca anda, e uma caixa apenas quebra, então cada novo tipo de objeto significa remodelar a árvore. Com componentes, um novo tipo de objeto é uma nova combinação de scripts que já existem, reunidos no Inspector, e cada script pode ter seus próprios valores ali: um Mover lento em um objeto, um rápido em outro.
Os componentes de um mesmo objeto compartilham seu Transform, então cada um deve alterar apenas a parte pela qual é responsável. Um Mover que adiciona valores a x e z com transform.position += deixa y intacto, então um Jumper no mesmo objeto ainda pode alterar a altura. Um Mover que definisse a posição inteira como new Vector3(x, 0.5f, z) colocaria y de volta a cada frame e cancelaria o salto.
Desafio
FácilBoat.cs faz três coisas ao mesmo tempo: as setas (a ação Move) controlam o barco, o barco balança nas ondas e sua lâmpada pisca. O pato também precisa do balanço, e a boia precisa do balanço e das piscadas, então a cena já fornece a eles os componentes Bobber e Blinker, e o barco tem os três. Divida Boat.cs entre eles:
- Bobber: cada objeto balança em torno da altura em que começa,
heightunidades para cima e para baixo, na sua própriaspeed(o Inspector define ambos). Bobber altera apenas o y da posição, para que o barco ainda possa ser controlado. - Blinker: ele liga e desliga
lamp(um Renderer) a cadaintervalsegundos. - Boat mantém apenas o controle: exclua o balanço e as piscadas, junto com seus campos.
Pressione Play e controle o barco para passear, depois Check.
Experimente você mesmo
using UnityEngine;
using UnityEngine.InputSystem;
// Um script, três tarefas: controlar a direção, balançar e piscar.
public class Boat : MonoBehaviour
{
public float speed = 3f;
public float bobHeight = 0.1f;
public float bobSpeed = 2f;
public Renderer lamp;
public float blinkInterval = 0.5f;
private InputAction moveAction;
private float startY;
private float blinkTimer;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
startY = transform.position.y;
}
void Update()
{
// controle da direção
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, 0f, input.y) * speed * Time.deltaTime;
// balanço
Vector3 p = transform.position;
p.y = startY + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
transform.position = p;
// piscar
blinkTimer += Time.deltaTime;
if (blinkTimer >= blinkInterval)
{
blinkTimer -= blinkInterval;
lamp.enabled = !lamp.enabled;
}
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Arquitetura de jogos no Unity
1Componentes, não hierarquias
Componentes pequenosUm script-base para inimigosComponentes abstratosComponentes trabalhando juntosRevisão: Torre modular4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de Loot7Máquinas de Estados
Estados como ClassesUma Máquina de EstadosTransiçõesInteligências dos InimigosRevisão: Estados da Porta10Projeto: Sobrevivente da Arena
O HeróiTipos de Inimigos5ScriptableObjects
Assets de dadosAtributos das armasConfigurações compartilhadasOndas como dadosRevisão: banco de dados de itens