Script de suavização não está funcionando!
Página 1 de 1 • Compartilhe •
Script de suavização não está funcionando!
Opa, criei uma script pra câmera seguir o player nos eixos X e Y com suavidade, tentei utilizar Vector3.Slerp, Vector3.Lerp e Vector3.SmoothDamp, enfim... nos três casos o resultado foi o mesmo, a câmera chega a seguir o player, mas em certo momento a "velocidade" dela falha.
Creio que possa ser algo haver com a movimentação usando o Rigibody.velocity...
VÍDEO DO ERRO
SCRIPT DO PLAYER
- Código:
using System.Collections.Generic;
using UnityEngine;
public class Movimento : MonoBehaviour {
public static float _velocidade = 0;
public static bool _andando = false;
public static bool _correndo = false;
Rigidbody rb;
void Start () {
rb = this.GetComponent<Rigidbody> ();
}
void Update () {
float x = (Input.GetAxisRaw ("Horizontal") * _velocidade) * Time.deltaTime;
float z = (Input.GetAxisRaw ("Vertical") * _velocidade) * Time.deltaTime;
if (x != 0 || z != 0) {
if (Input.GetKey (KeyCode.LeftShift)) {
_correndo = true;
_andando = false;
} else {
_correndo = false;
_andando = true;
}
} else {
_andando = false;
_correndo = false;
}
if (Camera.main.transform.eulerAngles.y >= -45 && Camera.main.transform.eulerAngles.y <= 45) {
rb.velocity = new Vector3 (x,rb.velocity.y,z);
}
if (Camera.main.transform.eulerAngles.y <= 135 && Camera.main.transform.eulerAngles.y >= 46) {
rb.velocity = new Vector3 (z,rb.velocity.y,-x);
}
}
}
SCRIPT DA CÂMERA
- Código:
sing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Seguir : MonoBehaviour {
public GameObject player;
public static float _velocidadeDaCamera;
Transform tf;
//Rigidbody rb;
void Start () {
tf = player.transform;
//rb = player.GetComponent<Rigidbody> ();
}
void Update () {
Vector3 velocity = Vector3.zero;
Vector3 pos = new Vector3(tf.position.x,tf.position.y + 7,-11);
this.transform.position = Vector3.SmoothDamp (transform.position,pos, ref velocity,_velocidadeDaCamera * Time.deltaTime);
}
}
Creio que possa ser algo haver com a movimentação usando o Rigibody.velocity...
parkournick- Membro
-
PONTOS : 797
REPUTAÇÃO : 3
Idade : 15
Áreas de atuação : C#, Python
Respeito as regras :
Re: Script de suavização não está funcionando!
Amigo, eu uso o Rigidbody.velocity no player e na câmera eu uso esse Script:
Eu acredito que se você remover o Time.deltaTime resolve seus problemas. Abraço!
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cam : MonoBehaviour {
public Transform target;
public Vector3 Distance;
private Vector3 velocity = Vector3.zero;
void Update()
{
transform.position = Vector3.SmoothDamp(transform.position, target.position + Distance, ref velocity, 0.7f);
}
}
Eu acredito que se você remover o Time.deltaTime resolve seus problemas. Abraço!
Souris- ProgramadorMaster
-
PONTOS : 1060
REPUTAÇÃO : 217
Idade : 13
Áreas de atuação : UNET ~ HLAPI,
Dev. Mobile,
Unity 2D.
Respeito as regras :
Re: Script de suavização não está funcionando!
É só trocar o void Update() por FixedUpdate(), este vai sempre realizar os cálculos em um tempo sempre igual. FixedUpdate deve ser usado caso seu script seja um de a câmera seguir alguma coisa, ou caso você execute calculos físicos para simular física em algum objeto.
Daniel Pires da Silva- Avançado
-
PONTOS : 287
REPUTAÇÃO : 26
Idade : 14
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Script de suavização não está funcionando!
E caso queira saber, Lerp sempre vai começar indo rápido até o valor B, dividindo por 2 à cada passo ao valor B, diminuindo sua velocidade constantemente. SmoothDamp usa um tipo de curva para causar um maior efeito de suavidade.
Daniel Pires da Silva- Avançado
-
PONTOS : 287
REPUTAÇÃO : 26
Idade : 14
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Script de suavização não está funcionando!
ah
vlw gente, então o problema só pode ser o Time.deltatime... eu tô colocando ele em tudo ultimamente pra resolver outro bug, o player se movimenta em velocidade diferentes no editor e buildado.

parkournick- Membro
-
PONTOS : 797
REPUTAÇÃO : 3
Idade : 15
Áreas de atuação : C#, Python
Respeito as regras :
Re: Script de suavização não está funcionando!
Recomendo não utilizar o FixedUpdate, pois quando eu utilizei ele no meu projeto, a câmera não anda suavemente, ele anda, depois para, depois ele recompensa essa "parada" e a assim vai. Uma opção seria limitar o FPS do seu jogo (VSync).
Souris- ProgramadorMaster
-
PONTOS : 1060
REPUTAÇÃO : 217
Idade : 13
Áreas de atuação : UNET ~ HLAPI,
Dev. Mobile,
Unity 2D.
Respeito as regras :
Re: Script de suavização não está funcionando!
Que estranho, pois comigo funcionou muito bem usando FixedUpdate para fazer a câmera seguir suavemente.@Souris escreveu:Recomendo não utilizar o FixedUpdate, pois quando eu utilizei ele no meu projeto, a câmera não anda suavemente, ele anda, depois para, depois ele recompensa essa "parada" e a assim vai. Uma opção seria limitar o FPS do seu jogo (VSync).
Daniel Pires da Silva- Avançado
-
PONTOS : 287
REPUTAÇÃO : 26
Idade : 14
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Script de suavização não está funcionando!
Deve ser porque a plataforma escolhida foi a Android, com 30 Fps rodando.@Daniel Pires da Silva escreveu:Que estranho, pois comigo funcionou muito bem usando FixedUpdate para fazer a câmera seguir suavemente.@Souris escreveu:Recomendo não utilizar o FixedUpdate, pois quando eu utilizei ele no meu projeto, a câmera não anda suavemente, ele anda, depois para, depois ele recompensa essa "parada" e a assim vai. Uma opção seria limitar o FPS do seu jogo (VSync).
Souris- ProgramadorMaster
-
PONTOS : 1060
REPUTAÇÃO : 217
Idade : 13
Áreas de atuação : UNET ~ HLAPI,
Dev. Mobile,
Unity 2D.
Respeito as regras :
Re: Script de suavização não está funcionando!
Para o movimento da Câmera deve-se utilizar a void LateUpdate, e multiplicar a velocidade do Lerp por Time.deltaTime para suavizar...
Eu faço isso no meu asset free: https://assetstore.unity.com/packages/tools/camera/ms-advanced-camera-controller-81759
Eu faço isso no meu asset free: https://assetstore.unity.com/packages/tools/camera/ms-advanced-camera-controller-81759
MarcosSchultz- Administrador
-
PONTOS : 10367
REPUTAÇÃO : 1833
Idade : 21
Áreas de atuação : Administrador do fórum
Respeito as regras :
Re: Script de suavização não está funcionando!
Esse titulo ficaria melhor:
"Script de movimentação de câmera suave".
"Script de movimentação de câmera suave".
dkrazor- Membro
-
PONTOS : 72
REPUTAÇÃO : 3
Idade : 28
Áreas de atuação : Design / Programador de jogos HTML5, Design gráfico, Iniciante em Unity.
Respeito as regras :
Re: Script de suavização não está funcionando!
Eu discordo, acho que isto poderia servir para qualquer outro tipo de movimentação. 

Souris- ProgramadorMaster
-
PONTOS : 1060
REPUTAÇÃO : 217
Idade : 13
Áreas de atuação : UNET ~ HLAPI,
Dev. Mobile,
Unity 2D.
Respeito as regras :
Página 1 de 1
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum