[RESOLVIDO] - Unity - Rotação da Câmera - Mathf.Clamp não funciona
Página 1 de 1
[RESOLVIDO] - Unity - Rotação da Câmera - Mathf.Clamp não funciona
Boa noite. Pessoal, não tô acertando o Giro da Câmera usando o Touch. Tenho o Giro da direita pra esquerda e vice-versa assim:
Mas o Vertical, que precisa limitar até onde a Câmera vai, não estou acertando. estou usando o Mathf.Clamp, mas ele não funciona, o giro fica descontrolado. Já tentei fazer o Lerp no Quaternion, mas ele também não funciona. Essa linha de código aí em cima, colocando um lerp no lugar da terceira linha, o lerp não funciona.
Alguém pode me ajudar pfv?! Mt obg!!
- Código:
valor = Mathf.Clamp(touch.deltaPosition.y, min, max);
vertical = Quaternion.Euler(valor * 0.3f, 0f, 0f);
transform.rotation *= vertical;
Mas o Vertical, que precisa limitar até onde a Câmera vai, não estou acertando. estou usando o Mathf.Clamp, mas ele não funciona, o giro fica descontrolado. Já tentei fazer o Lerp no Quaternion, mas ele também não funciona. Essa linha de código aí em cima, colocando um lerp no lugar da terceira linha, o lerp não funciona.
Alguém pode me ajudar pfv?! Mt obg!!
Última edição por WLCS22 em Ter Mar 14, 2023 12:37 pm, editado 1 vez(es)
WLCS22- MembroAvançado
- PONTOS : 1873
REPUTAÇÃO : 59
Respeito as regras :
Re: [RESOLVIDO] - Unity - Rotação da Câmera - Mathf.Clamp não funciona
Bom pessoal, dei um grau aki. Ficou assim:
Pra ajudar quem precisar
- Código:
// PAI DO PAI DA CÂMERA (Gira na Horizontal)
public class RotacaoHorizontal : MonoBehaviour {
// Método que faz a Rotação da Câmera no Sentido Horizontal
public void rotacaoHorizontalDaCamera(Touch touch) {
// Gira para a Direção que o Touch tiver
transform.Rotate(0, touch.deltaPosition.x * 0.3f, 0);
}
}
// PAI DA CÂMERA (Gira na Vertical)
public class RotacaoDaCamera : MonoBehaviour {
// Pai do Pai da Câmera
public RotacaoHorizontal rotacaoHorizontal;
// Variáveis que são tratadas nos Métodos que fazem o Giro da Câmera no sentido Vertical
float rotacaoVertical, limiteVertical;
Vector2 posicaoInicial;
Vector2 posicaoFinal;
float xPosicao, yPosicao;
// NO Update() COLOQUEI "giroDaTela()" NA VISÃO "Livre" DA CÂMERA QUE O JOGADOR ESCOLHE NO JOGO
// Método que faz o Giro da Câmera no Sentido Horizontal e Vertical
public void giroDaTela() {
if(Input.touchCount > 0) {
Touch touch = Input.GetTouch(0);
if(touch.phase == TouchPhase.Began) {
// Pega o 1º Toque da Tela
posicaoInicial = touch.deltaPosition;
}
// Tem que checa o "Moved". Se checar só o "Ended", não é possível pegar as Coordenadas
else if(touch.phase == TouchPhase.Moved) {
// Pega o Movimento do Dedo na Tela até o Último Toque
posicaoFinal = touch.deltaPosition;
// Obtem a Diferença entre as Posições
if(Vector2.Distance(posicaoInicial, posicaoFinal) > 0) {
// obtem a diferença entre as posicoes
xPosicao = posicaoFinal.x - posicaoInicial.x;
yPosicao = posicaoFinal.y - posicaoInicial.y;
// Movimento na Horizontal
// 'posicaoFinal.x > posicaoInicial.x' é o Movimento pra Direita
// 'posicaoFinal.x < posicaoInicial.x' é o Movimento pra Esquerda
// 'posicaoFinal.x == posicaoInicial.x' Só houve 1 toque na tela, sem deslize
if(Mathf.Abs(xPosicao) > Mathf.Abs(yPosicao)) {
// Método que faz a Rotação da Câmera no Sentido pra Direita e pra Esquerda (na Horizontal)
rotacaoNaHorizontal(touch);
}
// Movimento na Vertical
// 'posicaoFinal.y > posicaoInicial.y' é o Movimento pra Cima
// 'posicaoFinal.y < posicaoInicial.y' é o Movimento pra Baixo
// 'posicaoFinal.y == posicaoInicial.y' Só houve 1 toque na tela, sem deslize
else {
// Método que faz a Rotação da Câmera no Sentido pra Cima e pra Baixo (na Vertical)
rotacaoNaVertical(touch);
}
}
}
}
}
// Método que faz a Rotação da Câmera no Sentido Horizontal que está Implementada no Script "RotacaoHorizontal"
public void rotacaoNaHorizontal(Touch touch) {
// Método que Gira a Câmera na Horizontal. O Script está no Pai do Pai da Câmera
rotacaoHorizontal.rotacaoHorizontalDaCamera(touch);
}
// Método que faz a Rotação da Câmera no Sentido Vertical (Pra Cima e Pra Baixo)
public void rotacaoNaVertical(Touch touch) {
// Pega os Movimentos do Dedo no Sentido Vertical da Tela e atribui à "rotacaoVertical"
rotacaoVertical += touch.deltaPosition.y * 0.3f;
// Limita os Valores de "rotacaoVertical" entre esse Mínimo e Máximo e atribui à "limiteVertical"
// Coloque o Limite que quiser. Pra mim ficou "-65f" como o Mínimo e "10" como o Máximo
limiteVertical = Mathf.Clamp(rotacaoVertical, -65f, 10f);
// Se "limiteVertical" chegue no Limite 10 e o Dedo do Jogador ainda estiver se Movendo nesse sentido
// "rotacaoVertical" continua sendo Incrementada para 10,64... 11,20... 12,3... o mesmo pra "-65"
// Ao passar o dedo no Sentido contrário do limite atual, no caso 10, a tela demorava pra se mover no sentido dos "-10"
// justamente por que "rotacaoVertical" estava sendo decrementada, mas não estava dentro dos limites. Então quando
// "rotacaoVertical" estiver com esses valores, ela recebe os valores de "limiteVertical" para que a tela gira junto com o dedo.
if(rotacaoVertical < -65f || rotacaoVertical > 10f) {
// "rotacaoVertical" fica recebendo o valor de "limiteVertical"
rotacaoVertical = limiteVertical;
}
// Executa o Giro da Tela
transform.eulerAngles = new Vector3(limiteVertical, transform.eulerAngles.y, transform.eulerAngles.z);
}
// Método que seta os Valores Iniciais das Variáveis que trata do Giro da Câmera, para que ao mudar
// de Visão da Câmera, a Câmera não inicie com a Última Posição e Ângulo usado a Visão da Câmera Anterior
public void valoresIniciaisDasVariaveisDosGiros() {
rotacaoVertical = 0;
limiteVertical = 0;
}
}
Pra ajudar quem precisar
WLCS22- MembroAvançado
- PONTOS : 1873
REPUTAÇÃO : 59
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Rotacionar câmera e manter rotação
» [RESOLVIDO] Unity - Movendo a Câmera na Horizontal/Vertical com Touch
» [RESOLVIDO] Limitar a rotação da câmera entre dois ângulos
» Camera fixa com rotação
» problemas com rotacao da camera!!
» [RESOLVIDO] Unity - Movendo a Câmera na Horizontal/Vertical com Touch
» [RESOLVIDO] Limitar a rotação da câmera entre dois ângulos
» Camera fixa com rotação
» problemas com rotacao da camera!!
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos