Como criar npc no Unity?
NPC (Personagem Não Jogável). NPCs são personagens em jogos eletrônicos que são controlados pela inteligência artificial (IA) em vez do jogador. Esses personagens desempenham papéis variados e essenciais dentro do jogo, como interagir com o jogador, fornecer informações, avançar a narrativa e enriquecer a jogabilidade. Além de ajudar a construir um mundo mais imersivo e dinâmico, os NPCs ajudam a criar experiências mais envolventes e realistas, contribuindo significativamente para a profundidade e a complexidade do jogo.
Passo 1- crie um script para criar um objeto primitivo

Esse código é um script em C# para o Unity, e sua função é criar um objeto primitivo na cena quando o jogo começa, que será o nosso NPC (Personagem Não Jogável). Vou explicar cada parte:
1. `using System.Collections; using System.Collections.Generic; using UnityEngine;`: Essas são declarações de namespace que permitem usar classes e funcionalidades da biblioteca padrão do C# e do Unity. `System.Collections` e `System.Collections.Generic` são usadas para coleções e listas, enquanto `UnityEngine` é essencial para o desenvolvimento de jogos no Unity.
2. `public class CreatePrimitives : MonoBehaviour`: Define uma nova classe chamada `CreatePrimitives` que herda de `MonoBehaviour`. Isso significa que o script pode ser anexado a um GameObject na cena e terá acesso a funções específicas do Unity, como `Start`.
3. `void Start()`: O método `Start` é chamado automaticamente pelo Unity antes do início da primeira atualização do quadro (frame). É um local comum para inicializações e configuração de objetos.
4. `GameObject.CreatePrimitive(PrimitiveType.Cube)`: Este comando cria um novo objeto primitivo do tipo `Cube` na cena. `PrimitiveType.Cube` é um tipo de objeto que o Unity já fornece, e o método `CreatePrimitive` é usado para criar uma instância desse objeto.
5. `.transform.position = new Vector3(0, 0, 0);`: Define a posição do cubo criado para `(0, 0, 0)`, que é o centro do mundo na cena do Unity. `transform` é uma propriedade do GameObject que controla sua posição, rotação e escala, e `Vector3` é uma estrutura que representa um ponto no espaço 3D.
Então, resumindo, esse script cria um cubo na posição `(0, 0, 0)`, que será nosso NPC, quando o jogo é iniciado.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreatePrimitives : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//Creating a Steve figure from Minecraft using Cubes
GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = new Vector3(0, 0, 0);
}
}
Passo 2- adicione movimento para o objeto
Este código é um script em C# para o Unity que define o comportamento de um NPC (personagem não jogável) na cena. Aqui está uma explicação detalhada de cada parte:
1. `using System.Collections; using System.Collections.Generic; using UnityEngine;`: Declara os namespaces necessários. `System.Collections` e `System.Collections.Generic` são para coleções e listas, enquanto `UnityEngine` é essencial para o desenvolvimento no Unity.
2. `public class NPC : MonoBehaviour`: Define uma nova classe chamada `NPC` que herda de `MonoBehaviour`, permitindo que o script seja anexado a um GameObject e utilize funcionalidades específicas do Unity.
3. `public int health = 5;`: Declara uma variável pública chamada `health` que define a saúde inicial do NPC. Como é pública, pode ser modificada diretamente no editor do Unity.
4. `public int level = 1;`: Declara uma variável pública chamada `level` que define o nível inicial do NPC.
5. `public float speed = 1.2f;`: Declara uma variável pública chamada `speed` que define a velocidade de movimento do NPC.
6. `void Start()`: O método `Start` é chamado pelo Unity antes do início da primeira atualização do quadro. É usado para inicializar variáveis e configurar o estado inicial do NPC.
- `health = health + level;`: Atualiza a variável `health` adicionando o valor de `level` a ela. Isso pode representar um aumento na saúde do NPC com base em seu nível.
- `print(“Lives: ” + health);`: Imprime o valor atualizado de `health` no console do Unity, exibindo o número de “vidas” ou pontos de saúde do NPC.
7. `void Update()`: O método `Update` é chamado uma vez por quadro. É usado para atualizar o estado do NPC a cada frame.
- `Vector3 newPosition = transform.position;`: Cria uma variável do tipo `Vector3` e armazena a posição atual do NPC.
- `newPosition.z += speed * Time.deltaTime;`: Atualiza a posição do NPC ao longo do eixo Z. `speed` é multiplicado por `Time.deltaTime` para garantir que o movimento seja suave e independente da taxa de quadros. `Time.deltaTime` representa o tempo decorrido desde o último quadro, garantindo que o movimento seja consistente em diferentes taxas de atualização.
- `transform.position = newPosition;`: Define a nova posição do NPC com base no cálculo feito na linha anterior.
Resumindo, esse script faz com que o NPC comece com uma quantidade de saúde que é a soma do valor inicial de `health` e `level`. Em seguida, o NPC se move continuamente ao longo do eixo Z com uma velocidade que depende da variável `speed`.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NPC : MonoBehaviour
{
//NPC Health
public int health = 5;
//NPC Level
public int level = 1;
//NPC Speed
public float speed = 1.2f;
void Start()
{
health = health + level;
print("Lives: " + health);
}
void Update()
{
//Creating a Vector3-type variable and save the NPC position in it
Vector3 newPosition = transform.position;
//Changing the position of the NPC on the Z axis according to the speed of the NPC and the time between frames
newPosition.z += speed * Time.deltaTime;
//Changing the NPC position to the new value calculated above
transform.position = newPosition;
}
}
FERRAMENTA DOS ASSETS PARA UNITY
UNITY ASSET
Uma loja online integrada ao Unity onde você pode comprar e baixar assets criados por desenvolvedores e artistas. Inclui uma ampla gama de recursos gratuitos e pagos.