Redgate Hub

suponha que você está fazendo um jogo de RPG e você precisa de uma maneira mais fácil de atribuir estatísticas, propriedades e muito mais para vários itens. Enquanto você poderia usar prefabs de unidade para fazer isso e, em seguida, mudar os valores de cada cópia individual do prefab, esta é uma maneira inconveniente de ir sobre a tarefa. Para começar, este método usa mais de sua memória, algo que você pode precisar conservar se você planeja fazer um grande jogo. Além disso, se você tiver que fazer quaisquer alterações aos objetos no jogo, simplesmente não é tão eficiente fazê-lo quando há várias cópias de prefabs espalhados. Isso especialmente se torna um problema se você tiver uma equipe maior para trabalhar, então você vai querer tornar as coisas mais fáceis de mudar para outros membros da equipe. Mesmo que não estejas numa equipa, este método seria mais difícil para ti enquanto trabalhas.

para tornar as coisas mais fáceis em uma situação como esta, você tem objetos Scriptable à sua disposição. E o que são objetos Scriptable? Simplificando, eles são containers de dados. O desenvolvedor Unity cria um modelo básico para esses containers, definindo que informações cada objeto deve conter. Então os objetos Scriptable são criados a partir desse modelo, que são então usados por objetos Unity game. No exemplo acima, um único objeto Scriptable pode ser usado para definir quais são as diferentes propriedades de um item. Então esse objeto Scriptable é referenciado por todas as cópias do item. Antes, se você quisesse mudar as estatísticas de um item, você teria que mudar os valores de cada cópia do item. Agora, com objetos programáveis, você só precisa mudar um objeto (o objeto programável) e todos os objetos obtendo dados desse objeto programável mudam ao mesmo tempo.É sempre útil ver estas coisas em acção, criar um novo projecto. Este projecto mostra os objectos programáveis e como podem ajudá-lo. O projeto consiste em três objetos de jogo destinados a representar três personagens. Cada caractere herda alguns valores de um objeto Scriptable. Esses valores são saúde máxima, ataque, defesa, velocidade, e um nome e cor para o personagem. Uma interface de usuário simples exibe esses valores para que você possa ver facilmente os resultados da aplicação de objetos Scriptable. Agora que você tem um objetivo final, é hora de começar a criar.

configuração do projecto

assumindo que irá implementar estas ideias num novo projecto, abra a aplicação Unity Hub e crie um novo projecto, como mostrado na Figura 1.

Figura 1: Criar um novo projecto

na próxima janela, dê ao projecto qualquer nome à sua escolha e decida qual o caminho do ficheiro. Enquanto você pode executar este projeto em qualquer modelo, este exemplo usa o modelo de projeto 3D como mostrado na Figura 2. Recomenda-se que use este modelo se quiser acompanhar.

Figura 2: Definir o nome, tipo e localização do projecto

uma vez criado o projecto, você vai querer organizar-se. Na sua janela de activos, terá de criar três pastas, Carregando com o botão direito na janela e navegando para criar a pasta->, como mostrado na Figura 3, nomeie os materiais das pastas, os objectos programáveis e os programas.

Figura 3: Criando uma nova pasta

enquanto você está aqui, é uma boa idéia ir em frente e obter três materiais feitos. Estes materiais são usados para mudar as cores de diferentes objetos seguindo qualquer material que o objeto Scriptable especifica. Para criar esses materiais, navegue para a pasta de materiais e clique direito novamente, desta vez selecionando Criar-> Material. Ao nomear o material, é recomendado dar-lhe um nome que se correlacione com a sua cor. Por exemplo, este primeiro material pode ser chamado vermelho. Para definir esta cor, você deve selecionar o material recém-criado e navegar para a janela do Inspetor. No campo de Albedo, há um picador de cores mostrado na Figura 4 em que você pode clicar para abrir o, bem, picador de cores.

Figura 4: Abrir o seletor de cores

A cor é alterada, seja movendo o pequeno círculo no seletor de cores ou diretamente pela entrada dos valores de RGB na metade inferior do seletor de cores da janela. No exemplo acima, os valores RGB seriam 255, 0, 0. Depois disso, você deve criar mais dois materiais e atribuir suas cores. Este exemplo usa verde e azul, mas eles podem ser qualquer cor de sua escolha.

agora chega a hora de criar a cena atual onde este jogo acontece. Consiste em duas partes principais-há a interface do usuário que mostra as estatísticas dadas a vários objetos scriptable e as três cápsulas que representam caracteres. Os “personagens” são a parte mais fácil, então você pode começar por lá. Tudo o que você tem a fazer é ir para a janela de hierarquia, clique no botão Criar, e escolher objeto 3D -> cápsula mostrada na Figura 5. Faça isso três vezes ou copie o primeiro objeto, e você também pode dar-lhes nomes, se quiser. Este exemplo dá às cápsulas os nomes Char1, Char2, Char3.

Figura 5: criação de um objecto cápsula

terá de mudar as suas posições, para que não se sobreponham. Para mudar a posição do objeto, você seleciona um na hierarquia e navega para o componente de transformação no Inspetor. Em seguida, mude os campos de posicionamento x, y e z para mover os objetos onde você quiser.

Figura 6: Editar a posição do objeto

a Tabela 1 mostra as posições exatas de todas as três cápsulas neste exemplo.

Quadro 1: Todos os objetos e suas posições no mundo

Objeto

Posição X

Posição Y

Z Posição

Char1

Char2

Char3

Claro, sinta-se livre para ajustar qualquer um desses números, se você desejar. O próximo é a interface do usuário, que mostra os valores dados aos objetos Scriptable. Para começar, terá de carregar no botão de criação da hierarquia, mas desta vez escolha UI -> Canvas. Depois, com o novo objecto de área de desenho seleccionado, carregue no botão Criar de novo e, desta vez, seleccione Criar uma criança vazia. Finalmente, mais uma vez clique no botão Criar e desta vez escolha UI -> texto. Arraste o objecto de texto recentemente criado para o objecto do jogo vazio e duplique o texto quatro vezes com o Ctrl + D, de modo a que haja um total de cinco objectos de texto sob o GameObject. Uma vez terminado, sua hierarquia deve se parecer com a da Figura 7.

Figura 7: a hierarquia atual

cada objeto de texto correlaciona-se com o nome e as estatísticas que são dadas via objeto Scriptable, sendo essas estatísticas a saúde máxima, ataque, defesa e velocidade. É útil mudar os nomes dos objetos de texto para o valor que representa. Então, o primeiro objeto de texto pode ser chamado name_text, e o segundo pode ser chamado attack_text, e assim por diante. Além disso, você vai precisar mudar o texto padrão para ajudar a fornecer um visual para como a interface do usuário parece. Isto é feito navegando para o componente de texto no Inspector e alterando o valor do texto. E, finalmente, ajustar as suas posições para que não estejam todos empilhados um em cima do outro. Para manter isso fácil, a Tabela 2 mostra todos os nomes de objetos diferentes e quais seus respectivos valores devem ser.

Table 2: All Text objects and their default text and positioning values

Rename GameObject (under Canvas) to something a little more descriptive, such as Char1Description, then duplicate the parent object. Renomear os dois duplicados para Char2Description e Char3Description e posicionar os três objetos, de modo que eles estão acima dos objetos da cápsula. Este exemplo coloca Char1Description em uma posição X de -300, Char2Descrption em 0, e Char3Position em 250. Todos os valores de posição Y E Z são deixados em 0.

foi um pouco de um longo caminho, mas a configuração do projeto está completa! Agora chega a hora de codificar e ver apenas como objetos Scriptable são criados, tanto quanto a programação vai. Na sua janela de activos, navegue para a pasta Scripts e crie dois novos scripts, Carregando com o botão direito e navegando para criar -> C# Script. Estes guiões devem ser chamados CharStats e LoadStats. Uma vez que estes são criados, você vai começar no script CharStats, então clique duas vezes neste script para abrir o Visual Studio e começar com o processo de codificação.

script CharStats

a fim de criar um objeto Scriptable, você terá que primeiro adicionar ao menu Create que você usou para criar materiais e scripts. Para fazer isso, você vai usar o atributo CreateAssetMenu e especificar o nome de arquivo e localização padrão dentro do menu. Além disso, você vai precisar mudar de que Classe CharStats está herdando. Por padrão, cada classe C# em um projeto Unity herda de MonoBehaviour, mas este script precisa herdar de ScriptableObject em vez disso.

Notice when setting menuName that a slash character is used, indicating the use of submenus. Se você quisesse, você poderia remover a barra e apenas ter a opção de unidades do Jogador presente sem precisar navegar mais através do menu Criar. Neste caso, o submenu foi adicionado principalmente para mostrar que você pode organizar seus objetos Scriptable por qualquer coisa que desejar. Neste caso, o menu é Create -> criação de caracteres -> unidades de jogadores. Se você quiser, em outro objeto Scriptable você pode ter o objeto ser criado a partir do mesmo caminho, mas com uma opção de criação diferente, como Item.

sendo um objecto programável, não há necessidade do método por omissão Start e dos métodos de actualização, para que possa apagá-los. O objetivo principal deste objeto é manter dados que são dados a outro objeto, mas dois métodos personalizados também são criados para demonstrar como objetos Scriptáveis podem fazer mais do que apenas manter dados. Falando de dados, o código para a definição de quais dados esse objeto contém vai como esta:

1
2
3
4
5
6

cadeia pública charName;
public int ataque;
int pública e defesa;
public int velocidade;
public int maxHealth;
Material público newColor;

Como mencionado anteriormente, cada objecto de script contém um nome e alguns valores para quatro diferentes estatísticas. Ele também contém informações para o que a nova cor do personagem, uma vez que o objeto Scriptable é aplicado. Os valores para cada um são definidos no editor de unidade, e é claro, eles serão diferentes para cada objeto criado.

os dois métodos são simples. Basta imprimir uma mensagem para a consola de depuração dizendo que o personagem foi carregado. Esta mensagem está impressa no método Start da escrita LoadStats.

1
2
3
4

public void PrintMessage()
{
Depuração.Log (o caracter “+ charName + ” foi carregado.”);
}

RandomizeStats, o segundo método, faz exatamente o que o nome sugere. Ele muda os valores do objeto Scriptable para um número aleatório entre 1 e 20. Mais tarde, você irá programar o projeto para atualizar a interface do usuário com os novos valores automaticamente. Mas essa nem é a parte mais interessante! Dados em um objeto Scriptable são persistentes, o que significa que eles permanecerão os mesmos para a sessão até que o jogo seja fechado. Isto é especialmente útil se você está fazendo um jogo que consiste em várias cenas, uma vez que normalmente objetos antigos são excluídos, e novos são carregados como uma nova cena é aberta. No entanto, dados de objetos Scriptable são intocados na transição entre cenas. Além disso, os dados permanecem os mesmos enquanto trabalham no editor Unity até que o próprio editor seja fechado. Isto significa que as alterações feitas aos dados dentro dos objetos Scriptable durante a execução do jogo do editor estão presentes quando você jogar o jogo do editor novamente, desde que não sejam feitas alterações aos dados em si.

isto é tudo o que existe no script CharStats. Pode parecer bastante simples, mas o projecto não está completo. Você programou a capacidade de fazer objetos Scriptable com seus próprios métodos e dados, mas seus personagens capsulares não sabem nada sobre esses objetos. No que lhes diz respeito, os objectos Scriptable não existem. Para corrigir isso, você precisará abrir o script do LoadStats e codificá-lo para que os objetos possam usar os dados de um objeto Scriptable para atualizar a interface do Usuário e mudar sua cor. O código deve ser semelhante à figura 8.

Figura 8: script CharStats completo

script LoadStats

não se preocupe em mudar onde a classe que este script herda. O padrão MonoBehaviour é precisamente o que é necessário. Em vez disso, incluir uma nova declaração usando no topo.

1
usando UnityEngine.INTERFACE do usuário;

Incluindo isso permite que você para obter o texto da interface do usuário e de atualização para exibir os valores encontrados nos Objetos Programáveis. Agora, para a própria classe, começando com variáveis.

1
2
3
4
5
6
7
8

// scriptable object
public CharStats charStat;
public Text nameText;
public Text attackText;
public Text defenseText;
public Text speedText;
public Text maxHealthText;
public MeshRenderer currentColor;

como observado no comentário, a variável charStat é o objeto Scriptable que é usado. Você pode ver aqui que obter estes objetos Scriptable não é diferente de declarar qualquer outra variável. Mais tarde no script, você estará obtendo as variáveis e métodos dentro do objeto e usando-os neste script. De fato, o método PrintMessage encontrado em CharStats é usado no método LoadStats Start agora.

1
2
3
4
5

void Iniciar()
{
DisplayStats();
charStat.PrintMessage();
}

Como com qualquer outro fora de script, tudo que você precisa fazer é chamar charStat seguido de PrintMessage para obter o método encontrado no Objeto Programável. Isto pode ser especialmente útil se você tiver objetos que todos têm comportamentos semelhantes ou idênticos. Neste caso, ele também pode ser útil para o desenvolvedor para, como neste exemplo, imprimir mensagens para a consola de depuração. Se algo correr mal e você suspeitar que o objeto Scriptable estava em falta, você poderia usar as mensagens da consola de depuração para encontrar o problema.Neste momento, há um erro a dizer que DisplayStats não existe. Para corrigir isso, navegue abaixo do método Update e adicione este código.

aqui é onde os valores armazenados no objeto Scriptable saem para jogar. Todas as variáveis de texto declaradas antes? Eles serão dados para exibir, então esses pontos de interrogação que você definiu no editor agora exibem algum valor. Além disso, embora não seja realmente um estado, por si só, a cor do personagem é alterada aqui, chamando currentColor.material e configurando-o para o material definido no objeto Scriptable.

o segundo método charStats, RandomizeStats , ainda não viu uso, por isso você deve encontrar um lugar para ele. No método Update, o programa verifica se a barra de espaço foi pressionada. Se ele tem, então ele chama RandomizeStats e dá ao objeto Scriptable alguns novos valores. Então DisplayStat é chamado novamente, e os novos valores são exibidos.

1
2
3
4
5
6
7
8

void Update()
{
se (Entrada.GetKeyDown (KeyCode.Espaço))
{
charStat.RandomizeStats();
DisplayStats();
}
}

Isto conclui o LoadStats script, terminando assim a codificação parte deste projeto. O código deve ser semelhante à Figura 9. Tudo o que resta fazer agora é criar alguns objetos Scriptable, aplicá-los ao objeto cápsula usando LoadStats, e tentar esta nova funcionalidade para fora. É claro, certifique-se de salvar o seu trabalho antes de retornar ao editor unidade.

Figura 9: script completo do LoadStats

Completando o projeto

para usar objetos Scriptáveis, você deve primeiro criá-los. Na janela do activo, sob a pasta de objectos programáveis, carregue com o botão direito e navegue para criar-> criação de caracteres- > unidades de jogadores, como mostrado na Figura 10.

Figura 10: Criando uma nova unidade de Jogador, um objeto Scriptable

você pode nomear o objeto o que quiser. O exemplo baseia esses objetos fora das classes tradicionais de RPG, então ele terá um guerreiro, caçador e mage. Selecione o novo objeto, em seguida, navegue para a janela do inspetor e dê valores para os diferentes campos. Para preencher o novo campo de cores, basta navegar para a sua pasta de materiais e clicar e arrastar o seu material desejado para o campo, como mostrado na Figura 11.

Figura 11: Configurando o novo material de cor do objeto

crie mais dois objetos Scriptáveis e faça o mesmo que antes, dando-lhes valores diferentes para os diferentes campos. Uma vez feito isso, mova-se para a janela de Hierarquia e selecione um dos objetos char. Em seguida, dê-lhes o script LoadStats como um componente, navegando para a pasta Scripts na janela de Recursos, encontrar LoadStats, e arrastá-lo para a janela Inspetor, como mostrado na Figura 12.

Figura 12: anexando o script do LoadStats a um objeto

em seguida, você precisará preencher os campos do LoadStats. Para começar, encontre um objeto Scriptable que você deseja usar no seu primeiro” caráter ” e aplique-o no campo Char Stat como mostrado na Figura 13. Lembre-se que os objectos programáveis são encontrados na janela de activos sob os objectos programáveis.

Figura 13: configuração onde o objeto Scriptable Char1 é obter dados

agora preencha os campos de texto. Na hierarquia, você vai expandir a área de desenho seguido de expandir o objeto de descrição de caracteres que está correlacionado com o que você está editando atualmente. Por exemplo, editar o Char1 significa que você vai querer expandir o Char1Description. Em seguida, pegue os objetos de texto encontrados sob o objeto pai e aplicá-los aos campos correspondentes, como mostrado na Figura 14.

Figura 14: definir todos os campos de texto

uma vez que os campos de texto tenham sido preenchidos, você só precisa obter o renderizador de malha do objeto, para que você tenha acesso ao material, permitindo assim a mudança de cor. Tudo que você precisa fazer é clicar e arrastar o componente de renderizador de malha na janela do inspetor e arrastá-lo para o campo de cores atual, como mostrado na Figura 15.

Figura 15: Configurando o campo de cores actual

repita os passos anteriores para os outros dois objectos de caracteres, e terá terminado o projecto. Quando estiver pronto, clique no botão play no topo do editor e observe que três objetos quase idênticos têm valores muito diferentes ligados a eles. Se por alguma razão algo não está olhando direito, o primeiro lugar a verificar seria seus objetos Scriptable e assegurar-se que os valores e cores exibidos são os que você queria. Lembre-se de verificar novamente o novo campo de cores também.

todos estes números e suas cores vêm de objetos Scriptable, que eles mesmos vêm de um único modelo. Você poderia fazer ainda mais objetos Scriptable também e conectá-los ao campo Char Stat em um componente de carga Stats de um objeto e ter um caráter muito diferente. Ao executar o jogo (Figura 16), deverá ver uma mensagem na consola de depuração no canto inferior esquerdo, indicando que foi carregado um carácter. Existem duas outras mensagens, mas você só pode ver a única mensagem sem abrir a consola de depuração completa, encontrada na janela -> General -> Console. Você também pode pressionar a barra de espaço para obter algumas estatísticas completamente novas para seus personagens. Se parar o jogo e o repetir, irá notar que os valores que gerou aleatoriamente persistem, demonstrando a persistência dos objectos programáveis. Eles voltarão aos seus valores originais, quer inserindo manualmente os valores nos objectos, quer fechando e reabrindo o editor.

Figura 16: Objetos Programáveis em ação

Conclusão

Naturalmente, você pode criar vários tipos de Objetos Programáveis para muitos tipos de objetos. Este exemplo demonstrou seu uso através de classes de caracteres, mas há também o exemplo de itens acima. Ele pode até mesmo ser usado para objetos muito menores, como power-ups reminiscentes daqueles encontrados em jogos de arcade. Ao usar objetos Scriptable, você cria um sistema limpo e fácil, onde você pode mudar e carregar dados com algumas teclas e ver os resultados quase instantaneamente. Usar objetos Scriptable também significa menos scripts para criar, como você pode usar um modelo para vários objetos. Independentemente de seu projeto ser grande ou pequeno, ou se sua equipe tem muitos membros ou apenas você mesmo, objetos Scriptable podem tornar o desenvolvimento de todos um pouco mais fácil.

You might also like

Deixe uma resposta

O seu endereço de email não será publicado.