AJUDA Rotação de Objeto ao Clicar num Botao
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
AJUDA Rotação de Objeto ao Clicar num Botao
Olá galera do Fórum, Meu nome é Jhones Araujo e estou criando um jogo de carros para android e sou novo no unity, Preciso de ajuda com este script que criei...
Ele serve para abrir e fechar o porta malas do carro quando clicar num botao.
ele abre e fecha o porta malas, Más se eu movimentar o carro e clicar no botao acontece isso...
- Código:
public Button yourButton;
public Vector3 rotacao32;
public bool aberto1;
int rotacao;
// Use this for initialization
void Start () {
Button btn = yourButton.GetComponent<Button>();
btn.onClick.AddListener(TaskOnClick);
aberto1 = (false);
}
// Update is called once per frame
void TaskOnClick(){
transform.eulerAngles = rotacao32;
if (aberto1)
aberto1 = false;
else
aberto1 = true;
}
void Update (){
rotacao32.y = transform.rotation.y;
rotacao32.z = transform.rotation.z;
if (aberto1)
rotacao32.x = -90;
else
rotacao32.x = 0;
}
}
Ele serve para abrir e fechar o porta malas do carro quando clicar num botao.
ele abre e fecha o porta malas, Más se eu movimentar o carro e clicar no botao acontece isso...
JhonnyBravo- Iniciante
- PONTOS : 2989
REPUTAÇÃO : 4
Respeito as regras :
Re: AJUDA Rotação de Objeto ao Clicar num Botao
olha vc não deve estar usando o local rotation direito eu também n sei direito fazer mt bem script mais so pense oq garda a rotação do carro tanto fazendo o ângulo? Sim a roda e so pegar a parte q faz girar a roda e dar um flip
uma pequena ajudinha eu fiz um script de porta soh q e pra entrar espero q ajude a e tenq adc um wellcolider para este script funcionar
using UnityEngine;
using System.Collections;
public class Porta : MonoBehaviour
{
public bool Tera1Porta = true, Tera2Porta, Tera3Porta, Tera4Porta, Tera5Porta, Tera6Porta;
public float RotPort1 = 70, RotPort2 = 70, RotPort3 = 70, RotPort4 = 70, RotPort5 = 70, RotPort6 = 70;
public Transform[] MeshRodas;
public WheelCollider[] ColisorRodas;
public bool Aberta;
private bool PodeAbrir;
private float angulo, direcao;
private GameObject Jogador;
public KeyCode BotaoAbrirAsPortas;
public float distanciaParaAbrir = 20; // se o cubo tem 1x1 baseie-se no tamanho dele para inserir uma distancia
void Start(){
Jogador = GameObject.FindWithTag("Player");
}
void Update()
{
// CHECAHDO SE ESTA PERTO OU NAO
if (Vector3.Distance(transform.position, Jogador.transform.position) <= distanciaParaAbrir)
{
PodeAbrir = true;
}
else if (Vector3.Distance(transform.position, Jogador.transform.position) > distanciaParaAbrir)
{
PodeAbrir = false;
}
if (Aberta == true)
{
direcao = 1;
}
else
{
direcao = 0;
}
if (PodeAbrir == true)
{
if (Input.GetKeyDown(BotaoAbrirAsPortas))
{
Aberta = !Aberta;
}
}
if(Aberta == true) {
angulo = Mathf.Lerp(angulo, direcao, Time.deltaTime * 4);
}
else
{
angulo = Mathf.Lerp(angulo, direcao, Time.deltaTime * 2);
}
}
void FixedUpdate()
{
if (Tera1Porta == true)
{
ColisorRodas[0].steerAngle = angulo * RotPort1;
}
if (Tera2Porta == true)
{
Tera1Porta = true;
ColisorRodas[1].steerAngle = angulo * RotPort2;
}
if (Tera3Porta == true)
{
Tera1Porta = true;
Tera2Porta = true;
ColisorRodas[2].steerAngle = angulo * RotPort3;
}
if (Tera4Porta == true)
{
Tera1Porta = true;
Tera2Porta = true;
Tera3Porta = true;
ColisorRodas[3].steerAngle = angulo * RotPort4;
}
if (Tera5Porta == true)
{
Tera1Porta = true;
Tera2Porta = true;
Tera3Porta = true;
Tera4Porta = true;
ColisorRodas[4].steerAngle = angulo * RotPort5;
}
if (Tera6Porta == true)
{
Tera1Porta = true;
Tera2Porta = true;
Tera3Porta = true;
Tera4Porta = true;
Tera5Porta = true;
ColisorRodas[5].steerAngle = angulo * RotPort6;
}
// NAO MECHE QUE E MELHOR
for (int x = 0; x < ColisorRodas.Length; x++)
{
Quaternion quat;
Vector3 pos;
ColisorRodas[x].GetWorldPose(out pos, out quat);
MeshRodas[x].position = pos;
MeshRodas[x].rotation = quat;
}
}
}
Lembre-se este script não atende suas especificações então se for usa-lo terá que modifica-lo isto e so para ter uma noção pois o meu o player tenq esta perto para a porta abrir vc pode colocar o seu carro sendo o player so para um teste depois tirar a parte que checa o player.
espero ter ajudado :D
caso este script não deie para girar o porta malas pegue isto como base
for (int x = 0; x < ColisorRodas.Length; x++)
{
Quaternion quat;
Vector3 pos;
ColisorRodas[x].GetWorldPose(out pos, out quat);
MeshRodas[x].position = pos;
MeshRodas[x].rotation = quat;
isto guarda a rotação local e isto também foi aplicado em roda para carro para ir da esquerda para direita e é so vc fazazer ir de cima pra baixo
e me diga uma coisa o carro antes de você se movimentar ele abre a porta assim mesmo ou a porta soh fica errada quando vc anda com o carro?
uma pequena ajudinha eu fiz um script de porta soh q e pra entrar espero q ajude a e tenq adc um wellcolider para este script funcionar
using UnityEngine;
using System.Collections;
public class Porta : MonoBehaviour
{
public bool Tera1Porta = true, Tera2Porta, Tera3Porta, Tera4Porta, Tera5Porta, Tera6Porta;
public float RotPort1 = 70, RotPort2 = 70, RotPort3 = 70, RotPort4 = 70, RotPort5 = 70, RotPort6 = 70;
public Transform[] MeshRodas;
public WheelCollider[] ColisorRodas;
public bool Aberta;
private bool PodeAbrir;
private float angulo, direcao;
private GameObject Jogador;
public KeyCode BotaoAbrirAsPortas;
public float distanciaParaAbrir = 20; // se o cubo tem 1x1 baseie-se no tamanho dele para inserir uma distancia
void Start(){
Jogador = GameObject.FindWithTag("Player");
}
void Update()
{
// CHECAHDO SE ESTA PERTO OU NAO
if (Vector3.Distance(transform.position, Jogador.transform.position) <= distanciaParaAbrir)
{
PodeAbrir = true;
}
else if (Vector3.Distance(transform.position, Jogador.transform.position) > distanciaParaAbrir)
{
PodeAbrir = false;
}
if (Aberta == true)
{
direcao = 1;
}
else
{
direcao = 0;
}
if (PodeAbrir == true)
{
if (Input.GetKeyDown(BotaoAbrirAsPortas))
{
Aberta = !Aberta;
}
}
if(Aberta == true) {
angulo = Mathf.Lerp(angulo, direcao, Time.deltaTime * 4);
}
else
{
angulo = Mathf.Lerp(angulo, direcao, Time.deltaTime * 2);
}
}
void FixedUpdate()
{
if (Tera1Porta == true)
{
ColisorRodas[0].steerAngle = angulo * RotPort1;
}
if (Tera2Porta == true)
{
Tera1Porta = true;
ColisorRodas[1].steerAngle = angulo * RotPort2;
}
if (Tera3Porta == true)
{
Tera1Porta = true;
Tera2Porta = true;
ColisorRodas[2].steerAngle = angulo * RotPort3;
}
if (Tera4Porta == true)
{
Tera1Porta = true;
Tera2Porta = true;
Tera3Porta = true;
ColisorRodas[3].steerAngle = angulo * RotPort4;
}
if (Tera5Porta == true)
{
Tera1Porta = true;
Tera2Porta = true;
Tera3Porta = true;
Tera4Porta = true;
ColisorRodas[4].steerAngle = angulo * RotPort5;
}
if (Tera6Porta == true)
{
Tera1Porta = true;
Tera2Porta = true;
Tera3Porta = true;
Tera4Porta = true;
Tera5Porta = true;
ColisorRodas[5].steerAngle = angulo * RotPort6;
}
// NAO MECHE QUE E MELHOR
for (int x = 0; x < ColisorRodas.Length; x++)
{
Quaternion quat;
Vector3 pos;
ColisorRodas[x].GetWorldPose(out pos, out quat);
MeshRodas[x].position = pos;
MeshRodas[x].rotation = quat;
}
}
}
Lembre-se este script não atende suas especificações então se for usa-lo terá que modifica-lo isto e so para ter uma noção pois o meu o player tenq esta perto para a porta abrir vc pode colocar o seu carro sendo o player so para um teste depois tirar a parte que checa o player.
espero ter ajudado :D
caso este script não deie para girar o porta malas pegue isto como base
for (int x = 0; x < ColisorRodas.Length; x++)
{
Quaternion quat;
Vector3 pos;
ColisorRodas[x].GetWorldPose(out pos, out quat);
MeshRodas[x].position = pos;
MeshRodas[x].rotation = quat;
isto guarda a rotação local e isto também foi aplicado em roda para carro para ir da esquerda para direita e é so vc fazazer ir de cima pra baixo
e me diga uma coisa o carro antes de você se movimentar ele abre a porta assim mesmo ou a porta soh fica errada quando vc anda com o carro?
Extreme Craft- Avançado
- PONTOS : 3275
REPUTAÇÃO : 30
Idade : 23
Áreas de atuação : C# , Blender , Unity
Respeito as regras :
Re: AJUDA Rotação de Objeto ao Clicar num Botao
se o carro estiver parado com a rotacao toda em 0 xyz o porta malas abre normalmente.
JhonnyBravo- Iniciante
- PONTOS : 2989
REPUTAÇÃO : 4
Respeito as regras :
Re: AJUDA Rotação de Objeto ao Clicar num Botao
Obg Extreme Craft, por sua ajuda más eu consegui resolver sozinho. Troquei transform.eulerAngles por transform.localEulerAngles!
JhonnyBravo- Iniciante
- PONTOS : 2989
REPUTAÇÃO : 4
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Ajuda com orientação de rotação de objeto
» [DÚVIDA] FAZER OBJETO GIRAR EM TORNO DE SI QUANDO CLICAR E ARRASTAR O OBJETO PARA OS LADOS
» Como mudar rotacao de um objeto em relacao a posicao do outro objeto
» mouse clicar objeto
» [RESOLVIDO] Como faço para clicar em um objeto e visualizar, girar...
» [DÚVIDA] FAZER OBJETO GIRAR EM TORNO DE SI QUANDO CLICAR E ARRASTAR O OBJETO PARA OS LADOS
» Como mudar rotacao de um objeto em relacao a posicao do outro objeto
» mouse clicar objeto
» [RESOLVIDO] Como faço para clicar em um objeto e visualizar, girar...
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos