Como fazer movimento 'serpenteado'
3 participantes
Página 1 de 1
Como fazer movimento 'serpenteado'
boa tarde!
estou tentando fazer um movimento em zigue zague parecido com de serpente como nas imagens abaixo:
são dois movimentos, um vai ser para frente (ou trás) constantemente e o outro é na vertical em 'vai e volta', dando um efeito de senoide.
até tentei usar movimento pelo Rigidbody mas não está saindo, fiz com o script abaixo
a forcaMovimento vai mudando de valores conforme a posicao é verdadeiro ou falso. por um lado funcionou, mas não dá tempo de o objeto parar o movimento e mover para o lado contrario por causa da força. até ele parar e trocar o sentido, a varialvel boleana já voltou ele continua no mesmo sentido.
alguem pode sugerir outro script?
quero um movimento em uma frequencia maior como na primeira imagem, e em uma frequencia menor,como na segunda.
grato!
estou tentando fazer um movimento em zigue zague parecido com de serpente como nas imagens abaixo:
são dois movimentos, um vai ser para frente (ou trás) constantemente e o outro é na vertical em 'vai e volta', dando um efeito de senoide.
até tentei usar movimento pelo Rigidbody mas não está saindo, fiz com o script abaixo
- Código:
using UnityEngine;
using System.Collections;
public class MoverSenoidal : MonoBehaviour {
public float velocidade;
public float velocidadeMaxima;
public float velocidadeMinima;
public bool acelerando = false;
public float forcaMovimento = 365f;
public float duracaoPosicao;
public float tempo;
public bool posicao;
private Rigidbody2D myRigidbody;
protected void Start() {
myRigidbody = GetComponent<Rigidbody2D>();
}
void FixedUpdate() {
GetComponent<Rigidbody2D>().AddForce(Vector2.left * forcaMovimento);
}
void Update() {
//Aumenta o tempo que esta na posiçao atual.
tempo += Time.deltaTime;
//Se o tempo ultrapassar a duracaoPosicao ...
if (tempo >= duracaoPosicao) {
//... zera a contagem.
tempo = 0;
//Muda a posiçao
if (posicao) {
posicao = false;
}
else {
posicao = true;
}
}
//movimenta
if (posicao) {
forcaMovimento = -1;
}
if (!posicao) {
forcaMovimento = 1;
}
}
}
a forcaMovimento vai mudando de valores conforme a posicao é verdadeiro ou falso. por um lado funcionou, mas não dá tempo de o objeto parar o movimento e mover para o lado contrario por causa da força. até ele parar e trocar o sentido, a varialvel boleana já voltou ele continua no mesmo sentido.
alguem pode sugerir outro script?
quero um movimento em uma frequencia maior como na primeira imagem, e em uma frequencia menor,como na segunda.
grato!
Marc7- Mestre
- PONTOS : 3446
REPUTAÇÃO : 28
Respeito as regras :
Re: Como fazer movimento 'serpenteado'
Tem um componente chamado TrailRenderer. Talvez seja o que você procure.
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Como fazer movimento 'serpenteado'
ismarspn, realmente não é isso que quero, o TrailRenderer cria uma trilaha trás do objeto, apenas desenha a trajetoria.
Mas se existe algum componente que vc define primeiro a trajetoria dele e depois o objeto vai seguir essa trajetoria na cena, aí vai ser uma mão na roda p mim!
o TrailRenderer faz isso?
Mas se existe algum componente que vc define primeiro a trajetoria dele e depois o objeto vai seguir essa trajetoria na cena, aí vai ser uma mão na roda p mim!
o TrailRenderer faz isso?
Marc7- Mestre
- PONTOS : 3446
REPUTAÇÃO : 28
Respeito as regras :
Re: Como fazer movimento 'serpenteado'
Acho que nesse caso você pode usar o LineRenderer, mas não sei usar muito bem esse componente, mas parece ser o que você precisa.
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Como fazer movimento 'serpenteado'
ismarspn escreveu:Acho que nesse caso você pode usar o LineRenderer, mas não sei usar muito bem esse componente, mas parece ser o que você precisa.
olha só o que eu achei e fez o que realmente quero:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveInimigo1 : MonoBehaviour {
public float moveSpeed;
public float frequencia; // Velocidade do movimento senoidal.
public float amplitude; // Tamanho do movimento senoidal.
private Vector3 posicao;
private Vector3 eixo;
void Start() {
posicao = transform.position;
eixo = transform.up; // O eixo verde (Y). Usar transform.right para oscilaçao o eixo vermelho (X).
}
void Update() {
posicao += transform.right * Time.deltaTime * moveSpeed;
transform.position = posicao + eixo * Mathf.Sin(Time.time * frequencia) * amplitude;
}
void OnBecameInvisible() {
Destroy(transform.gameObject);
}
}
testa com um empty e vê, vc só tem que alterar o eixo onde que mover em vai e volta.
só tem um problema, eu quero fazer esse movimento em um objeto que será instanciado em um ponto e atras dele vem outros iguais em fila, usei o InvokeRepeating para isso.
aí na hora que vão aparecendo os 'irmãos do objeto' eles fazem ao mesmo tempo esse efeito um junto com o outro e não cada um de uma vez, à mediada que vão aparecendo.
por exemplo, se o primeiro que surge começa esse movimento em 1 segundo apos ser instanciado, cada um dos outros começam antes disso. aí não sai esse visual serpentado dos objetos.
como que eu faria para cada um dos objetos seguir esse efeito no tempo certo?
Marc7- Mestre
- PONTOS : 3446
REPUTAÇÃO : 28
Respeito as regras :
Re: Como fazer movimento 'serpenteado'
já tentou usar Joint? temos várias na Unity, springJoint, hingeJoint, configurableJoint, CharacterJoint
Re: Como fazer movimento 'serpenteado'
MarcosSchultz escreveu:já tentou usar Joint? temos várias na Unity, springJoint, hingeJoint, configurableJoint, CharacterJoint
Marcos obrigado pela sugestão, não, ainda não conheço o Joint.
Vc tem algum video que explica formas de usa-lo?
para que serve especificamente ele? pode citar um codigo exemplo de algum efeito?
mas até o momento o melhor que eu achei para faze isso, até melhor e mais exato ainda que o script acima que eu postei, é isso aqui:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MaterialOffSet : MonoBehaviour {
public float contador;
public float speed;
public float altura;
Vector3 posicaoCentral;
float graus = 0f;
float _speed = 1.0f;
float periodo = 1.0f;
void Start() {
http://16.7 eh o espaço do mundo que leva para completar os Ciclos de Contagem.
periodo = 16.7f / contador;
_speed *= speed;
periodo /= speed;
posicaoCentral = transform.position;
}
void Update() {
posicaoCentral.x += Time.deltaTime * _speed;
float grausPorSegundo = 360.0f / periodo;
graus = Mathf.Repeat(graus + (Time.deltaTime * grausPorSegundo), 360.0f);
float radians = graus * Mathf.Deg2Rad;
Vector3 offset = new Vector3(0.0f, posicaoCentral.y + altura * Mathf.Sin(radians), 0.0f);
transform.position = posicaoCentral + offset;
}
}
'altura' controla a amplitude da onda.
é o que mais está me servindo até agora, ficou exatamente o que eu queria.
mas me explica esse Joint, fica como mais um aprendizado.
Marc7- Mestre
- PONTOS : 3446
REPUTAÇÃO : 28
Respeito as regras :
Re: Como fazer movimento 'serpenteado'
Joint vou fazer um vídeo daqui uns dias, quando eu entrar novamente nos tutoriais de physics
Re: Como fazer movimento 'serpenteado'
MarcosSchultz escreveu:Joint vou fazer um vídeo daqui uns dias, quando eu entrar novamente nos tutoriais de physics
Bacana Marcos, ficarei aguardando!
Marc7- Mestre
- PONTOS : 3446
REPUTAÇÃO : 28
Respeito as regras :
Tópicos semelhantes
» Como fazer movimento automático de cenário em C#
» como fazer o cabelo se mexer com o movimento da cabeça no blender ?
» Como fazer o FPScontroler ficar parado em uma plataforma em movimento?
» Tutorial Como Fazer Uma Chama de Vela Com Movimento Natural Unity
» Como fazer objeto voltar a posição inicial? só que ele estará "em movimento"
» como fazer o cabelo se mexer com o movimento da cabeça no blender ?
» Como fazer o FPScontroler ficar parado em uma plataforma em movimento?
» Tutorial Como Fazer Uma Chama de Vela Com Movimento Natural Unity
» Como fazer objeto voltar a posição inicial? só que ele estará "em movimento"
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos