Como Fasso Isso ?????
+2
JohnRambo
mateus202
6 participantes
Página 1 de 1
Como Fasso Isso ?????
- Como Fasso Um Platforma ou Objeto Fica indo Pro lado e pro Outro ? tipo <----=----> Mesma Coisa Pra cima e Pra baixo ????
mateus202- Iniciante
- PONTOS : 3113
REPUTAÇÃO : 0
Respeito as regras :
Re: Como Fasso Isso ?????
Animações brother
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Como Fasso Isso ?????
Você pode usar animação ou criar um script para fazer isso, mas recomendo usar animação mesmo, como o John Rambo disse.
Re: Como Fasso Isso ?????
Existem varias formas de fazer, animação é uma delas, mas não gosto muito pois costumo usar em varias coisas, então prefiro via script pra ficar mais reutilizável e mais fácil de modificar. Um script pra isso pode ser feito de varias formas, no meu jogo fiz assim: um GameObject pai com o script, e dentro dele 3 filhos, o objeto que vai ir de um lado para o outro, e 2 objetos vazios que serão o ponto A e o ponto B do deslocamento.
No final tudo fica assim:
Aqui o Script
Lembrando que os 3 objetos precisam ter os seguintes nomes: "mesh" (objeto que se move), "A" (ponto inicial do movimento) e "B" (ponto final do movimento).
Ou caso queira linkar você mesmo os objetos, sem necessariamente usar esses nomes, você pode tornar as variáveis "pontoA", "pontoB" e "mesh" como publicas, remover esse trecho de código
e colocar os objetos direto pelo inspector, fica a seu critério.
No final tudo fica assim:
Aqui o Script
- Código:
using UnityEngine;
using System.Collections;
public class MovimentarEntre2Pontos : MonoBehaviour
{
public enum TipoMovimento
{
HORIZONTAL,
VERTICAL
}
private GameObject mesh;
public bool podeMovimentar = false;
public bool virarMesh;
public float velocidadeMovimentacao;
public TipoMovimento tipoMovimento;
private int sentido = 1;
private float scaleXIndo;
private float scaleXVoltando;
private GameObject pontoA;
private GameObject pontoB;
void Start()
{
pontoA = transform.FindChild("A").gameObject;
pontoB = transform.FindChild("B").gameObject;
mesh = transform.FindChild("mesh").gameObject;
scaleXIndo = mesh.transform.localScale.x;
scaleXVoltando = -mesh.transform.localScale.x;
if (podeMovimentar)
{
// Inicia no ponto A
if (tipoMovimento == TipoMovimento.HORIZONTAL)
{
if (mesh.transform.position.x != pontoA.transform.position.x)
{
mesh.transform.position = new Vector2(pontoA.transform.position.x, mesh.transform.position.y);
}
}
// Inicia no ponto A
if (tipoMovimento == TipoMovimento.VERTICAL)
{
if (mesh.transform.position.y != pontoA.transform.position.y)
{
mesh.transform.position = new Vector2(mesh.transform.position.x, pontoA.transform.position.y);
}
}
}
}
void Update()
{
if (podeMovimentar)
{
Movimentar();
}
}
private void Movimentar()
{
float pontoAx = pontoA.transform.position.x;
float pontoAy = pontoA.transform.position.y;
float pontoBx = pontoB.transform.position.x;
float pontoBy = pontoB.transform.position.y;
if (tipoMovimento == TipoMovimento.HORIZONTAL)
{
if (virarMesh)
{
if(sentido == -1)
mesh.transform.localScale = new Vector2(scaleXVoltando, mesh.transform.localScale.y);
else
mesh.transform.localScale = new Vector2(scaleXIndo, mesh.transform.localScale.y);
}
if (pontoA.transform.position.x < pontoB.transform.position.x)
{
if (mesh.transform.position.x >= pontoB.transform.position.x && sentido == 1)
{
sentido = -1;
}
if (mesh.transform.position.x <= pontoA.transform.position.x && sentido == -1)
{
sentido = 1;
}
mesh.GetComponent<Rigidbody2D>().velocity = Vector2.right * (velocidadeMovimentacao * sentido);
}
else
{
if (mesh.transform.position.x >= pontoA.transform.position.x && sentido == 1)
{
sentido = -1;
if (virarMesh)
mesh.transform.localScale = new Vector2(-mesh.transform.localScale.x, mesh.transform.localScale.y);
}
if (mesh.transform.position.x <= pontoB.transform.position.x && sentido == -1)
{
sentido = 1;
if (virarMesh)
mesh.transform.localScale = new Vector2(mesh.transform.localScale.x, mesh.transform.localScale.y);
}
mesh.GetComponent<Rigidbody2D>().velocity = Vector2.right * (velocidadeMovimentacao * sentido);
}
}
if (tipoMovimento == TipoMovimento.VERTICAL)
{
if (pontoA.transform.position.y < pontoB.transform.position.y)
{
if (mesh.transform.position.y >= pontoB.transform.position.y && sentido == 1)
{
sentido = -1;
}
if (mesh.transform.position.y <= pontoA.transform.position.y && sentido == -1)
{
sentido = 1;
}
mesh.GetComponent<Rigidbody2D>().velocity = Vector2.up * (velocidadeMovimentacao * sentido);
}
else
{
if (mesh.transform.position.y >= pontoA.transform.position.y && sentido == 1)
{
sentido = -1;
}
if (mesh.transform.position.y <= pontoB.transform.position.y && sentido == -1)
{
sentido = 1;
}
mesh.GetComponent<Rigidbody2D>().velocity = Vector2.up * (velocidadeMovimentacao * sentido);
}
}
}
}
Lembrando que os 3 objetos precisam ter os seguintes nomes: "mesh" (objeto que se move), "A" (ponto inicial do movimento) e "B" (ponto final do movimento).
Ou caso queira linkar você mesmo os objetos, sem necessariamente usar esses nomes, você pode tornar as variáveis "pontoA", "pontoB" e "mesh" como publicas, remover esse trecho de código
- Código:
pontoA = transform.FindChild("A").gameObject;
pontoB = transform.FindChild("B").gameObject;
mesh = transform.FindChild("mesh").gameObject;
e colocar os objetos direto pelo inspector, fica a seu critério.
geeksou- Designer
- PONTOS : 3835
REPUTAÇÃO : 44
Idade : 30
Respeito as regras :
Re: Como Fasso Isso ?????
- Código:
using UnityEngine;
using System.Collections;
public class Objeto_Ir_E_Voltar : MonoBehaviour {
public float valor;
void Update () {
valor = Mathf.PingPong (Time.time * 2.0f, 8); //O time e multiplicado por 2.0f para aumentar a velocidade do objeto (* 2.0f) e o 8 e ate aonde o objeto vai, voce pode alterar isso tranquilamente
transform.position = new Vector3 (valor,0,0); //Altere o valor para o eixo que voce quer que o objeto se mova (X,Y,Z) no caso esta no eixo X
}
}
Testei esse script e aqui deu certo, fiz com base no vídeo do Marcos Schultz
Última edição por Prodigio em Sáb Jul 09, 2016 1:17 pm, editado 1 vez(es) (Motivo da edição : Alterar bug's.)
Prodigio- Iniciante
- PONTOS : 3067
REPUTAÇÃO : 3
Respeito as regras :
Re: Como Fasso Isso ?????
Valeu Prodigio pela indicação, excelente video, muita informação util!
Mas esse comando PingPong é para penas se mover de um eixo para outro diferente ou posso mover no mesmo eixo, no meu caso só o X?
porque eu quero que o objeto se mova só e X, de um ponto até o outro, e vai indo e voltando...
Mas esse comando PingPong é para penas se mover de um eixo para outro diferente ou posso mover no mesmo eixo, no meu caso só o X?
porque eu quero que o objeto se mova só e X, de um ponto até o outro, e vai indo e voltando...
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Como Fasso Isso ?????
Marc7 escreveu:Valeu Prodigio pela indicação, excelente video, muita informação util!
Mas esse comando PingPong é para penas se mover de um eixo para outro diferente ou posso mover no mesmo eixo, no meu caso só o X?
porque eu quero que o objeto se mova só e X, de um ponto até o outro, e vai indo e voltando...
- Código:
// Nessa linha do script, é onde voce define que eixo sera alterado.
// Ex:
transform.position = new Vector3 (X,Y,Z);
transform.position = new Vector3 (0,valor,0); // apenas eixo Y vai ser alterado
transform.position = new Vector3 (valor,0,0); // Apenas Eixo X vai ser alterado
transform.position = new Vector3 (0,0,valor); // Apenas Eixo Z vai ser alterado
// Pode repetir a variavel tambem
transform.position = new Vector3 (valor,valor,0); // Eixo X e Y serão alterados
Re: Como Fasso Isso ?????
Ah sim, valeu Guilherme por explicar!
Mas estou com um problema aqui que é o seguinte, meu objeto está nas posições -6.32 em x e -2.1 em z.
Quando dou play para simular, o objeto pula de uma vez para a posição 0 em x e começa a se mover somente em x até a posição 6.32 e volta até o zero.
queria que ele começasse em -6.32 em x e vai até o 6.32 em x, indo e voltando entre esses dois valores, e não entre 0 e 6.32
o que devo alterar?
Mas estou com um problema aqui que é o seguinte, meu objeto está nas posições -6.32 em x e -2.1 em z.
Quando dou play para simular, o objeto pula de uma vez para a posição 0 em x e começa a se mover somente em x até a posição 6.32 e volta até o zero.
queria que ele começasse em -6.32 em x e vai até o 6.32 em x, indo e voltando entre esses dois valores, e não entre 0 e 6.32
o que devo alterar?
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Como Fasso Isso ?????
o Mathf.PingPong so ira retorna um valor entre 0 e o que valor que voce definir então não tem como fazer ir de -6.32 ate 6.32
Então acho melhor voce usar animação mesmo
Então acho melhor voce usar animação mesmo
Re: Como Fasso Isso ?????
Fiz esse script e funcionou para o movimento vai e volta:
só que para se mover no sentido contrario o objeto tem que girar 180 graus, senão não funciona.
eu queria não precisar mudar essa rotação, porque dependendo do objeto que eu for usar não vai ser legal ela mudar sua figura, sua forma.
- Código:
public float speed;
public bool direcao;
public float duracaoDirecao = 2.5f;
private float tempoNaDirecao;
void Start () {
}
void Update() {
if (direcao) {
transform.eulerAngles = new Vector2(0, 180);
}
else {
transform.eulerAngles = new Vector2(0, 0);
}
transform.Translate(Vector2.right * speed * Time.deltaTime);
tempoNaDirecao += Time.deltaTime;
if (tempoNaDirecao >= duracaoDirecao) {
tempoNaDirecao = 0;
direcao = !direcao;
}
}
só que para se mover no sentido contrario o objeto tem que girar 180 graus, senão não funciona.
eu queria não precisar mudar essa rotação, porque dependendo do objeto que eu for usar não vai ser legal ela mudar sua figura, sua forma.
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Como Fasso Isso ?????
Descobri uma maneira de fazer o movimento vai e volta, segue o script:
using UnityEngine;
using System.Collections;
public class ObjetoVaieVolta : MonoBehaviour {
public float velocidade = 4;
public float duracaoPosicao = 3.2f;
public float tempo;
public bool posicao;
void Update() {
tempo += Time.deltaTime; //Aumenta o tempo que esta na posiçao atual.
if (tempo >= duracaoPosicao) { //Verifica se o tempo corrido atingiu o tempo limite para a duraçao da posiçao.
tempo = 0; //Caso ja tenha atingindo, entao zera a contagem, pois ela mudará de lado.
//Muda a posiçao
if (posicao) {
posicao = false;
}
else {
posicao = true;
}
}
//movimenta
if (posicao) {
transform.Translate(Vector2.right * velocidade * Time.deltaTime);
}
else {
transform.Translate(Vector2.left * velocidade * Time.deltaTime);
}
}
}
fica aí uma dica para quem quer fazer esse efeito!
o segredo é resetar o tempo quando ele chega em um certo valor definido.
a condição boleana tem que estar dentro do primeiro "if", senão não funciona.
Aí depois do lado de fora no unity tem que marcar a caixinha "Posição".
using UnityEngine;
using System.Collections;
public class ObjetoVaieVolta : MonoBehaviour {
public float velocidade = 4;
public float duracaoPosicao = 3.2f;
public float tempo;
public bool posicao;
void Update() {
tempo += Time.deltaTime; //Aumenta o tempo que esta na posiçao atual.
if (tempo >= duracaoPosicao) { //Verifica se o tempo corrido atingiu o tempo limite para a duraçao da posiçao.
tempo = 0; //Caso ja tenha atingindo, entao zera a contagem, pois ela mudará de lado.
//Muda a posiçao
if (posicao) {
posicao = false;
}
else {
posicao = true;
}
}
//movimenta
if (posicao) {
transform.Translate(Vector2.right * velocidade * Time.deltaTime);
}
else {
transform.Translate(Vector2.left * velocidade * Time.deltaTime);
}
}
}
fica aí uma dica para quem quer fazer esse efeito!
o segredo é resetar o tempo quando ele chega em um certo valor definido.
a condição boleana tem que estar dentro do primeiro "if", senão não funciona.
Aí depois do lado de fora no unity tem que marcar a caixinha "Posição".
Última edição por Marc7 em Qui Jul 14, 2016 10:50 pm, editado 1 vez(es) (Motivo da edição : Faltou mais uma linha para explicar melhor.)
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Tópicos semelhantes
» Como Eu fasso um Um sistema de dia e noite
» como eu fasso 1 arma de acordo com o meu unity
» COMO EU FASSO UMA CAMERA ORBITAL PARA UM GAME DE CARRO
» como fasso pra colocar uma cena e o personagem funciona r multiplayer
» Como posso fazer isso
» como eu fasso 1 arma de acordo com o meu unity
» COMO EU FASSO UMA CAMERA ORBITAL PARA UM GAME DE CARRO
» como fasso pra colocar uma cena e o personagem funciona r multiplayer
» Como posso fazer isso
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos