Script de suavização não está funcionando!
5 participantes
Página 1 de 1
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 : 3202
REPUTAÇÃO : 3
Idade : 22
Á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!
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
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 : 2753
REPUTAÇÃO : 37
Idade : 20
Á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 : 2753
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Script de suavização não está funcionando!
ah :D 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 : 3202
REPUTAÇÃO : 3
Idade : 22
Á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).
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
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 : 2753
REPUTAÇÃO : 37
Idade : 20
Á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).
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
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
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- Avançado
- PONTOS : 2573
REPUTAÇÃO : 24
Idade : 35
Áreas de atuação : Design / Programador de jogos.
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.
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Tópicos semelhantes
» Como acessar um script que esta no pai?
» Oq esta de errado com esse script?
» Script de configurações não esta funcionando corretamente
» Por que meu script não está atualizando na void update?
» Esse Script está certo ? Como melhorá-lo ?
» Oq esta de errado com esse script?
» Script de configurações não esta funcionando corretamente
» Por que meu script não está atualizando na void update?
» Esse Script está certo ? Como melhorá-lo ?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos