[TUTORIAL] Camera orbital com zoom (scroll)
+5
AndyShow
LucioHenrique
GustavoMaster
MarcosSchultz
Chilinger
9 participantes
Página 1 de 1
[TUTORIAL] Camera orbital com zoom (scroll)
Fala galera, elaborei este sistema simples para uma câmera orbital... basta criar um script em C# chamado "CameraOrbital" e usar este código nele:
Este script deve ir no seu jogador, e a única coisa que você tem que fazer é jogar a câmera variável "Objeto Camera" do script, e pronto, terá uma câmera orbital, com zoom e rotação, além de ajustes :D
- Código:
using UnityEngine;
using System.Collections;
using System;
[Serializable]
public class ConfigsDaCameraOrbital {
[Range(0.01f,2.0f)] public float sensibilidade = 0.8f, velocidadeScrool = 1.0f, velocidadeY = 0.5f;
[Range(3.0f,20.0f)] public float distanciaMinima = 5.0f;
[Range(20.0f,200.0f)] public float distanciaMaxima = 50.0f;
}
public class CameraOrbital : MonoBehaviour {
float xOrbit, yOrbit, distanciaCameraOrbit;
public GameObject ObjetoCamera;
public ConfigsDaCameraOrbital Configuracoes;
void Start () {
distanciaCameraOrbit = Configuracoes.distanciaMinima;
xOrbit = ObjetoCamera.transform.eulerAngles.x;
yOrbit = ObjetoCamera.transform.eulerAngles.y;
transform.gameObject.layer = 2;
}
void LateUpdate () {
float velocidadeTimeScale = 1.0f / Time.timeScale;
float sensibilidade = Configuracoes.sensibilidade;
float distMin = Configuracoes.distanciaMinima;
float distMax = Configuracoes.distanciaMaxima;
float velocidadeScrool = Configuracoes.velocidadeScrool * 50.0f;
float sensYMouse = Configuracoes.velocidadeY * 10.0f;
//
RaycastHit hit;
if (!Physics.Linecast (transform.position, ObjetoCamera.transform.position)) {
} else if (Physics.Linecast (transform.position, ObjetoCamera.transform.position, out hit)) {
distanciaCameraOrbit = Vector3.Distance (transform.position, hit.point);
distMin = Mathf.Clamp ((Vector3.Distance (transform.position, hit.point)), distMin * 0.5f, distMax);
}
//
xOrbit += Input.GetAxis ("Mouse X") * (sensibilidade * distanciaCameraOrbit)/(distanciaCameraOrbit*0.5f);
yOrbit -= Input.GetAxis ("Mouse Y") * sensibilidade * sensYMouse;
yOrbit = ClampAngle (yOrbit, 0.0f, 85.0f);
Quaternion rotation = Quaternion.Euler (yOrbit, xOrbit , 0);
distanciaCameraOrbit = Mathf.Clamp (distanciaCameraOrbit - Input.GetAxis ("Mouse ScrollWheel") * velocidadeScrool, distMin, distMax);
Vector3 negDistance = new Vector3 (0.0f, 0.0f, -distanciaCameraOrbit);
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);
}
}
Este script deve ir no seu jogador, e a única coisa que você tem que fazer é jogar a câmera variável "Objeto Camera" do script, e pronto, terá uma câmera orbital, com zoom e rotação, além de ajustes :D
Re: [TUTORIAL] Camera orbital com zoom (scroll)
O que seria essa camera orbital?Zoom de sniper ?
Chilinger- MembroAvançado
- PONTOS : 4092
REPUTAÇÃO : 42
Idade : 30
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
Camera orbital é tipo camera de jogo RPG, que você pode orbitar ao redor do jogador.Chilinger escreveu:O que seria essa camera orbital?Zoom de sniper ?
Re: [TUTORIAL] Camera orbital com zoom (scroll)
O meu começa a se distânciar do objeto, o que posso fazer ?
GustavoMaster- Avançado
- PONTOS : 3772
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
Opa pessoal queria saber como faço para inves de ser o scroll do mouse ser a letra "C"
LucioHenrique- Iniciante
- PONTOS : 2884
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
LucioHenrique escreveu:Opa pessoal queria saber como faço para inves de ser o scroll do mouse ser a letra "C"
Usa um Math.Lerp no Lugar do Scroll e chama ele no Input.GetKey
Re: [TUTORIAL] Camera orbital com zoom (scroll)
LucioHenrique escreveu:Opa pessoal queria saber como faço para inves de ser o scroll do mouse ser a letra "C"
Usa um Math.Lerp no Lugar do Scroll e chama ele no Input.GetKey
como faço isso
LucioHenrique- Iniciante
- PONTOS : 2884
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
- 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 distanciaMinima = 5.0f;
[Range(20.0f,200.0f)] public float distanciaMaxima = 50.0f;
}
public class CameraOrbital : MonoBehaviour {
float xOrbit, yOrbit, distanciaCameraOrbit;
public GameObject ObjetoCamera;
public ConfigsDaCameraOrbital Configuracoes;
bool zoom;
void Start () {
zoom = false;
distanciaCameraOrbit = Configuracoes.distanciaMinima;
xOrbit = ObjetoCamera.transform.eulerAngles.x;
yOrbit = ObjetoCamera.transform.eulerAngles.y;
transform.gameObject.layer = 2;
}
void Update(){
if (Input.GetKeyDown (KeyCode.C)) {
zoom = !zoom;
}
if (zoom) {
distanciaCameraOrbit = Configuracoes.distanciaMinima;
} else {
distanciaCameraOrbit = Configuracoes.distanciaMaxima;
}
}
void LateUpdate () {
float velocidadeTimeScale = 1.0f / Time.timeScale;
float sensibilidade = Configuracoes.sensibilidade;
float distMin = Configuracoes.distanciaMinima;
float distMax = Configuracoes.distanciaMaxima;
float sensYMouse = Configuracoes.velocidadeY * 10.0f;
//
RaycastHit hit;
if (!Physics.Linecast (transform.position, ObjetoCamera.transform.position)) {
} else if (Physics.Linecast (transform.position, ObjetoCamera.transform.position, out hit)) {
distanciaCameraOrbit = Vector3.Distance (transform.position, hit.point);
distMin = Mathf.Clamp ((Vector3.Distance (transform.position, hit.point)), distMin * 0.5f, distMax);
}
//
xOrbit += Input.GetAxis ("Mouse X") * (sensibilidade * distanciaCameraOrbit)/(distanciaCameraOrbit*0.5f);
yOrbit -= Input.GetAxis ("Mouse Y") * sensibilidade * sensYMouse;
yOrbit = ClampAngle (yOrbit, 0.0f, 85.0f);
Quaternion rotation = Quaternion.Euler (yOrbit, xOrbit , 0);
Vector3 negDistance = new Vector3 (0.0f, 0.0f, -distanciaCameraOrbit);
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);
}
}
Re: [TUTORIAL] Camera orbital com zoom (scroll)
esse tuto é 100/10
Gabriel César O- Profissional
- PONTOS : 3986
REPUTAÇÃO : 217
Idade : 23
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
Eu tinha feito um bem simples pro meu personagem:
Depois um fiz um bem melhor pro barco, com limites pro zoom do scroll e tudo mais.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraLivre : MonoBehaviour {
public GameObject Alvo;
public int Tempo;
private float VelocidadeHorizontal = 20f;
private float VelocidadeVertical = 20f;
private float VelocidadeDeZoom = 0f;
void Update ()
{
transform.LookAt(Alvo.transform);
var VelHorizontal = VelocidadeHorizontal * Input.GetAxis("Mouse X");
var VelVertical = VelocidadeVertical * Input.GetAxis("Mouse Y");
var Zoom = VelocidadeDeZoom * Input.GetAxis("Mouse ScrollWheel");
transform.RotateAround(Alvo.transform.position, new Vector3(VelVertical, VelHorizontal, Zoom), Tempo * Time.deltaTime);
}
}
Depois um fiz um bem melhor pro barco, com limites pro zoom do scroll e tudo mais.
Gabriel César O- Profissional
- PONTOS : 3986
REPUTAÇÃO : 217
Idade : 23
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
Teria como eu fazer a camera movimentar em volta do personagem com o mouse ?
lidio133- Iniciante
- PONTOS : 2695
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
MAS A CÂMERA ORBITAL FAZ ISSO, COPIE E COLE O SCRIPT DESSE TÓPICO E PRONTO.lidio133 escreveu:Teria como eu fazer a camera movimentar em volta do personagem com o mouse ?
Gabriel César O- Profissional
- PONTOS : 3986
REPUTAÇÃO : 217
Idade : 23
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
Quando eu clico no botão de acelera pelo android a camera vira sozinha, oque eu faço para nao ficar virando quando clicar no acelerador?MarcosSchultz escreveu:Fala galera, elaborei este sistema simples para uma câmera orbital... basta criar um script em C# chamado "CameraOrbital" e usar este código nele:
- Código:
using UnityEngine;
using System.Collections;
using System;
[Serializable]
public class ConfigsDaCameraOrbital {
[Range(0.01f,2.0f)] public float sensibilidade = 0.8f, velocidadeScrool = 1.0f, velocidadeY = 0.5f;
[Range(3.0f,20.0f)] public float distanciaMinima = 5.0f;
[Range(20.0f,200.0f)] public float distanciaMaxima = 50.0f;
}
public class CameraOrbital : MonoBehaviour {
float xOrbit, yOrbit, distanciaCameraOrbit;
public GameObject ObjetoCamera;
public ConfigsDaCameraOrbital Configuracoes;
void Start () {
distanciaCameraOrbit = Configuracoes.distanciaMinima;
xOrbit = ObjetoCamera.transform.eulerAngles.x;
yOrbit = ObjetoCamera.transform.eulerAngles.y;
transform.gameObject.layer = 2;
}
void LateUpdate () {
float velocidadeTimeScale = 1.0f / Time.timeScale;
float sensibilidade = Configuracoes.sensibilidade;
float distMin = Configuracoes.distanciaMinima;
float distMax = Configuracoes.distanciaMaxima;
float velocidadeScrool = Configuracoes.velocidadeScrool * 50.0f;
float sensYMouse = Configuracoes.velocidadeY * 10.0f;
//
RaycastHit hit;
if (!Physics.Linecast (transform.position, ObjetoCamera.transform.position)) {
} else if (Physics.Linecast (transform.position, ObjetoCamera.transform.position, out hit)) {
distanciaCameraOrbit = Vector3.Distance (transform.position, hit.point);
distMin = Mathf.Clamp ((Vector3.Distance (transform.position, hit.point)), distMin * 0.5f, distMax);
}
//
xOrbit += Input.GetAxis ("Mouse X") * (sensibilidade * distanciaCameraOrbit)/(distanciaCameraOrbit*0.5f);
yOrbit -= Input.GetAxis ("Mouse Y") * sensibilidade * sensYMouse;
yOrbit = ClampAngle (yOrbit, 0.0f, 85.0f);
Quaternion rotation = Quaternion.Euler (yOrbit, xOrbit , 0);
distanciaCameraOrbit = Mathf.Clamp (distanciaCameraOrbit - Input.GetAxis ("Mouse ScrollWheel") * velocidadeScrool, distMin, distMax);
Vector3 negDistance = new Vector3 (0.0f, 0.0f, -distanciaCameraOrbit);
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);
}
}
Este script deve ir no seu jogador, e a única coisa que você tem que fazer é jogar a câmera variável "Objeto Camera" do script, e pronto, terá uma câmera orbital, com zoom e rotação, além de ajustes :D
Gregory2017- Iniciante
- PONTOS : 2815
REPUTAÇÃO : 2
Idade : 26
Respeito as regras :
Re: [TUTORIAL] Camera orbital com zoom (scroll)
Ai você tem que meio que refazer este script para ele detectar se algum botão está sendo pressionado ou não...
Ou trabalhar com layers
Ou trabalhar com layers
Re: [TUTORIAL] Camera orbital com zoom (scroll)
Cm que eu faço isso?MarcosSchultz escreveu:Ai você tem que meio que refazer este script para ele detectar se algum botão está sendo pressionado ou não...
Ou trabalhar com layers
Gregory2017- Iniciante
- PONTOS : 2815
REPUTAÇÃO : 2
Idade : 26
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Zoom de Camera com o Scroll do Mouse
» Zoom da Câmera Orbital por Botões
» [TUTORIAL] Camera orbital para android (TOUCH)
» CÂMERA ORBITAL, CÂMERA ORBITAR O PLAYER
» Câmera Orbital Modificada
» Zoom da Câmera Orbital por Botões
» [TUTORIAL] Camera orbital para android (TOUCH)
» CÂMERA ORBITAL, CÂMERA ORBITAR O PLAYER
» Câmera Orbital Modificada
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos