[pedido] modificação no script de gasoina
3 participantes
Página 1 de 1
[pedido] modificação no script de gasoina
gente preciso que me ajudem a modificar esse script de gasolina que eu peguei aki no forum queri fazer um sistema para quando a gasolina acabar o meu carro não andar
script do carro:
script da gasolina
script do carro:
- Código:
using UnityEngine;
using System.Collections;
public class controle : MonoBehaviour {
public Transform RotacaoDoCarro;
public Transform[] MeshRodas;
public WheelCollider[] ColisorRodas;
public float torque = 1000, pesoVeiculo = 1500;
private float angulo, direcao;
private Rigidbody corpoRigido;
public bool CarroLigado;
void Start()
{
corpoRigido = GetComponent<Rigidbody>();
corpoRigido.mass = pesoVeiculo;
CarroLigado = false;
}
void Update()
{
if (Input.GetKeyDown (KeyCode.E)) {
CarroLigado = true;
}
if (Input.GetKeyDown (KeyCode.F)) {
CarroLigado = false;
}
if (CarroLigado == true) {
direcao = Input.GetAxis ("Horizontal");
if (Input.GetAxis ("Horizontal") > 0.7f || Input.GetAxis ("Horizontal") < -0.7f) {
angulo = Mathf.Lerp (angulo, direcao, Time.deltaTime * 4);
} else {
angulo = Mathf.Lerp (angulo, direcao, Time.deltaTime * 2);
}
}
}
void FixedUpdate()
{
//
ColisorRodas [2].motorTorque = Input.GetAxis ("Vertical") * torque;
ColisorRodas [3].motorTorque = Input.GetAxis ("Vertical") * torque;
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;
}
}
}
script da gasolina
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Gasolina : MonoBehaviour {
// QUANTIDADE MAXIAM DE GASOLINA
[SerializeField]private float maxFuel = 100f;
// QUANTIDADE DE GASOLINA ATUAL
public float currentFuel{ get; private set;}
// CONSUME DE GASOLINA POR DISTANCIA
[SerializeField]private float consume = 10f;
// ULTIMA POSICAO
private Vector3 lastPos;
// POSICAO ATUAL
private Vector3 currentPos;
// DISTANCIA
private float distance;
// ESTA VAZIO?
public bool isEmpty{ get; private set;}
// DELEGATE PARA O EVENTO DO CARRO
public delegate void FuelEvent(GameObject source);
// EVENTO QUANDO ACABAR A GASOLINA
public static event FuelEvent onFuelEmpty;
public Image barraGasolina;
void Awake(){
// SETA OS VALORES PADRAO PARA AS VARIAVEIS
lastPos = transform.position;
currentPos = transform.position;
distance = 0;
currentFuel = maxFuel;
isEmpty = false;
barraGasolina.type = Image.Type.Filled;
barraGasolina.fillMethod = Image.FillMethod.Horizontal;
barraGasolina.fillOrigin = (int)Image.OriginHorizontal.Left;
//ESCREVE O METODO PARA SER EXECUTADO QUANDO O EVENTO FOR CHAMADO
onFuelEmpty += OnFuelEmpty_callback;
}
void FixedUpdate()
{
// ATUALIZA POSICAO ATUAL
currentPos = transform.position;
// SE ESTA VAZIO NAO FAZ NADA
if (isEmpty)
{
}
// CASO CONTRARIO, REDUZIR GASOLINA
else
{
// CALCULA A DISTANCIA
distance = Vector3.Distance(currentPos,lastPos);
// REDUZ A GASOLINA PELA MULTIPLICACAO DA DISTANCIA VEZES CONSUMO
currentFuel -= distance * consume * Time.fixedDeltaTime;
// CERTIFCAR QUE A GASOLINA NAO PASSE DO VALOR MAXIMO, NEM DO VALOR MINIMO
currentFuel = Mathf.Clamp(currentFuel,0,maxFuel);
// SE ACABOU GASOLINA
if (currentFuel == 0)
{
// ENTAO TA VAZIO
isEmpty = true;
// EXECUTAMOS NOSSO EVENTO
onFuelEmpty(gameObject);
}
}
// ATUALIZA POSICAO ATUAL
lastPos = currentPos;
barraGasolina.fillAmount = Mathf.Clamp ((currentFuel / maxFuel), 0, 1);
}
// METODO PARA ADICIONAR GASOLINA
public void RestoreFuell(float ammount)
{
// ADICIONA A QUANTIDADE DE GASOLINA PASSADA
currentFuel += ammount;
// CERTIFICA QUE O VALOR NAO PASSE NEM DO MINIMO NEM DO MAXIMO
currentFuel = Mathf.Clamp(currentFuel,0,maxFuel);
// SE GASOLINA FOR MAIOR QUE 0 ENTAO NAO ESTA VAZIO E VICE VERSA
isEmpty = currentFuel == 0 ? true : false;
}
// METODO QUE VAI SER EXECUTADO QUANDO O EVENTO DE ACABAR GASOLINA ATIVAR
void OnFuelEmpty_callback(GameObject source)
{
// VERIFICAR SE É ESSE O OBJETO QUE DESENCADEO O EVENTO
if (source == gameObject) {
print ("Acabou a gasolina do veiculo: " + source.name);
}
}
}
Henrique0102- Membro
- PONTOS : 3026
REPUTAÇÃO : 3
Respeito as regras :
Re: [pedido] modificação no script de gasoina
O jeito mais facil(não exatamente o melhor) seria usar um GetComponent e desativar o script de controle, nisso estou considerando que ambos scripts estão no mesmo objeto,
So modificar o metodo OnFuelEmpty_callback com algo assim:
So modificar o metodo OnFuelEmpty_callback com algo assim:
- Código:
void OnFuelEmpty_callback(GameObject source)
{
// VERIFICAR SE É ESSE O OBJETO QUE DESENCADEO O EVENTO
if (source == gameObject) {
print ("Acabou a gasolina do veiculo: " + source.name);
// PEGA O COMPONENTE DE CONTROLE DO VEICULO
controle c = GetComponent<controle>();
// DESATIVA
c.enabled = false;
}
}
Re: [pedido] modificação no script de gasoina
Acho que ficaria melhor se você simplesmente desabilitasse o bool da script. "CarroLigado = false"; Caso você queria fazer alguma coisa dentro do script do carro que tenha ação mesmo depois de acabar a gasolina a opção do Manawydan não é muito valida.
Goustkor- Avançado
- PONTOS : 3074
REPUTAÇÃO : 18
Respeito as regras :
Tópicos semelhantes
» (pedido) script para ativar física
» Problemas com modificação de bone Via Script
» [PEDIDO] Script de Atirar
» Pedido de Script de Crosbow
» [Pedido] Script Texto Ao "Mirar" em um objeto
» Problemas com modificação de bone Via Script
» [PEDIDO] Script de Atirar
» Pedido de Script de Crosbow
» [Pedido] Script Texto Ao "Mirar" em um objeto
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos