Unity – Usando Allowable Distance 4.x - Unity3D - Artigos - Articles - Fórum

Jump to content

Bem vindo à Unidev
Registre para ter acesso a todos os recursos do site. Uma vez registrado e logado, você poderá criar tópicos, postar em tópicos já existentes, gerenciar seu perfil e muito mais. Se você já tem uma conta, faça login aqui - ou então crie aqui uma conta agora mesmo!
* * * * *
Photo

Unity – Usando Allowable Distance 4.x


Unity 4.x – Usando Allowable Distance
Prazer, meu nome é Mateus, Sou desenvolvedor desde 2010, comecei a me interessar na Unity em 2012, mas só neste ultimo ano que comecei realmente a trabalhar profissionalmente com ela.

Venho trazer aqui um pequeno “plug-in” que desenvolvi que verifica distancia entre os objetos, e tem a finalidade de mandar mensagens (Enter, Stay e Exit) de qual objeto entrou em seu espaço permitido que é determinado no Script do Editor.

O motivo de eu ter criado esse plug-in foi pra tentar aperfeiçoar e automatizar o uso de código de verificação entre objeto, muitas pessoas usam os Colliders que existem na Unity não só para colisão mais também para verificar se o objeto chegou em uma distancia determinada, para poder ativar alguma ação escrita pelo desenvolvedor. Esse “plug-in” tem a finalidade de automatizar essas funcionalidades e também evitar o uso de collider para casos simples como está.

“AllowableDistance” – Essa script verifica quais objetos estão entrando dentro do raio permitido pelo objeto “Ator”, está script deve ficar no objeto que pretende fazer a ação quando algum outro objeto entrar no seu “raio permitido”.

Ela funciona como os Colliders, quando algum objeto Entra, Fica e Sai de seu raio permitido ele manda mensagens para poder executar a ação desejada.

A Script manda 3 mensagens:

OnEnterAllowableDistance – Este método é executado quando um objeto entrar dentro de seu raio permitido. Como parâmetro ele passa um “Transform” do objeto para você ter aquele objeto como referencia. Abaixo um esboço do método.

void OnEnterAllowableDistance(Transform other){}
OnExitAllowableDistance - Este método é executado quando um objeto Sair de dentro do seu raio permitido. Como parâmetro ele passa um “Transform” do objeto para você ter aquele objeto como referencia. Abaixo um esboço do método.
void OnExitAllowableDistance (Transform other){}
OnStayAllowableDistance - Este método é sempre executado quando um objeto permanecer dentro do seu raio permitido. Como parâmetro ele passa um “Transform” do objeto para você ter aquele objeto como referencia. Abaixo um esboço do método.
void OnStayAllowableDistance (Transform other){}
Na Figura 1 será ilustrado onde é possível atribuir o valor do raio, este valor pode ser editado na própria cena da Unity, facilitando a visualização do desenvolvedor. Esse inspetor é do objeto Ator no qual vai carregar a Script “AllowableDistance”, podemos notar que na script você pode atribuir o valor do raio.





Posted Image


Figura 1


Na Figura 2 é da cena, podemos ver um circulo azul, ele é o raio de tolerância do objeto Ator, onde foi mostrado na Figura 1. Este plugin nos permite editar tanto no Inspetor, quando em Cena, facilitando assim a visualização para o desenvolvedor




Posted Image
Figura 2


Para que o objeto Ator que tem a script “AllowableDistance” verifica se aproximou de outro objeto, os outros objetos no qual o Ator vai verificar se está dentro da distancia permitida para poder executar a ação deve ter a Script “AllowableDistanceBehaviour”, que tem um comportamento bem simples, adicionar o objeto que a tem em uma lista, no qual os objetos considerados Atores poderão acessar e sempre verificar se aquele objeto está chegando perto de seu raio. Funcionam como os Colliders, ambos tem que ter o componente para poder funcionar.

O Ator também pode carregar o componente “AllowableDistanceBehaviour”, caso tenha outro Ator inGame que necessita verificar se aquele objeto está próximo.

Abaixo um código que eu criei como exemplo para poder ver como usar os métodos que são disparados pelas mensagens do Ator.
using UnityEngine;
using System.Collections;

public class Teste : MonoBehaviour
{

    private float velocity =  3f;

    void Update()
    {
        transform.Translate(new Vector3(this.velocity * Time.deltaTime, 0, 0));
    }

    void OnEnterAllowableDistance(Transform other)
    {
        print("Este objeto entrou no meu raio" + " :: O nome é " + other.name);
        SpriteRenderer _sprite = other.GetComponent<SpriteRenderer>();
        _sprite.color = _sprite.color == Color.green ? Color.blue : Color.green;
        this.velocity *= -1;
    }
    void OnExitAllowableDistance(Transform other)
    {
        print("Este objeto saiu do meu raio" + " :: O nome é " + other.name);
    }
    void OnStayAllowableDistance(Transform other)
    {
        print("Este objeto está dentro do meu raio" + " :: O nome é " + other.name);
    }
}

No exemplo acima, eu criei uma script que tem a funcionalidade básica de movimentação dentro do método Update() pegando a velocidade e multiplicando pelo segundo que ele leva para rodar um frame, o método Update() como todos já sabem é da própria Unity, no qual já vem dentro da estrutura da Script.
void Update()
    {
        transform.Translate(new Vector3(this.velocity * Time.deltaTime, 0, 0));
    }

Implementei os métodos que o plug-in dispara, que são OnEnterAllowableDistance, OnExitAllowableDistance e OnStayAllowableDistance para exemplificar oque cada um tem como função

Dentro do OnEnterAllowableDistance, foi implementado que sempre quando este método é disparado (quando um objeto entra dentro do raio permitido), ele executa a frase (mostrando o nome do objeto que entrou), mudando a cor do objeto e sua direção no espaço.
void OnEnterAllowableDistance(Transform other)
{
        print("Este objeto entrou no meu raio" + " :: O nome é " + other.name);
        SpriteRenderer _sprite = other.GetComponent<SpriteRenderer>();
        _sprite.color = _sprite.color == Color.green ? Color.blue : Color.green;
        this.aux *= -1;
}

Enfim, o uso desse plug-in é bem simples, explicando de forma bem pratica de como usar. “AllowableDistance” é usada no Ator que vai disparar os métodos para executar as ações, os objetos que você pretende que o ator verifica tem que possuir a script “AllowableDistanceBehaviour”, simples assim, após isso você escreve um código com os métodos que o “AllowableDistance” dispara e faz suas ações necessárias no seu game também tendo acesso ao objeto que entrou ou saio de dentro do raio.

O Projeto do plug-in vou colocar no Github para quem quiser ir implementando e otimizando e depois distribuindo para a comunidade de desenvolvedores.

Um exemplo bem básico inGame onde pode ser usado este plug-in : Vamos imaginar um jogo de tower defence, as torres tem uma distancia de tolerância , no qual se algum inimigo passar por ela, a torre ataca, este plug-in pode ser usado facilmente, determinado qual é a distancia em que a torre começa a atacar, e quando o inimigo entrar nesse raio, ele vai disparar os eventos que o desenvolvedor pode implementar nos métodos disparados.

Logo abaixo vou deixar um projeto de exemplo para ilustrar a simplicidade de utilizar o plug-in.

Github - https://github.com/M...lowableDistance
Donwload Projeto Unity 4.x - https://www.dropbox....stance.rar?dl=0

Obs: Eu testei o plug-in e não achei bugs, mais se houver me avisem que posso arrumar, e pra quem tem uma forma mais otimizada para fazer está logica dentro da Unity compartilhe a comunidade agradece.

Abraços a todos, qualquer duvida estou aqui.



4 Comments

Photo
mateusculpo
Ago 18 2015 09:41

Em casa irei editar, porque arrumei algumas coisas (Explicação / Escrita) ... se for possível editar.

se voce nao conseguir, me manda as alteracoes que eu faco o edit

Parece interessante para RTS/TD/MOBA, vou dar uma olhada.

Photo
mateusculpo
Dez 17 2015 01:13

Galera, está com alguns problemas por causa do SendMessage, bom então vou passar para Events, sendo assim vou fazer as modificações e atualizar o plugin para ficar mais otimizado. Vlw galera