Menu
CoddyTech

A Bola Rolante

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 28 de 71.

Este capítulo cria um jogo pequeno, Coin Rush. Você rola uma bola por uma arena cercada por muros usando as setas e coleta moedas antes que o tempo acabe. Dois scripts dividem o trabalho, como fariam em um projeto do Unity: Ball move a bola e mantém a pontuação e o cronômetro, e Coin fica em cada moeda. Coin.cs começa como uma classe vazia, e a próxima lição a completa.

Uma bola rola quando você a empurra, em vez de colocá-la em uma posição. Empurre o Rigidbody com AddForce e deixe sua rotação livre: a força move a bola, e o atrito do chão agarra a parte de baixo da bola e a faz girar. Esta bola de boliche rola pela pista enquanto a tecla Espaço está pressionada:

public float push = 6f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(Vector3.forward * push);
    }
}

Uma bola que rola sem deslizar gira a uma velocidade igual à sua rapidez dividida pelo raio; portanto, uma bola de raio 0.5 que se move a 3 unidades por segundo gira a 6 radianos por segundo (rb.angularVelocity). Em vez disso, altere seu transform.position ou congele sua rotação em Constraints, no Rigidbody, e ela deslizará como um disco de hóquei, sem girar. Uma esfera simples de uma só cor parece igual nos dois casos: para ver o rolamento, observe Angular Velocity na seção Info do Rigidbody enquanto o jogo está em execução.

challenge icon

Desafio

Médio

Inicie Coin Rush: role a bola com as setas.

  1. Em Ball.cs, no Start(), defina rb = GetComponent<Rigidbody>();.
  2. No FixedUpdate(), leia float x = Input.GetAxis("Horizontal"); e float z = Input.GetAxis("Vertical");, depois chame rb.AddForce(new Vector3(x, 0f, z) * force);.

Pressione “Jogar”, clique no jogo e role a bola: ela vira enquanto se move. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class Ball : MonoBehaviour
{
    public float force = 10f;
    private Rigidbody rb;

    void Start()
    {
    }

    void FixedUpdate()
    {
        // Empurre a bola com as setas: Horizontal ao longo de x, Vertical ao longo de z.
    }
}

Todas as lições de Física e Jogabilidade

Pratique por conta própria: Playground de Unity