Como fazer um objeto dar dano contínuo quando encostar nele?
+3
JulioWinchester
Micco
Paula
7 participantes
Página 1 de 1
Como fazer um objeto dar dano contínuo quando encostar nele?
Alguém sabe como fazer o personagem tomar dano a cada segundo que ele permanecer em contato com um objeto? O máximo que consegui foi fazer um objeto que dá dano apenas uma vez e se destrói logo após o player encostar (usando o Is Trigger, Box Collider), e eu precisaria que o objeto não se destruísse.
Paula- Iniciante
- PONTOS : 1496
REPUTAÇÃO : 0
Respeito as regras :
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
Usa o laço while, se não souber como fazer manda o código que a gente te ajuda.
Micco- MembroAvançado
- PONTOS : 1790
REPUTAÇÃO : 17
Áreas de atuação : C#, GDScript, HTML e CSS.
Respeito as regras :
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
Então, ainda não sei direito como fazer, comecei na unity essa semana.
Até agora só escrevi isso no script do objeto:
Até agora só escrevi isso no script do objeto:
- Código:
[color=#0000ff][font=Consolas][size=13]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Cubo2 : MonoBehaviour
{
public Slider vidaPlayer;
private void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
vidaPlayer.value--;
}
}
}
[/size][/font][/color]
Paula- Iniciante
- PONTOS : 1496
REPUTAÇÃO : 0
Respeito as regras :
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
tenta fazer isso
- Código:
public float vida = 5;
vidaPlayer.value -= Time.deltaTime * vida;
JulioWinchester- MembroAvançado
- PONTOS : 2093
REPUTAÇÃO : 48
Idade : 20
Áreas de atuação : https://linktr.ee/juliopepe
Respeito as regras :
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
Tentei mas não rolou, o objeto não permanece na cena
Paula- Iniciante
- PONTOS : 1496
REPUTAÇÃO : 0
Respeito as regras :
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
n entendi o q vc quer fazer, pode explicar melhor ou mandar o codigo completo? fica mais facil de ajudar
JulioWinchester- MembroAvançado
- PONTOS : 2093
REPUTAÇÃO : 48
Idade : 20
Áreas de atuação : https://linktr.ee/juliopepe
Respeito as regras :
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
ue mas não tem um destroy no objeto '-'
o player deve estar destruindo ele, sem o codigo do player junto com do objeto fica meio no escuro de entender mesmo, mas ja tentou OnTriggerStay?
o player deve estar destruindo ele, sem o codigo do player junto com do objeto fica meio no escuro de entender mesmo, mas ja tentou OnTriggerStay?
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
Paula escreveu:Então, ainda não sei direito como fazer, comecei na unity essa semana.
Até agora só escrevi isso no script do objeto:
- Código:
[color=#0000ff][font=Consolas][size=13]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Cubo2 : MonoBehaviour
{
public Slider vidaPlayer;
private void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
vidaPlayer.value--;
}
}
}
[/size][/font][/color]
Recomendo usar recursividade e loops no Update, em vez de colocar no OnTriggerEnter. A lógica fica melhor, se no OnTrigger, você detectar apenas o início e fim do comando de colisão. Por exemplo:
A - Crie uma função que da dano no player e tire a lógica do OnTriggerEnter
B - Crie um boolean para o status de estaCollidindo(isColliding) = Sim ou Não para salvar quando estiver colidindo ou não e puder ser usado no Update()
C - No OnTriggerEnter, ative o boolean e adicione um OnTriggerExit para desativar assim que sair do contato(esse será a função dos OnTrigger)
D - No Update() faça um tipo de "recursividade" e um contador em loop, para que toda vez que atinja um certo tempo, ele chame a função A. Dessa forma, toda vez que atingir, por exemplo, 1 segundo, ele chamará a função que da o dano e recomeça o loop de novo conforme necessário, até sair do contato e o boolean B desative.
Exemplo de código:
- Código:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Cubo2 : MonoBehaviour
{
public Slider vidaPlayer;
public float maxTimeToDamage = 1;
private float currentTimeToDamage = 0;
private bool isColliding = false;
void Update(){
if (isColliding){
if(currentTimeToDamage >= maxTimeToDamage){
DamagePlayer();
currentTimeToDamage = 0;
}else
currentTimeToDamage += Time.deltaTime;
}
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
isColliding = true;
}
}
void OnTriggerExit(Collider other){
if (other.tag == "Player")
{
isColliding = false;
}
}
void DamagePlayer(){
vidaPlayer.value--;
}
}
Esse código acima não foi testado, pode não funcionar, foi apenas um exemplo para se localizar melhor.
Com essas dicas, conseguirá o que quer.
Att,
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
essa lógica funciona paro o player perder vida quando colide com um sistema de particulas?
preciso colocar um collider nas particulas?
preciso colocar um collider nas particulas?
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: Como fazer um objeto dar dano contínuo quando encostar nele?
O problema é que você está usando a OnTriggerEnter, ela só é executada quando você encosta no collider, você pode substituir pela OnTriggerStay, essa sim vai ser executada enquanto você permanecer em contato com o objeto que causa dano.
Sobre o objeto não ser destruido, aí já não tem a ver com os triggers, e sim seu script, em algum lugar deve haver uma linha assim
"Destroy(.....gameobject)";
basta remover.
Dá sim pra checar colisão com particulas, mas acredito que seja desnecessário, se seu objeto que causa dano é um fogo por exemplo, basta usar um colisor comum com a forma aproximada do objeto que já vai ficar bom o suficiente.
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnParticleCollision.html
Sobre o objeto não ser destruido, aí já não tem a ver com os triggers, e sim seu script, em algum lugar deve haver uma linha assim
"Destroy(.....gameobject)";
basta remover.
Dá sim pra checar colisão com particulas, mas acredito que seja desnecessário, se seu objeto que causa dano é um fogo por exemplo, basta usar um colisor comum com a forma aproximada do objeto que já vai ficar bom o suficiente.
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnParticleCollision.html
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Tópicos semelhantes
» -[COMO FAZER UM CUBO PARA ATIVAR UM CANVAS QUANDO O PLAYER ENCOSTA NELE?]-
» como fazer o personagen quando colidir em um objeto ele carregar outra cena furum {FECHADO}
» [DÚVIDA] FAZER OBJETO GIRAR EM TORNO DE SI QUANDO CLICAR E ARRASTAR O OBJETO PARA OS LADOS
» Como fazer com que uma animaçao inicie toda vez quando o objeto colide???
» Como fazer um sistema de dano em objetos
» como fazer o personagen quando colidir em um objeto ele carregar outra cena furum {FECHADO}
» [DÚVIDA] FAZER OBJETO GIRAR EM TORNO DE SI QUANDO CLICAR E ARRASTAR O OBJETO PARA OS LADOS
» Como fazer com que uma animaçao inicie toda vez quando o objeto colide???
» Como fazer um sistema de dano em objetos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos