Recarregar quando esta perto do objeto
3 participantes
Página 1 de 1
Recarregar quando esta perto do objeto
Tenho este codigo na minha mangueira, contudo estou a fazer o reload dentro da mangueira. Queria por o reload num objeto a parte para quando o player estivesse perto desse mesmo objeto a mangueira restabelecesse a quantidade de agua inicial. Como resolvo?
public class ReloadScript : MonoBehaviour
{
public float maxWater = 100;
public float currentWater;
public float reloadSpeed = 2f;
public Text waterLevelText;
public bool needReload;
// Start is called before the first frame update
void Start()
{
currentWater = maxWater;
}
// Update is called once per frame
void Update()
{
Reload();
//Recarrega a mangueira quando pressionado R
if (Input.GetKeyDown(KeyCode.R))
//A StartCoroutine pausa a execuçao e automaticamente retoma no proximo frame
StartCoroutine(ReloadHoze());
}
public void Reload()
{
//Recarrega quando a agua for =0
if (currentWater <= 0)
needReload = true;
waterLevelText.text = maxWater + ":" + currentWater + " Litros";
}
public IEnumerator ReloadHoze()
{
Debug.Log("Reload");
yield return new WaitForSeconds(reloadSpeed);
currentWater = maxWater;
needReload = false;
}
}
public class ReloadScript : MonoBehaviour
{
public float maxWater = 100;
public float currentWater;
public float reloadSpeed = 2f;
public Text waterLevelText;
public bool needReload;
// Start is called before the first frame update
void Start()
{
currentWater = maxWater;
}
// Update is called once per frame
void Update()
{
Reload();
//Recarrega a mangueira quando pressionado R
if (Input.GetKeyDown(KeyCode.R))
//A StartCoroutine pausa a execuçao e automaticamente retoma no proximo frame
StartCoroutine(ReloadHoze());
}
public void Reload()
{
//Recarrega quando a agua for =0
if (currentWater <= 0)
needReload = true;
waterLevelText.text = maxWater + ":" + currentWater + " Litros";
}
public IEnumerator ReloadHoze()
{
Debug.Log("Reload");
yield return new WaitForSeconds(reloadSpeed);
currentWater = maxWater;
needReload = false;
}
}
Joana- Avançado
- PONTOS : 1437
REPUTAÇÃO : 16
Respeito as regras :
Re: Recarregar quando esta perto do objeto
Já deu uma olhada sobre Triggers (OnTriggerEnter, OnTriggerStay, OnTriggerExit) nesse seu caso, eu faria pra se encostar no objeto (OnTriggerEnter) ele ativaria uma bool que eu usaria na checagem do reload, se apertar R e bool == True, recarrega a água.
Quando sair de perto do trigger (OnTriggerExit) você faz a bool ser falsa pra não recarregar de longe
Quando sair de perto do trigger (OnTriggerExit) você faz a bool ser falsa pra não recarregar de longe
Fagner- Moderador
- PONTOS : 4237
REPUTAÇÃO : 665
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Recarregar quando esta perto do objeto
- Código:
private void OnTriggerStay(Collider coll)
{
//verifica tag
if (coll.gameObject.CompareTag("Player"))
{
reload.needReload = true;
coll.gameObject.GetComponent<ReloadScript>().Reload();
coll.gameObject.GetComponent<ReloadScript>().ReloadHoze();
}
}
private void OnTriggerExit(Collider coll)
{
//verifica tag
if (coll.gameObject.CompareTag("Player"))
{
reload.needReload = false;
}
}
Joana- Avançado
- PONTOS : 1437
REPUTAÇÃO : 16
Respeito as regras :
Re: Recarregar quando esta perto do objeto
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ReloadScript : MonoBehaviour
{
public float maxWater = 100;
public float currentWater;
public float reloadSpeed = 2f;
public Text waterLevelText;
public bool needReload;
// Start is called before the first frame update
void Start()
{
currentWater = maxWater;
}
// Update is called once per frame
void Update()
{
Reload();
}
public void Reload()
{
//Recarrega quando a agua for =0
if (currentWater <= 0)
needReload = true;
waterLevelText.text = "Water Quantaty" + maxWater + ":" + currentWater + " Liters";
}
public IEnumerator ReloadHoze()
{
Debug.Log("Reload");
yield return new WaitForSeconds(reloadSpeed);
currentWater = maxWater;
needReload = false;
}
private void OnTriggerEnter(Collider coll)
{
//verifica tag
if (coll.gameObject.CompareTag("BocaDeIncendio"))
{
needReload = true;
Reload();
ReloadHoze();
}
}
public void OnTriggerExit(Collider collider)
{
if (collider.tag == "BocaDeIncendio")
{
needReload = false;
}
}
}
Joana- Avançado
- PONTOS : 1437
REPUTAÇÃO : 16
Respeito as regras :
Re: Recarregar quando esta perto do objeto
Eu estava pelo celular e não vi direito seu código, nesse ultimo que você postou, você está fazendo o reload se o objeto for o player e enquanto ele permanecer encostado na zona de recarga, pra fazer o que quer, basta incluir aquele if que checa se apertou R dentro dessa checagem
- Código:
{
//verifica tag
if (coll.gameObject.CompareTag("Player") && Input.GetKeyDown(Keycode.R))
{
reload.needReload = true;
coll.gameObject.GetComponent<ReloadScript>().Reload();
coll.gameObject.GetComponent<ReloadScript>().ReloadHoze();
}
}
private void OnTriggerExit(Collider coll)
{
//verifica tag
if (coll.gameObject.CompareTag("Player"))
{
reload.needReload = false;
}
}
Fagner- Moderador
- PONTOS : 4237
REPUTAÇÃO : 665
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Recarregar quando esta perto do objeto
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ReloadScript : MonoBehaviour
{
public float maxWater = 100;
public float currentWater;
public float reloadSpeed = 2f;
public Text waterLevelText;
public bool needReload;
// Start is called before the first frame update
void Start()
{
currentWater = maxWater;
}
// Update is called once per frame
void Update()
{
Reload();
}
public void Reload()
{
//Recarrega quando a agua for =0
if (currentWater <= 0)
needReload = true;
waterLevelText.text = "Water Quantaty" + maxWater + ":" + currentWater + " Liters";
}
public IEnumerator ReloadHoze()
{
Debug.Log("Reload");
yield return new WaitForSeconds(reloadSpeed);
currentWater = maxWater;
needReload = false;
}
private void OnTriggerEnter(Collider coll)
{
//verifica tag
if (coll.gameObject.CompareTag("BocaDeIncendio"))
{
needReload = true;
//Recarrega a mangueira quando pressionado R
if (Input.GetKeyDown(KeyCode.R))
//A StartCoroutine pausa a execuçao e automaticamente retoma no proximo frame
StartCoroutine(ReloadHoze());
}
}
public void OnTriggerExit(Collider collider)
{
if (collider.tag == "BocaDeIncendio")
{
needReload = false;
}
}
}
Joana- Avançado
- PONTOS : 1437
REPUTAÇÃO : 16
Respeito as regras :
Re: Recarregar quando esta perto do objeto
@Joana Você colocou o Box Collider e ativou Is Trigger no objeto?
Pokedlg- ProgramadorMaster
- PONTOS : 2133
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Tópicos semelhantes
» [DÚVIDA] SOM SAIR QUANDO CHEGAR PERTO DE UM OBJETO
» Quando o objeto esta sendo gerado ele esta rotacionando
» Tecla só funcionar quando for clicada perto de um determinado objeto.
» Como apagar Proceduram material da pista, quando for recarregar a cena?
» Pegar objeto ao pressionar uma tecla quando estiver muito perto dele
» Quando o objeto esta sendo gerado ele esta rotacionando
» Tecla só funcionar quando for clicada perto de um determinado objeto.
» Como apagar Proceduram material da pista, quando for recarregar a cena?
» Pegar objeto ao pressionar uma tecla quando estiver muito perto dele
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos