Desenvolvimento Unity

Unity – Como testar se um objeto 2D (personagem) esta em contato com o solo

Finaltest

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).

groundsetup

2. Adicione um componente PolygonCollider2D no objeto ground.

AddCollider

3. Adicione uma nova Layer denominada Ground e defina a layer do objeto que representa o solo como Ground.

AddLayer

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.

wheeladd

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).

GroundHit

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 <b>Physics2D.OverlapCircle</b> takes three parameters in the above function which are the empty object's<b>position</b>, which is (0, 0) in our case. Note that it is a <b>Vector2</b>. The second parameter is the radius to which the circle extends. It is set to 1 as the <b>radius </b>of the <b>wheel </b>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 <b>overlap</b>.
Not to forget, this function returns a <b>boolean</b>.

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.

GroundHitCheck

8 . Clique no play para testar o programa

Finaltest

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

Comments

Assinar Blog por Email

Digite seu endereço de email para assinar este blog e receber notificações de novas publicações por email.

%d blogueiros gostam disto: