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

  1. Abra Unity e crie um novo projeto 3D.
  2. Nomeie seu projeto como HuntingGame e clique em Criar.
  3. Na janela Projeto, crie pastas chamadas Scripts, Prefabs e Materials para organizar seus ativos.

Configurando o ambiente

  1. Na Hierarquia, clique com o botão direito e selecione Objeto 3D > Terreno para criar um terreno.
  2. Personalize o terreno usando as Ferramentas de Terreno para pintar texturas, adicionar árvores e colocar grama ou outros detalhes.
  3. 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

  1. Na Hierarquia, clique com o botão direito e selecione Objeto 3D > Cápsula para criar um personagem do jogador.
  2. Renomeie a cápsula para Jogador e posicione-a acima do terreno.
  3. Adicione um componente Rigidbody ao objeto Player para movimento baseado em física.
  4. Adicione uma Câmera como filha do objeto Jogador para 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);
    }
}
  1. Crie um novo script C# chamado PlayerMovement.cs na pasta Scripts.
  2. Anexe o script PlayerMovement ao objeto Player.

Implementando IA Animal

Criaremos uma IA animal simples para vagar pelo ambiente e reagir ao jogador.

Pré-fabricado de animais

  1. Importe ou crie um modelo 3D para o animal (por exemplo, um cervo).
  2. Arraste o modelo para a cena e posicione-o no terreno.
  3. Clique com o botão direito no modelo na Hierarquia e selecione Create Empty para criar um objeto pai. Nomeie-o como Deer.
  4. Arraste o modelo 3D para o objeto Deer e redefina sua transformação.
  5. Salve o objeto Deer como um prefab arrastando-o para a pasta Prefabs.

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);
        }
    }
}
  1. Crie um novo script C# chamado AnimalAI.cs na pasta Scripts.
  2. Anexe o script AnimalAI ao prefab Deer.
  3. Adicione um componente NavMeshAgent ao prefab Deer.
  4. Configure waypoints na cena criando GameObjects vazios e posicionando-os conforme desejado. Atribua esses waypoints ao array waypoints no script AnimalAI.

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);
        }
    }
}
  1. Crie um novo script C# chamado PlayerShooting.cs na pasta Scripts.
  2. Anexe o script PlayerShooting ao objeto Player.
  3. Crie um efeito de impacto (por exemplo, um sistema de partículas) e atribua-o ao campo impactEffect no 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;
    }
}
  1. Crie um novo script C# chamado ScoreManager.cs na pasta Scripts.
  2. Anexe o script ScoreManager a um novo GameObject vazio chamado GameManager.
  3. Crie um elemento de texto da interface do usuário para exibir a pontuação e atribua-o ao campo scoreText no script ScoreManager.

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.