[TUTORIAL] Camera orbital para android (TOUCH)
+2
FernandoPRB
MarcosSchultz
6 participantes
Página 1 de 1
[TUTORIAL] Camera orbital para android (TOUCH)
Olá pessoal, elaborei este script simples para fazer uma camera orbital funcionar em dispositivos móveis... Para isto, basta criar um novo script em C# com o nome "CameraOrbital" e utilizar este código nele:
Depois disso, basta você jogar o script no objeto que você quer "orbitar". Quando você jogar o script no objeto, se você não tiver errado nenhum passo, aparecerão 2 variáveis principais...
"ObjetoCamera"
"Configurações"
Na variável "ObjetoCamera", você deve apenas jogar a camera que vai "orbitar" o objeto do script... e nas configurações, você deve "configurar a gosto" as sensibilidades dos eixos X e Y, e a distância que a camera vai ficar do objeto.
Feito isto, você já terá uma camera orbital que funciona com touch.
Esta camera funciona com apenas 1 toque, pois é feita com base no primeiro elemento da array de toques.
- Código:
using UnityEngine;
using System.Collections;
using System;
[Serializable]
public class ConfigsDaCameraOrbital {
[Range(0.01f,2.0f)] public float sensibilidade = 0.8f, velocidadeY = 0.5f;
[Range(3.0f,20.0f)] public float distanciaCamera = 10.0f;
}
public class CameraOrbital : MonoBehaviour {
float xOrbit, yOrbit;
public GameObject ObjetoCamera;
public ConfigsDaCameraOrbital Configuracoes;
void Start () {
xOrbit = ObjetoCamera.transform.eulerAngles.x;
yOrbit = ObjetoCamera.transform.eulerAngles.y;
transform.gameObject.layer = 2;
}
void LateUpdate () {
float velocidadeTimeScale = 1.0f / Time.timeScale;
//
if (Input.touchCount > 0) {
Touch touch = Input.GetTouch (0);
xOrbit += touch.deltaPosition.x * Configuracoes.sensibilidade;
yOrbit -= touch.deltaPosition.y * Configuracoes.sensibilidade * Configuracoes.velocidadeY * 10.0f;
}
//
yOrbit = ClampAngle (yOrbit, 0.0f, 85.0f);
Quaternion rotation = Quaternion.Euler (yOrbit, xOrbit , 0);
Vector3 negDistance = new Vector3 (0.0f, 0.0f, -Configuracoes.distanciaCamera);
Vector3 position = rotation * negDistance + transform.position;
Vector3 posicAtual = ObjetoCamera.transform.position;
Quaternion rotacAtual = ObjetoCamera.transform.rotation;
ObjetoCamera.transform.rotation = Quaternion.Lerp(rotacAtual,rotation,Time.deltaTime*5.0f*velocidadeTimeScale);
ObjetoCamera.transform.position = Vector3.Lerp(posicAtual,position,Time.deltaTime*5.0f*velocidadeTimeScale);
}
public static float ClampAngle (float angulo, float min, float max){
if (angulo < -360F) { angulo += 360F; }
if (angulo > 360F) { angulo -= 360F; }
return Mathf.Clamp (angulo, min, max);
}
}
Depois disso, basta você jogar o script no objeto que você quer "orbitar". Quando você jogar o script no objeto, se você não tiver errado nenhum passo, aparecerão 2 variáveis principais...
"ObjetoCamera"
"Configurações"
Na variável "ObjetoCamera", você deve apenas jogar a camera que vai "orbitar" o objeto do script... e nas configurações, você deve "configurar a gosto" as sensibilidades dos eixos X e Y, e a distância que a camera vai ficar do objeto.
Feito isto, você já terá uma camera orbital que funciona com touch.
Esta camera funciona com apenas 1 toque, pois é feita com base no primeiro elemento da array de toques.
Re: [TUTORIAL] Camera orbital para android (TOUCH)
vlw man ajudou muitoo
FernandoPRB- Membro
- PONTOS : 3055
REPUTAÇÃO : 4
Idade : 22
Áreas de atuação : Modelagem
Respeito as regras :
Re: [TUTORIAL] Camera orbital para android (TOUCH)
Marcos , tem alguma forma de fazer ela voltar automaticamente para atras do veiculo ? tipo gta ?
deikson- MembroAvançado
- PONTOS : 3438
REPUTAÇÃO : 14
Idade : 28
Áreas de atuação : Modelagem SketchUp;
design;
Iniciando C#;
Respeito as regras :
Re: [TUTORIAL] Camera orbital para android (TOUCH)
Tem sim, eu geralmente uso este tipo de lógica aqui, do Lerp:
Você precisa ter uma posição e setá-la caso não exista movimento por mais de 10 segs... Consegue fazer isto?
Você precisa ter uma posição e setá-la caso não exista movimento por mais de 10 segs... Consegue fazer isto?
Re: [TUTORIAL] Camera orbital para android (TOUCH)
acho que não consigo mano :/ e muito complicado?
deikson- MembroAvançado
- PONTOS : 3438
REPUTAÇÃO : 14
Idade : 28
Áreas de atuação : Modelagem SketchUp;
design;
Iniciando C#;
Respeito as regras :
Re: [TUTORIAL] Camera orbital para android (TOUCH)
deikson escreveu:acho que não consigo mano :/ e muito complicado?
Tente isto (não testei no celular).
Basta usar este script, e criar um objeto filho do seu personagem (objeto vazio de preferência), para ser a posição fixa da camera:
- Código:
using UnityEngine;
using System.Collections;
using System;
[Serializable]
public class ConfigsDaCameraOrbital {
[Range(0.01f,2.0f)] public float sensibilidade = 0.8f, velocidadeY = 0.5f;
[Range(3.0f,20.0f)] public float distanciaCamera = 10.0f;
}
public class CameraOrbital : MonoBehaviour {
float xOrbit, yOrbit;
public GameObject ObjetoCamera, PosicaoFixa;
public ConfigsDaCameraOrbital Configuracoes;
float cronometro = 0;
void Start () {
xOrbit = ObjetoCamera.transform.eulerAngles.x;
yOrbit = ObjetoCamera.transform.eulerAngles.y;
transform.gameObject.layer = 2;
}
void LateUpdate () {
float velocidadeTimeScale = 1.0f / Time.timeScale;
//
if (Input.touchCount > 0) {
Touch touch = Input.GetTouch (0);
xOrbit += touch.deltaPosition.x * Configuracoes.sensibilidade;
yOrbit -= touch.deltaPosition.y * Configuracoes.sensibilidade * Configuracoes.velocidadeY * 10.0f;
cronometro = 0;
} else {
if (cronometro < 10) {
cronometro += Time.deltaTime;
}
}
//
if (cronometro < 5) {
yOrbit = ClampAngle (yOrbit, 0.0f, 85.0f);
Quaternion rotation = Quaternion.Euler (yOrbit, xOrbit, 0);
Vector3 negDistance = new Vector3 (0.0f, 0.0f, -Configuracoes.distanciaCamera);
Vector3 position = rotation * negDistance + transform.position;
Vector3 posicAtual = ObjetoCamera.transform.position;
Quaternion rotacAtual = ObjetoCamera.transform.rotation;
ObjetoCamera.transform.rotation = Quaternion.Lerp (rotacAtual, rotation, Time.deltaTime * 5.0f * velocidadeTimeScale);
ObjetoCamera.transform.position = Vector3.Lerp (posicAtual, position, Time.deltaTime * 5.0f * velocidadeTimeScale);
} else {
ObjetoCamera.transform.position = Vector3.Lerp (ObjetoCamera.transform.position, PosicaoFixa.transform.position, Time.deltaTime * 5.0f * velocidadeTimeScale);
ObjetoCamera.transform.LookAt (transform.position);
}
}
public static float ClampAngle (float angulo, float min, float max){
if (angulo < -360F) { angulo += 360F; }
if (angulo > 360F) { angulo -= 360F; }
return Mathf.Clamp (angulo, min, max);
}
}
Re: [TUTORIAL] Camera orbital para android (TOUCH)
NOSSA QUE TUTO TOP! ^^ 10/10
Gabriel César O- Profissional
- PONTOS : 3985
REPUTAÇÃO : 217
Idade : 23
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :
Re: [TUTORIAL] Camera orbital para android (TOUCH)
Olá, fiz tudo certinho, mas quando eu clico e arrasto pra mover a câmera ela simplesmente não se move, alguém poderia me ajudar? os controles mobile estão ativados em minha Unity. Agradeço pela paciência.
gcs13- MembroAvançado
- PONTOS : 2620
REPUTAÇÃO : 29
Idade : 23
Respeito as regras :
Re: [TUTORIAL] Camera orbital para android (TOUCH)
Tem como a área touch ser apenas em uma image no Canoas? ah é Marcos você é 10 !!!
Gabriel lupin- Iniciante
- PONTOS : 2627
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Android - Sistema de controle third person shooter, Joystick + Swipe camera
» [DÚVIDA] Câmera Orbital para Android?
» [DÚVIDA] FAZER CÂMERA ORBITAL PARA ANDROID
» [TUTORIAL] Camera orbital com zoom (scroll)
» [TUTORIAL] Mover câmera em 2D com TOUCH
» [DÚVIDA] Câmera Orbital para Android?
» [DÚVIDA] FAZER CÂMERA ORBITAL PARA ANDROID
» [TUTORIAL] Camera orbital com zoom (scroll)
» [TUTORIAL] Mover câmera em 2D com TOUCH
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos