[RESOLVIDO] Ajustar Posição e Rotação da Câmera do Veículo
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Ajustar Posição e Rotação da Câmera do Veículo
Alguém poderia me ajudar com um sistema para o jogador poder escolher a posição e rotação da câmera do veiculo, conforme o seu desejo. Abaixo uma print tirada de um jogo:
https://imgur.com/KSNNbvR
https://imgur.com/KSNNbvR
mama2401- Avançado
- PONTOS : 2393
REPUTAÇÃO : 2
Respeito as regras :
Re: [RESOLVIDO] Ajustar Posição e Rotação da Câmera do Veículo
OK, levei 2h para fazer este código, mas acho que está funcional.
A câmera deve ser filha do seu veículo, e deve estar na rotação local (0, 0, 0) para que as coisas funcionem corretamente.
Crie um novo código em C# chamado PosicCamera e use o código abaixo nele:
Depois, basta jogar este código na câmera do veículo, criar os botões e linkar os botões nas variáveis corretas...
Tudo deve funcionar de primeira
A câmera deve ser filha do seu veículo, e deve estar na rotação local (0, 0, 0) para que as coisas funcionem corretamente.
Crie um novo código em C# chamado PosicCamera e use o código abaixo nele:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//este codigo vai na camera... a camera deve estar filiada ao veículo.
public class PosicCamera : MonoBehaviour {
[Header("Altura")]
public Button botaoAlturaMais;
public Button botaoAlturaMenos;
[Range(0.05f, 1.0f)]
public float maximoDeslocamentoY = 0.3f;
[Range(0.005f, 0.5f)]
public float deslocamentoYPorClick = 0.05f;
[Space(5)][Header("Angulo")]
public Button botaoAnguloMais;
public Button botaoAnguloMenos;
[Range(5, 60)]
public float maximoAngulo = 25;
[Range(1, 20)]
public float anguloPorClick = 3;
[Space(5)][Header("Distancia")]
public Button botaoDistanciaMais;
public Button botaoDistanciaMenos;
[Range(0.05f, 1.0f)]
public float maximoDeslocamentoZ = 0.3f;
[Range(0.005f, 0.5f)]
public float deslocamentoZPorClick = 0.05f;
//variaveis privadas
Vector3 startPosition;
Vector3 startEulerAngles;
float incAngle = 0;
void Start() {
transform.localRotation = Quaternion.identity;
startPosition = transform.localPosition;
startEulerAngles = transform.localEulerAngles;
incAngle = 0;
//setar as funcões nos botões
botaoAlturaMais.onClick = new Button.ButtonClickedEvent();
botaoAlturaMenos.onClick = new Button.ButtonClickedEvent();
botaoAnguloMais.onClick = new Button.ButtonClickedEvent();
botaoAnguloMenos.onClick = new Button.ButtonClickedEvent();
botaoDistanciaMais.onClick = new Button.ButtonClickedEvent();
botaoDistanciaMenos.onClick = new Button.ButtonClickedEvent();
botaoAlturaMais.onClick.AddListener(() => Deslocar(true, +1));
botaoAlturaMenos.onClick.AddListener(() => Deslocar(true, -1));
botaoAnguloMais.onClick.AddListener(() => AngleUpDown( +1));
botaoAnguloMenos.onClick.AddListener(() => AngleUpDown( -1));
botaoDistanciaMais.onClick.AddListener(() => Deslocar(false, +1));
botaoDistanciaMenos.onClick.AddListener(() => Deslocar(false, -1));
}
void Deslocar(bool moveY, int sinal) {
if (moveY) {
transform.localPosition = transform.localPosition + (transform.up * deslocamentoYPorClick * sinal);
float limitPos = startPosition.y + (maximoDeslocamentoY * sinal);
if (sinal >= 0) {
if (transform.localPosition.y > limitPos) {
transform.localPosition = new Vector3(transform.localPosition.x, limitPos, transform.localPosition.z);
}
} else {
if (transform.localPosition.y < limitPos) {
transform.localPosition = new Vector3(transform.localPosition.x, limitPos, transform.localPosition.z);
}
}
} else {
transform.localPosition = transform.localPosition + (transform.forward * deslocamentoZPorClick * sinal);
float limitPos = startPosition.z + (maximoDeslocamentoZ * sinal);
if (sinal >= 0) {
if (transform.localPosition.z > limitPos) {
transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, limitPos);
}
} else {
if (transform.localPosition.z < limitPos) {
transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, limitPos);
}
}
}
//clampPos
float maxY = startPosition.y + maximoDeslocamentoY;
float minY = startPosition.y - maximoDeslocamentoY;
float maxZ = startPosition.z + maximoDeslocamentoZ;
float minZ = startPosition.z - maximoDeslocamentoZ;
transform.localPosition = new Vector3(transform.localPosition.x, Mathf.Clamp(transform.localPosition.y, minY, maxY), Mathf.Clamp(transform.localPosition.z, minZ, maxZ));
}
void AngleUpDown(int sinal) {
incAngle = incAngle - (anguloPorClick * sinal);
incAngle = Mathf.Clamp(incAngle, -maximoAngulo, maximoAngulo);
transform.localEulerAngles = new Vector3(startEulerAngles.x + incAngle, startEulerAngles.y, startEulerAngles.z);
}
}
Depois, basta jogar este código na câmera do veículo, criar os botões e linkar os botões nas variáveis corretas...
Tudo deve funcionar de primeira
Re: [RESOLVIDO] Ajustar Posição e Rotação da Câmera do Veículo
Muito obrigado mano, agradeço bastante
mama2401- Avançado
- PONTOS : 2393
REPUTAÇÃO : 2
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Ajustar movimentação da câmera
» [RESOLVIDO] Camera e posição do sprite animator
» [RESOLVIDO] Rotacionar câmera e manter rotação
» [RESOLVIDO] Limitar a rotação da câmera entre dois ângulos
» Rotacao de objeto (Z) conforme posicao do touch
» [RESOLVIDO] Camera e posição do sprite animator
» [RESOLVIDO] Rotacionar câmera e manter rotação
» [RESOLVIDO] Limitar a rotação da câmera entre dois ângulos
» Rotacao de objeto (Z) conforme posicao do touch
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos