Criando um jogo de caça no Unity
Neste tutorial, vamos percorrer o processo de criação de um jogo de caça básico em Unity. Este jogo incluirá elementos como movimento do jogador, IA animal, mecânica de tiro e um sistema de pontuação. Abordaremos:
- Configurando o projeto e o ambiente
- Criando controles do player
- Implementando IA animal
- Adicionando mecânica de tiro
- Configurando um sistema de pontuação
Configurando o Projeto
Vamos começar configurando um novo projeto Unity e criando o ambiente.
Criando o Projeto
- Abra Unity e crie um novo projeto 3D.
- Nomeie seu projeto como
HuntingGamee clique emCriar. - Na janela Projeto, crie pastas chamadas
Scripts,PrefabseMaterialspara organizar seus ativos.
Configurando o ambiente
- Na Hierarquia, clique com o botão direito e selecione
Objeto 3D > Terrenopara criar um terreno. - Personalize o terreno usando as
Ferramentas de Terrenopara pintar texturas, adicionar árvores e colocar grama ou outros detalhes. - Adicione alguns objetos 3D, como pedras e árvores, para tornar o ambiente mais realista.
Criando controles do jogador
Em seguida, criaremos o personagem do jogador e implementaremos controles de movimento baseados em física.
Personagem do jogador
- Na Hierarquia, clique com o botão direito e selecione
Objeto 3D > Cápsulapara criar um personagem do jogador. - Renomeie a cápsula para
Jogadore posicione-a acima do terreno. - Adicione um componente
Rigidbodyao objetoPlayerpara movimento baseado em física. - Adicione uma
Câmeracomo filha do objetoJogadorpara servir como ponto de vista do jogador.
Script de movimento do jogador
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
public float rotationSpeed = 100f;
private Rigidbody rb;
void Start()
{
rb = GetComponent();
rb.freezeRotation = true;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = transform.forward * moveVertical * moveSpeed * Time.deltaTime;
rb.MovePosition(rb.position + movement);
float rotation = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
Quaternion turnRotation = Quaternion.Euler(0f, rotation, 0f);
rb.MoveRotation(rb.rotation * turnRotation);
}
}- Crie um novo script C# chamado
PlayerMovement.csna pastaScripts. - Anexe o script
PlayerMovementao objetoPlayer.
Implementando IA Animal
Criaremos uma IA animal simples para vagar pelo ambiente e reagir ao jogador.
Pré-fabricado de animais
- Importe ou crie um modelo 3D para o animal (por exemplo, um cervo).
- Arraste o modelo para a cena e posicione-o no terreno.
- Clique com o botão direito no modelo na Hierarquia e selecione
Create Emptypara criar um objeto pai. Nomeie-o comoDeer. - Arraste o modelo 3D para o objeto
Deere redefina sua transformação. - Salve o objeto
Deercomo um prefab arrastando-o para a pastaPrefabs.
Script de IA animal
using UnityEngine;
using UnityEngine.AI;
public class AnimalAI : MonoBehaviour
{
public Transform[] waypoints;
private NavMeshAgent agent;
private int currentWaypoint = 0;
void Start()
{
agent = GetComponent();
agent.SetDestination(waypoints[currentWaypoint].position);
}
void Update()
{
if (agent.remainingDistance < agent.stoppingDistance)
{
currentWaypoint = (currentWaypoint + 1) % waypoints.Length;
agent.SetDestination(waypoints[currentWaypoint].position);
}
}
}- Crie um novo script C# chamado
AnimalAI.csna pastaScripts. - Anexe o script
AnimalAIao prefabDeer. - Adicione um componente
NavMeshAgentao prefabDeer. - Configure waypoints na cena criando GameObjects vazios e posicionando-os conforme desejado. Atribua esses waypoints ao array
waypointsno scriptAnimalAI.
Adicionando Mecânica de Tiro
Implementaremos a capacidade do jogador de atirar em animais.
Roteiro de filmagem
using UnityEngine;
public class PlayerShooting : MonoBehaviour
{
public Camera playerCamera;
public float range = 100f;
public GameObject impactEffect;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
{
AnimalAI animal = hit.transform.GetComponent();
if (animal != null)
{
Destroy(hit.transform.gameObject);
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}
}- Crie um novo script C# chamado
PlayerShooting.csna pastaScripts. - Anexe o script
PlayerShootingao objetoPlayer. - Crie um efeito de impacto (por exemplo, um sistema de partículas) e atribua-o ao campo
impactEffectno script.
Configurando um sistema de pontuação
Adicionaremos um sistema de pontuação simples para monitorar as caçadas bem-sucedidas do jogador.
Script do Gerenciador de Pontuação
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public static int score = 0;
public Text scoreText;
void Update()
{
scoreText.text = "Score: " + score.ToString();
}
public static void AddScore(int points)
{
score += points;
}
}- Crie um novo script C# chamado
ScoreManager.csna pastaScripts. - Anexe o script
ScoreManagera um novo GameObject vazio chamadoGameManager. - Crie um elemento de texto da interface do usuário para exibir a pontuação e atribua-o ao campo
scoreTextno scriptScoreManager.
Atualizando o roteiro de filmagem para acompanhar a pontuação
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
{
AnimalAI animal = hit.transform.GetComponent();
if (animal != null)
{
Destroy(hit.transform.gameObject);
ScoreManager.AddScore(10);
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}Conclusão
Criamos um jogo de caça básico em Unity. Configuramos o projeto e o ambiente, criamos controles de jogador com movimento baseado em física, implementamos IA animal, adicionamos mecânica de tiro e configuramos um sistema de pontuação. Esse conhecimento fundamental pode ser expandido para incluir comportamentos mais complexos, animais adicionais e mecânica de jogo refinada para aprimorar seu jogo de caça.