(ajuda) movimentacao de caminhao UI
2 participantes
Página 1 de 1
(ajuda) movimentacao de caminhao UI
- Código:
using UnityEngine;
using UnityEngine.UI; // Necessário para interagir com a UI
public class CaminhaoController : MonoBehaviour
{
public float velocidade = 3000f; // Potência do motor ajustada para aceleração mais rápida
public float forcaFreio = 8000f; // Força do freio ajustada para maior eficácia
public float velocidadeRotacao = 45f; // Ângulo máximo de direção
public WheelCollider[] rodasMotores; // Rodas que impulsionam o caminhão
public WheelCollider[] rodasDirecionais; // Rodas que controlam a direção
public Transform[] rodasVisuaisMotores; // Referências visuais das rodas motores
public Transform[] rodasVisuaisDirecionais; // Referências visuais das rodas direcionais
private Rigidbody rb;
private float inputFrente = 0f; // Movimento para frente/trás
private float inputDirecao = 0f; // Direção esquerda/direita
// Botões da interface de usuário
public Button botaoFrente; // Botão para mover para frente
public Button botaoTras; // Botão para mover para trás
public Button botaoEsquerda; // Botão para girar para a esquerda
public Button botaoDireita; // Botão para girar para a direita
private void Start()
{
rb = GetComponent<Rigidbody>();
rb.mass = 1500f; // Massa ajustada para um comportamento mais realista
rb.linearDamping = 1f; // Ajuste do arrasto para simular a resistência do ar
rb.angularDamping = 1f; // Resistência à rotação
// Conectando os botões aos métodos
botaoFrente.onClick.AddListener(MoverParaFrente);
botaoTras.onClick.AddListener(MoverParaTras);
botaoEsquerda.onClick.AddListener(RotacionarEsquerda);
botaoDireita.onClick.AddListener(RotacionarDireita);
}
private void Update()
{
// Atualiza as rodas visuais dos motores
AtualizarRodasVisuais(rodasMotores, rodasVisuaisMotores);
// Atualiza as rodas visuais direcionais
AtualizarRodasVisuais(rodasDirecionais, rodasVisuaisDirecionais);
}
private void FixedUpdate()
{
// Controle do motor e do freio
foreach (WheelCollider roda in rodasMotores)
{
if (inputFrente == 0)
{
// Aplica freio quando o jogador não pressiona nada
roda.motorTorque = 0f;
roda.brakeTorque = forcaFreio;
}
else
{
// Remove o freio e aplica torque na direção desejada
roda.brakeTorque = 0f;
roda.motorTorque = inputFrente * velocidade;
}
}
// Direção do caminhão
foreach (WheelCollider roda in rodasDirecionais)
{
roda.steerAngle = inputDirecao * velocidadeRotacao;
}
}
// Função para mover o caminhão para frente
private void MoverParaFrente()
{
inputFrente = 1f; // Movimenta para frente
}
// Função para mover o caminhão para trás
private void MoverParaTras()
{
inputFrente = -1f; // Movimenta para trás
}
// Função para rotacionar o caminhão para a esquerda
private void RotacionarEsquerda()
{
inputDirecao = -1f; // Roda para a esquerda
}
// Função para rotacionar o caminhão para a direita
private void RotacionarDireita()
{
inputDirecao = 1f; // Roda para a direita
}
private void AtualizarRodasVisuais(WheelCollider[] rodas, Transform[] visuais)
{
for (int i = 0; i < rodas.Length; i++)
{
Vector3 posicao;
Quaternion rotacao;
rodas[i].GetWorldPose(out posicao, out rotacao);
visuais[i].position = posicao;
visuais[i].rotation = rotacao;
}
}
}
JaoGrilo12345- Iniciante
- PONTOS : 25
REPUTAÇÃO : 0
Respeito as regras :
Re: (ajuda) movimentacao de caminhao UI
Não sei se funciona mas tente.
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; // Necessário para usar PointerDown e PointerUp
public class CaminhaoController : MonoBehaviour
{
public float velocidade = 3000f;
public float forcaFreio = 8000f;
public float velocidadeRotacao = 45f;
public WheelCollider[] rodasMotores;
public WheelCollider[] rodasDirecionais;
public Transform[] rodasVisuaisMotores;
public Transform[] rodasVisuaisDirecionais;
private Rigidbody rb;
private float inputFrente = 0f;
private float inputDirecao = 0f;
// Botões da interface de usuário
public Button botaoFrente;
public Button botaoTras;
public Button botaoEsquerda;
public Button botaoDireita;
private void Start()
{
rb = GetComponent<Rigidbody>();
rb.mass = 1500f;
// Conectando eventos aos botões
AddEvent(botaoFrente, MoverParaFrente, PararFrente);
AddEvent(botaoTras, MoverParaTras, PararFrente);
AddEvent(botaoEsquerda, RotacionarEsquerda, PararDirecao);
AddEvent(botaoDireita, RotacionarDireita, PararDirecao);
}
private void Update()
{
AtualizarRodasVisuais(rodasMotores, rodasVisuaisMotores);
AtualizarRodasVisuais(rodasDirecionais, rodasVisuaisDirecionais);
}
private void FixedUpdate()
{
foreach (WheelCollider roda in rodasMotores)
{
if (inputFrente == 0)
{
roda.motorTorque = 0f;
roda.brakeTorque = forcaFreio;
}
else
{
roda.brakeTorque = 0f;
roda.motorTorque = inputFrente * velocidade;
}
}
foreach (WheelCollider roda in rodasDirecionais)
{
roda.steerAngle = inputDirecao * velocidadeRotacao;
}
}
private void MoverParaFrente()
{
inputFrente = 1f;
}
private void MoverParaTras()
{
inputFrente = -1f;
}
private void RotacionarEsquerda()
{
inputDirecao = -1f;
}
private void RotacionarDireita()
{
inputDirecao = 1f;
}
private void PararFrente()
{
inputFrente = 0f;
}
private void PararDirecao()
{
inputDirecao = 0f;
}
private void AtualizarRodasVisuais(WheelCollider[] rodas, Transform[] visuais)
{
for (int i = 0; i < rodas.Length; i++)
{
Vector3 posicao;
Quaternion rotacao;
rodas[i].GetWorldPose(out posicao, out rotacao);
visuais[i].position = posicao;
visuais[i].rotation = rotacao;
}
}
private void AddEvent(Button botao, System.Action pointerDownAction, System.Action pointerUpAction)
{
EventTrigger trigger = botao.gameObject.AddComponent<EventTrigger>();
// PointerDown
EventTrigger.Entry pointerDownEntry = new EventTrigger.Entry();
pointerDownEntry.eventID = EventTriggerType.PointerDown;
pointerDownEntry.callback.AddListener((data) => { pointerDownAction(); });
trigger.triggers.Add(pointerDownEntry);
// PointerUp
EventTrigger.Entry pointerUpEntry = new EventTrigger.Entry();
pointerUpEntry.eventID = EventTriggerType.PointerUp;
pointerUpEntry.callback.AddListener((data) => { pointerUpAction(); });
trigger.triggers.Add(pointerUpEntry);
}
}
PS: usei o GPT "preciso controlar esse script por botoes".
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; // Necessário para usar PointerDown e PointerUp
public class CaminhaoController : MonoBehaviour
{
public float velocidade = 3000f;
public float forcaFreio = 8000f;
public float velocidadeRotacao = 45f;
public WheelCollider[] rodasMotores;
public WheelCollider[] rodasDirecionais;
public Transform[] rodasVisuaisMotores;
public Transform[] rodasVisuaisDirecionais;
private Rigidbody rb;
private float inputFrente = 0f;
private float inputDirecao = 0f;
// Botões da interface de usuário
public Button botaoFrente;
public Button botaoTras;
public Button botaoEsquerda;
public Button botaoDireita;
private void Start()
{
rb = GetComponent<Rigidbody>();
rb.mass = 1500f;
// Conectando eventos aos botões
AddEvent(botaoFrente, MoverParaFrente, PararFrente);
AddEvent(botaoTras, MoverParaTras, PararFrente);
AddEvent(botaoEsquerda, RotacionarEsquerda, PararDirecao);
AddEvent(botaoDireita, RotacionarDireita, PararDirecao);
}
private void Update()
{
AtualizarRodasVisuais(rodasMotores, rodasVisuaisMotores);
AtualizarRodasVisuais(rodasDirecionais, rodasVisuaisDirecionais);
}
private void FixedUpdate()
{
foreach (WheelCollider roda in rodasMotores)
{
if (inputFrente == 0)
{
roda.motorTorque = 0f;
roda.brakeTorque = forcaFreio;
}
else
{
roda.brakeTorque = 0f;
roda.motorTorque = inputFrente * velocidade;
}
}
foreach (WheelCollider roda in rodasDirecionais)
{
roda.steerAngle = inputDirecao * velocidadeRotacao;
}
}
private void MoverParaFrente()
{
inputFrente = 1f;
}
private void MoverParaTras()
{
inputFrente = -1f;
}
private void RotacionarEsquerda()
{
inputDirecao = -1f;
}
private void RotacionarDireita()
{
inputDirecao = 1f;
}
private void PararFrente()
{
inputFrente = 0f;
}
private void PararDirecao()
{
inputDirecao = 0f;
}
private void AtualizarRodasVisuais(WheelCollider[] rodas, Transform[] visuais)
{
for (int i = 0; i < rodas.Length; i++)
{
Vector3 posicao;
Quaternion rotacao;
rodas[i].GetWorldPose(out posicao, out rotacao);
visuais[i].position = posicao;
visuais[i].rotation = rotacao;
}
}
private void AddEvent(Button botao, System.Action pointerDownAction, System.Action pointerUpAction)
{
EventTrigger trigger = botao.gameObject.AddComponent<EventTrigger>();
// PointerDown
EventTrigger.Entry pointerDownEntry = new EventTrigger.Entry();
pointerDownEntry.eventID = EventTriggerType.PointerDown;
pointerDownEntry.callback.AddListener((data) => { pointerDownAction(); });
trigger.triggers.Add(pointerDownEntry);
// PointerUp
EventTrigger.Entry pointerUpEntry = new EventTrigger.Entry();
pointerUpEntry.eventID = EventTriggerType.PointerUp;
pointerUpEntry.callback.AddListener((data) => { pointerUpAction(); });
trigger.triggers.Add(pointerUpEntry);
}
}
PS: usei o GPT "preciso controlar esse script por botoes".
Re: (ajuda) movimentacao de caminhao UI
Meu nivel de programação é beem basico, então o GPT tá me ajudando muito nos codes.
Re: (ajuda) movimentacao de caminhao UI
vo testar, mais eu acho que vai funcionar sim!
JaoGrilo12345- Iniciante
- PONTOS : 25
REPUTAÇÃO : 0
Respeito as regras :
Re: (ajuda) movimentacao de caminhao UI
funcionou, muito obrigado mn !!!!!
JaoGrilo12345- Iniciante
- PONTOS : 25
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» (DÚVIDA) AJUDA NA MOVIMENTAÇÂO
» Ajuda Script Movimentação
» [ajuda] Movimentação 3° third person
» AJUDA COM MOVIMENTAÇAO DE ARMAS
» Preciso de ajuda com um script de movimentação !
» Ajuda Script Movimentação
» [ajuda] Movimentação 3° third person
» AJUDA COM MOVIMENTAÇAO DE ARMAS
» Preciso de ajuda com um script de movimentação !
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos