O post Unity – Como testar se um objeto 2D (personagem) esta em contato com o solo tem como objetivo explicar o que deve ser feito para verificar se um objeto / personagem / jogador / carro / veÃculo ou qualquer tipo de objeto 2D esta em contato com outro objeto no jogo considerado como solo. Para fazer essa verificação será utilizado a função estática OverlapCircle da classe Physics2D.
Para fazer o download dos sprites que serão utilizados na atividade clique no link sprites.
1. Crie uma nova cena. Arraste e solte o sprite ground.png para o Hierarchy para criar o objeto que representará o solo do cenário. Renomeie o objeto como ground, posicione-o nas coordenadas (0, -4, 0) e defina sua escala como (7, 3, 1).
2. Adicione um componente PolygonCollider2D no objeto ground.
3. Adicione uma nova Layer denominada Ground e defina a layer do objeto que representa o solo como Ground.
4. Selecione a sprite wheel.png e arraste-a para o Hierarchy para criar o objeto que representará o nosso player. Altere o nome do objeto para Wheel e adicione o componente CircleCollider2D no objeto Wheel.
5. Agora crie um game object em branco com o nome GroundHitCheck. Torne o objeto GroundHitCheck filho do Wheel arrastando-o para dentro do objeto Wheel. Altere as coordenadas de GroundHitCheck para (0,0,0).
Obs: GameObject na imagem corresponde ao objeto GroundHitCheck
6. Crie um novo script utilizando a linguagem C# denominado GroundHitCheck e adicione o seguinte código:
using UnityEngine;
using System.Collections;
public class GroundHitCheck : MonoBehaviour {
bool isGrounded = false; //para verificar se o objeto esta em contato com o solo
public Transform GroundCheck1; // para determinar os limites/centro do objeto
public LayerMask ground_layers; //a Layer que sera detectado o contato com o solo
void FixedUpdate(){
//verifica se o objeto criado sobrepõe-se com os 'ground_layers' num raio de 1 unidades
isGrounded = Physics2D.OverlapCircle(GroundCheck1.position, 1, ground_layers);
Debug.Log("Entrou em contato com o solo: "+isGrounded);
}
}
The Physics2D.OverlapCircle takes three parameters in the above function which are the empty object'sposition, which is (0, 0) in our case. Note that it is a Vector2. The second parameter is the radius to which the circle extends. It is set to 1 as the radius of the wheel is also 1.
(How do I get to know the radius of the wheel? Well, the radius of the component CircleCollider2d of the wheel is 1, which is apparently the radius of the wheel as well.)
The third parameter is the list of layers that we should check for overlap.
Not to forget, this function returns a boolean.
A função Physics2D.OverlapCircle presente no código possui três parâmetros. O primeiro é o centro do circulo (0, 0). O segundo parâmetro é o raio do cÃrculo para o qual se estende. O terceiro parâmetro é a lista de camadas que devemos verificar se há sobreposições. Não se esqueça, esta função retorna um boolean.
7. Conecte o script acima no objeto Wheel. Arraste objeto GroundHitCheck no campo  Ground Check 1. Selecione a camada Ground na lista suspensa de Layers.
8 . Clique no play para testar o programa
O material desse post foi retirado do site THE GAME CONTRIVER
Links
http://docs.unity3d.com/ScriptReference/Physics2D.OverlapCircle.html
http://www.thegamecontriver.com/2014/11/check-if-object-character-is-grounded.html