Como deixar o movimento suave?
3 participantes
Página 1 de 1
Como deixar o movimento suave?
Fala guris,
To usando um tipo de movimentação tipo um pouco de cada kkk por exemplo: Cada vez que quero que o player ande ele só vai andar um pouco.
To usando isso pra movimentar, porem ele movimenta instantaneamente até o local que eu quero. Gostaria de saber como fazer ele ir do ponto que ele está até a distancia determinada de uma maneira suave. (Que de pra ver ele indo)
To usando um tipo de movimentação tipo um pouco de cada kkk por exemplo: Cada vez que quero que o player ande ele só vai andar um pouco.
- Código:
transform.position = new Vector3 (distancePulo, 0, 0);
To usando isso pra movimentar, porem ele movimenta instantaneamente até o local que eu quero. Gostaria de saber como fazer ele ir do ponto que ele está até a distancia determinada de uma maneira suave. (Que de pra ver ele indo)
- Código:
void swipe (){
Vector2 distance = endPos - startPos;
if(Mathf.Abs (distance.x) > Mathf.Abs (distance.y)){
Debug.Log ("Horizontal Swpie");
if (distance.x > 0 && gameObject.transform.position == endPos2) {
Debug.Log ("Right");
transform.position = new Vector3 (distancePulo, 0, 0);
}
}
}
Hardencio- Avançado
- PONTOS : 3722
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Como deixar o movimento suave?
Fiz essa parada do Lerp, porem quando movo para os outros lado ele sempre vai na lata até a posição...
Queria que cada swipe que eu faço, ele ande no transform o valor 1, tipo acrescentando mais um...
Como assim:
- Código:
transform.position = Vector3.Lerp (transform.position, new Vector3(1,0,0), 1);
Queria que cada swipe que eu faço, ele ande no transform o valor 1, tipo acrescentando mais um...
Como assim:
- Código:
//esse endPos é um Vector3
endPos = new Vector3(transform.position.x, transform.position.y, transform.position.z + distanciaPulo);
Hardencio- Avançado
- PONTOS : 3722
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Como deixar o movimento suave?
Multiplique por Time.deltaTime.
- Código:
transform.position = Vector3.Lerp (transform.position, new Vector3(1,0,0), 5 * Time.deltaTime);
George Lucas Vieira- Avançado
- PONTOS : 3394
REPUTAÇÃO : 132
Idade : 21
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Re: Como deixar o movimento suave?
Não funciona, pq ele sempre vai pra essa posição ali do transform. Quero que ele adicione um valor no transform a cada movimento. Por exemplo, se eu movo para a direita, quero que meu personagem vá para a direita no transform, se quero que ele vá pra cima mesma coisa para cima. Sempre acrescentando um valor no transform. Igual o jogo Crossy Road.
Vou mostrar bem certo o que estou tentando fazer.
Basicamente esse script está funcionando, porem o touch dele esta bem ruim.
Estou tentando fazer esse script a cima, funcionar nesse aqui em baixo. Porem não to conseguindo pq ele da uns bugs locos no jogo, tipo ele some da tela, ou a camera não segue mais ele, treme tudo..etc
Queria fazer funcionar nesse script aqui. Oq faz o outro
Vou mostrar bem certo o que estou tentando fazer.
Basicamente esse script está funcionando, porem o touch dele esta bem ruim.
- Código:
using UnityEngine;
using System.Collections;
public class TesteTouch : MonoBehaviour {
float lerpTime;
float currentLertTime;
float perc = 1;
[Range(0.05f,50)] public float sensibilidade = 0.1f;
private bool podeMover;
Vector3 startPos;
Vector3 endPos;
public float forcaPulo;
bool firstInput;
public bool justJump;
public float distanciaPulo = 1f;
private float ponteiroY, ponteiroX;
public static bool frente;
public static bool tras;
public static bool dir;
public static bool esq;
public static int ultimo;
void setMoves(){
frente = tras = dir = esq = false;
}
void Start (){
frente = tras = dir = esq = true;
}
void Update(){
ponteiroX = ponteiroY = 0;
if (Input.touchCount > 0.8f ){
if (perc == 1) {
lerpTime = 1;
currentLertTime = 0;
firstInput = true;
justJump = true;
}
if (Mathf.Abs (Input.touches [0].deltaPosition.y) > sensibilidade) {
ponteiroY = Input.touches [0].deltaPosition.y;
} else {
ponteiroY = 0;
}
if (Mathf.Abs (Input.touches [0].deltaPosition.x) > sensibilidade) {
ponteiroX = Input.touches [0].deltaPosition.x;
} else {
ponteiroX = 0;
}
}
else{
podeMover = true;
}
startPos = gameObject.transform.position;
if (ponteiroY > 0 && podeMover == true && gameObject.transform.position == endPos && frente == true) {
//justJump = true;
gameObject.transform.rotation = Quaternion.Euler (0, 180, 0);
endPos = new Vector3(transform.position.x + distanciaPulo, transform.position.y, transform.position.z);
podeMover = false;
//ultimo = 1;
Debug.Log ("No y > 0 heim");
}
if (ponteiroY < 0 && podeMover == true && gameObject.transform.position == endPos && tras == true) {
//justJump = true;
gameObject.transform.rotation = Quaternion.Euler (0, 0, 0);
endPos = new Vector3(transform.position.x - distanciaPulo, transform.position.y, transform.position.z);
podeMover = false;
//ultimo = 0;
Debug.Log ("No y < 0heim");
}
if (ponteiroX > 0 && podeMover == true && gameObject.transform.position == endPos && dir == true) {
//justJump = true;
gameObject.transform.rotation = Quaternion.Euler (0, -90, 0);
endPos = new Vector3(transform.position.x, transform.position.y, transform.position.z - distanciaPulo);
podeMover = false;
//ultimo = 2;
Debug.Log ("No X > 0 heim");
}
if (ponteiroX < 0 && podeMover == true && gameObject.transform.position == endPos && esq == true) {
//justJump = true;
gameObject.transform.rotation = Quaternion.Euler (0, 90, 0);
endPos = new Vector3(transform.position.x, transform.position.y, transform.position.z + distanciaPulo);
podeMover = false;
//ultimo = 3;
Debug.Log ("No X < 0 heim");
}
if (firstInput == true) {
currentLertTime += Time.deltaTime * 4;
perc = currentLertTime / lerpTime;
gameObject.transform.position = Vector3.Lerp (startPos, endPos, perc);
if (perc > 0.8) {
perc = 1;
}
if (Mathf.Round (perc) == 1) {
justJump = false;
}
}
}
}
Estou tentando fazer esse script a cima, funcionar nesse aqui em baixo. Porem não to conseguindo pq ele da uns bugs locos no jogo, tipo ele some da tela, ou a camera não segue mais ele, treme tudo..etc
- Código:
using UnityEngine;
using System.Collections;
public class TesteDeMoves : MonoBehaviour {
public float maxTime;
public float minSwipeDist;
float startTime;
float endTime;
Vector3 startPos;
Vector3 endPos;
Vector3 vetorTeste;
Vector3 vetorTeste2;
float swipeDistace;
float swpieTime;
public float pulo;
public float distancePulo;
float lerpTime;
float currentLertTime;
float perc = 1;
bool firstInput;
public bool justJump;
public bool andarDireita;
public static bool frente;
public static bool tras;
public static bool dir;
public static bool esq;
public static int ultimo;
void setMoves(){
frente = tras = dir = esq = false;
}
void Start (){
frente = tras = dir = esq = true;
andarDireita = false;
}
void Update(){
if (Input.touchCount > 0) {
Touch touch = Input.GetTouch (0);
if (touch.phase == TouchPhase.Began) {
startTime = Time.time;
startPos = touch.position;
}else if (touch.phase == TouchPhase.Ended) {
endTime = Time.time;
endPos = touch.position;
swipeDistace = (endPos - startPos).magnitude;
swpieTime = endTime - startTime;
if (swpieTime < maxTime && swipeDistace > minSwipeDist) {
Vector2 distance = endPos - startPos;
if (Mathf.Abs (distance.x) > Mathf.Abs (distance.y)) {
Debug.Log ("Horizontal Swpie");
if (distance.x > 0 && dir == true) {
Debug.Log ("Right");
gameObject.transform.rotation = Quaternion.Euler (0, -90, 0);
//transform.position += new Vector3 (0, 0, -distancePulo);
transform.position = Vector3.Lerp (transform.position, new Vector3(1,0,0), 5 * Time.deltaTime);
ultimo = 2;
}
if (distance.x < 0 && esq == true) {
Debug.Log ("Letf");
gameObject.transform.rotation = Quaternion.Euler (0, 90, 0);
transform.position += new Vector3 (0, 0, distancePulo);
ultimo = 3;
}
} else if (Mathf.Abs (distance.x) < Mathf.Abs (distance.y)) {
Debug.Log ("Vertical Swpie");
if (distance.x > 0 && frente == true) {
Debug.Log ("Up");
gameObject.transform.rotation = Quaternion.Euler (0, 180, 0);
transform.position += new Vector3 (distancePulo, 0, 0);
ultimo = 1;
}
if (distance.x < 0 && tras == true) {
Debug.Log ("Down");
gameObject.transform.rotation = Quaternion.Euler (0, 0, 0);
transform.position += new Vector3 (-distancePulo, 0, 0);
ultimo = 0;
}
}
}
}
}
}
}
Queria fazer funcionar nesse script aqui. Oq faz o outro
Hardencio- Avançado
- PONTOS : 3722
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Como deixar o movimento suave?
ué, mas neste último script você só colocou o Lerp em um dos transform.position...
um segundo tem "+=", tem um outro que é só setado O.o
um segundo tem "+=", tem um outro que é só setado O.o
Re: Como deixar o movimento suave?
Não to entendendo...
Se eu fizer a mesma coisa do script que está funcionando no meu novo script ele não funciona..por causa que esta diferente as coisas do touch. Ele dá umas bugadas por causa dos Vetores endPos e starPos é isso que não estou conseguindo fazer. Eu não sei oq está acontecendo..mas queria que funcionasse de alguma forma o Lerp pra não ficar o movimento na lata. Como que faço para funcionar o lerp nesse script?
Lembrando que é um movimento estilo crossy road ou subway surfers.
Esse script de swipe fiz a partir desse tutorial: https://www.youtube.com/watch?v=TEROHR1XTaY
Se eu fizer a mesma coisa do script que está funcionando no meu novo script ele não funciona..por causa que esta diferente as coisas do touch. Ele dá umas bugadas por causa dos Vetores endPos e starPos é isso que não estou conseguindo fazer. Eu não sei oq está acontecendo..mas queria que funcionasse de alguma forma o Lerp pra não ficar o movimento na lata. Como que faço para funcionar o lerp nesse script?
- Código:
using UnityEngine;
using System.Collections;
public class TesteDeMoves : MonoBehaviour {
public float maxTime;
public float minSwipeDist;
float startTime;
float endTime;
Vector3 startPos;
Vector3 endPos;
float swipeDistace;
float swpieTime;
public float distancePulo;
public bool andarDireita;
public static bool frente;
public static bool tras;
public static bool dir;
public static bool esq;
public static int ultimo;
void setMoves(){
frente = tras = dir = esq = false;
}
void Start (){
frente = tras = dir = esq = true;
andarDireita = false;
}
void Update(){
if (Input.touchCount > 0) {
Touch touch = Input.GetTouch (0);
if (touch.phase == TouchPhase.Began) {
startTime = Time.time;
startPos = touch.position;
}else if (touch.phase == TouchPhase.Ended) {
endTime = Time.time;
endPos = touch.position;
swipeDistace = (endPos - startPos).magnitude;
swpieTime = endTime - startTime;
if (swpieTime < maxTime && swipeDistace > minSwipeDist) {
Vector2 distance = endPos - startPos;
if (Mathf.Abs (distance.x) > Mathf.Abs (distance.y)) {
Debug.Log ("Horizontal Swpie");
if (distance.x > 0 && dir == true) {
Debug.Log ("Right");
gameObject.transform.rotation = Quaternion.Euler (0, -90, 0);
transform.position += new Vector3 (0, 0, -distancePulo);
//transform.position = Vector3.Lerp (transform.position, new Vector3(1,0,0), 5 * Time.deltaTime);
ultimo = 2;
}
if (distance.x < 0 && esq == true) {
Debug.Log ("Letf");
gameObject.transform.rotation = Quaternion.Euler (0, 90, 0);
transform.position += new Vector3 (0, 0, distancePulo);
ultimo = 3;
}
} else if (Mathf.Abs (distance.x) < Mathf.Abs (distance.y)) {
Debug.Log ("Vertical Swpie");
if (distance.x > 0 && frente == true) {
Debug.Log ("Up");
gameObject.transform.rotation = Quaternion.Euler (0, 180, 0);
transform.position += new Vector3 (distancePulo, 0, 0);
ultimo = 1;
}
if (distance.x < 0 && tras == true) {
Debug.Log ("Down");
gameObject.transform.rotation = Quaternion.Euler (0, 0, 0);
transform.position += new Vector3 (-distancePulo, 0, 0);
ultimo = 0;
}
}
}
}
}
}
}
Lembrando que é um movimento estilo crossy road ou subway surfers.
Esse script de swipe fiz a partir desse tutorial: https://www.youtube.com/watch?v=TEROHR1XTaY
Hardencio- Avançado
- PONTOS : 3722
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Tópicos semelhantes
» como faço pra deixar o movimendo da camera suave?
» [RESOLVIDO] Movimento aleatório e suave de um objeto
» COMO DEIXAR ISSO PARA NETWORK
» Como deixar a barra de vida fixa??
» Tem como deixar a Layer do objeto branca?
» [RESOLVIDO] Movimento aleatório e suave de um objeto
» COMO DEIXAR ISSO PARA NETWORK
» Como deixar a barra de vida fixa??
» Tem como deixar a Layer do objeto branca?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos