Como limitar a rotação no RotateAround?
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Como limitar a rotação no RotateAround?
Olá, estou tentando desenvolver um sistema de terceira pessoa para aprimorar meus conhecimentos em programação, porém não consigo limitar a rotação do ângulo da câmera com o RotateAround. Já tentei usar Mathf.clamp, porém não funciona... Eu quase fiz isto funcionar, porém quando eu movo a câmera no eixo X muito rápido, a câmera vai começar a sair do limite de ângulo. Aqui está o código :
Alguém sabe como resolvê-lo?
- Código:
using UnityEngine;
using System.Collections;
public class nada : MonoBehaviour {
public float sensibilidade;
private float roHo;
private float roVe;
public float minRotacao;
public float maxRotacao;
public float x;
public GameObject personagem;
void Update() {
roHo = Input.GetAxis("Mouse X") * sensibilidade * Time.deltaTime;
roVe = Input.GetAxis("Mouse Y") * -sensibilidade * Time.deltaTime;
x += roVe;
x = Mathf.Clamp(x, -maxRotacao, minRotacao);
transform.RotateAround(personagem.transform.position, Vector3.up, roHo);
if (x > -maxRotacao && x < minRotacao)
{
transform.RotateAround(personagem.transform.position, transform.right, roVe);
}
}
}
Alguém sabe como resolvê-lo?
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Como limitar a rotação no RotateAround?
Aqui vai um exemplo, espero que ajude
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GiroPlayer : MonoBehaviour {
private float velocidadeGirar =2;
public float anguloX,anguloY,anguloMiraMinX, anguloMiraMaxX,anguloMiraMinY, anguloMiraMaxY;
void Start ()
{
}
void Update ()
{
anguloY += Input.GetAxis("Mouse X")*velocidadeGirar;
anguloX -= Input.GetAxis("Mouse Y")*velocidadeGirar;
anguloX = Mathf.Clamp(anguloX,anguloMiraMinX,anguloMiraMaxX);
anguloY = Mathf.Clamp(anguloY,anguloMiraMinY,anguloMiraMaxY);
transform.rotation = Quaternion.Euler(anguloX,anguloY,0);
}
}
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Como limitar a rotação no RotateAround?
Obrigado por tentar ajudar mas não é isto o que eu quero, eu queria tentar fazer a câmera rotacionar ao redor do objeto usando o RotateAround, porém estou tentando adicionar um limite de rotação no eixo X mas não estou conseguindo.
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Como limitar a rotação no RotateAround?
wiki.unity3d.com/index.php?title=MouseOrbitImproved
Voce precisa usar Quaternions quando for fazer qualquer coisa que envolva rotacionar um objeto.
en.wikipedia.org/wiki/Quaternion
docs.unity3d.com/ScriptReference/Quaternion.html
Por algum motivo, não posso postar os links. Mas o primeiro é um script de câmera orbital, o segundo é o do wikipédia sobre o que é um quaternion matematicamente, e o segundo sobre como o Unity lida com ele.
Voce precisa usar Quaternions quando for fazer qualquer coisa que envolva rotacionar um objeto.
en.wikipedia.org/wiki/Quaternion
docs.unity3d.com/ScriptReference/Quaternion.html
Por algum motivo, não posso postar os links. Mas o primeiro é um script de câmera orbital, o segundo é o do wikipédia sobre o que é um quaternion matematicamente, e o segundo sobre como o Unity lida com ele.
Re: Como limitar a rotação no RotateAround?
Ok obrigado.Before Dawn escreveu:wiki.unity3d.com/index.php?title=MouseOrbitImproved
Voce precisa usar Quaternions quando for fazer qualquer coisa que envolva rotacionar um objeto.
en.wikipedia.org/wiki/Quaternion
docs.unity3d.com/ScriptReference/Quaternion.html
Por algum motivo, não posso postar os links. Mas o primeiro é um script de câmera orbital, o segundo é o do wikipédia sobre o que é um quaternion matematicamente, e o segundo sobre como o Unity lida com ele.
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Como limitar a rotação no RotateAround?
RESOLVIDO :
- Código:
using UnityEngine;
using System.Collections;
public class OrbitaCamera : MonoBehaviour
{
public Transform heroi;
public float distancia = 5.0f;
public float sensibilidadeX = 120.0f;
public float sensibilidadeY = 120.0f;
public float limiteMin = -20f;
public float limiteMax = 80f;
private Rigidbody rb;
float x = 0.0f;
float y = 0.0f;
// Use this for initialization
void Start()
{
Vector3 angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
rb = GetComponent<Rigidbody>();
// Make the rigid body not change rotation
if (rb != null)
{
rb.freezeRotation = true;
}
}
void LateUpdate()
{
if (heroi)
{
x += Input.GetAxis("Mouse X") * sensibilidadeX * distancia * 0.02f;
y -= Input.GetAxis("Mouse Y") * sensibilidadeY * 0.02f;
y = ClampAngle(y, limiteMin, limiteMax);
Quaternion rotation = Quaternion.Euler(y, x, 0);
Vector3 negDistance = new Vector3(1.0f, 0.5f, -distancia);
Vector3 position = rotation * negDistance + heroi.position;
transform.rotation = rotation;
transform.position = position;
}
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp(angle, min, max);
}
}
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Como limitar a rotação no RotateAround?
Obrigado, por compartilhar a resolução, irá ajudar muitos.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Tópicos semelhantes
» Como limitar o angulo de rotação de um objeto?
» [RESOLVIDO] Limitar rotação no eixo x
» [Resolvido] Limitar rotação em tantos graus
» Duvidas sobre limitar a rotação de um objeto.
» [RESOLVIDO] Limitar a rotação da câmera entre dois ângulos
» [RESOLVIDO] Limitar rotação no eixo x
» [Resolvido] Limitar rotação em tantos graus
» Duvidas sobre limitar a rotação de um objeto.
» [RESOLVIDO] Limitar a rotação da câmera entre dois ângulos
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos