[RESOLVIDO] sistema de dano particular
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] sistema de dano particular
Olá pessoal tudo ok ?
entao... estou com um pequeno problema de falta de conhecimento kkk e por mais q eu pesquise mesmo achando algo referente ao meu problema eu n consigo aplicar ou entender de fato como é feito!
o problema é o seguinte... eu preciso gerar um código de dano para as tropas porem quando faço isso por colisão eles dao dano em area aplicando dano a todos os inimigos envolta por onde o colisor passa...
eu tentei usar o método de acessar o script inimigo e tirar a vida dele la porém para acessa eu coloco a variável (vida) em modo "statico" é ai q vem o outro problema... todos os minions com esse script possuem essa variavel statica e entao são afetados mesmo q n estejam em batalha.... alguém pode me ajuda a bolar um esquema para fazer os inimigos trocar dano sem q apliquem em area ow q não aplique esse dano em todos os inimigos q possuem o mesmo script ?
desde ja Agradeço !
entao... estou com um pequeno problema de falta de conhecimento kkk e por mais q eu pesquise mesmo achando algo referente ao meu problema eu n consigo aplicar ou entender de fato como é feito!
o problema é o seguinte... eu preciso gerar um código de dano para as tropas porem quando faço isso por colisão eles dao dano em area aplicando dano a todos os inimigos envolta por onde o colisor passa...
eu tentei usar o método de acessar o script inimigo e tirar a vida dele la porém para acessa eu coloco a variável (vida) em modo "statico" é ai q vem o outro problema... todos os minions com esse script possuem essa variavel statica e entao são afetados mesmo q n estejam em batalha.... alguém pode me ajuda a bolar um esquema para fazer os inimigos trocar dano sem q apliquem em area ow q não aplique esse dano em todos os inimigos q possuem o mesmo script ?
desde ja Agradeço !
hellside- Membro
- PONTOS : 1850
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
Mas se você já tiver "acertando" o inimigo, ou seja, jogando um efeito de magia ou qualquer outra coisa do tipo, deve tá usando colisão, é só pegar o componente (script) via GetComponent, acessar a vida (public ao invés de static) e remover a vida apenas em quem foi atingido.
seria tipo, hit.transform.getcomponent<script>().vida -= valor de dano;
Desde que seu MMO não tenha milhares de minions, não deve ter problema de desempenho por conta disso
seria tipo, hit.transform.getcomponent<script>().vida -= valor de dano;
Desde que seu MMO não tenha milhares de minions, não deve ter problema de desempenho por conta disso
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
@Fagner Isso não funcionaria, teoricamente parecia funcionar mas como todos inimigos estão dentro do collider ele irá pegar o script de todos, fiz um teste e ele deu dano em todos inimigos.
Código usado:
Código usado:
- Código:
private void OnTriggerEnter(Collider other) {
int life = other.gameObject.GetComponent<NewBehaviourScript>().life--;
Debug.Log(other.gameObject.name + "<color=red> Life:</color> " + life);
}
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
Então o problema é mais sobre pegar um inimigo específico, o pouco que eu já vi sobre jogos desse estilo, eles utilizam um sistema de hash baseado na posição pra limitar o que é visto por cada unidade, apenas os proximos com a mesma hash aparecem numa lista, depois dessa lista (bem menor que o todo) é possivel escolher o inimigo pra dar dano, se é uma IA, ele vai ter que escolher um inimigo aleatório pra dar dano, ele não vai simplesmente jogar um poder aleatório numa posição aleatória e torcer pra acertar, então aqui temos um alvo, basta acessar o script dele pra remover a vida.
O conceito é esse aqui:
https://www.gamedev.net/articles/programming/general-and-gameplay-programming/spatial-hashing-r2697/
Note que a intenção é apenas limitar o escopo da pesquisa, se você tiver 1000 minions, mas só 5 estiver perto, é pesado checar todos, com isso você acessa os 5 mais rapido, a partir dai basta escolher um e dar o dano.
O conceito é esse aqui:
https://www.gamedev.net/articles/programming/general-and-gameplay-programming/spatial-hashing-r2697/
Note que a intenção é apenas limitar o escopo da pesquisa, se você tiver 1000 minions, mas só 5 estiver perto, é pesado checar todos, com isso você acessa os 5 mais rapido, a partir dai basta escolher um e dar o dano.
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
massa legal... a primeira dica foi util pois eu uso esse cogido para detectar inimigo;
- Código:
Collider[] hits = Physics.OverlapSphere(transform.position, estaNaVisaoMinion);
foreach (Collider hit in hits)
{
if (hit.tag == "minionRed")
{
}
}
- Código:
hit.transform.getcomponent<script>().vida -= valor de dano;
hellside- Membro
- PONTOS : 1850
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
n tem muita coisa só a vida dele mesmo e o comando para caso a vida chega a zero... o grande problema mesmo e acessar essa variavel em particular pelo minion q estiver batendo.
hellside- Membro
- PONTOS : 1850
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
Uma duvida, este ataque contra o minion ele é instantaneo, como uma magia, ou ele é um ataque automatico em loop?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
entao... é um atack automatico em loop... atack mele... ele fica batendo em loop eu consegui resolver da seguinte forma .Pokedlg escreveu:Uma duvida, este ataque contra o minion ele é instantaneo, como uma magia, ou ele é um ataque automatico em loop?
- Código:
if (distanciaMinion <= rangeDeAtackMinion)//distancia para atacar//
{
nav_Agent.destination = transform.position;
anima_minion.SetBool("perseguir", false);
anima_minion.SetBool("atacar", true);
var rotation = Quaternion.LookRotation(frente1.transform.position - transform.position);
rotation.x = 0;
rotation.z = 0;
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Olhar_alvo);
if (velo_hit >=0)
{
anima_minion.SetBool("aguardar", true);
velo_hit += Time.deltaTime;
if (velo_hit >= calibradorDano)//momento em q o minion reseta seu auto atack//
{
if (velo_hit >= 1.4f)//momento exato do hit//
{
frente1.transform.GetComponent<MinionBlueStatus>().life -= dano;//dano q o minion ira aplicar no inimigo//
}
anima_minion.SetBool("atacar", false);
anima_minion.SetBool("aguardar", true);
velo_hit = 0;
}
}
hellside- Membro
- PONTOS : 1850
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
o mais legal de tudo é q eu n to usando colisores isso foi o melhor de tudo.hellside escreveu:entao... é um atack automatico em loop... atack mele... ele fica batendo em loop eu consegui resolver da seguinte forma .Pokedlg escreveu:Uma duvida, este ataque contra o minion ele é instantaneo, como uma magia, ou ele é um ataque automatico em loop?
- Código:
if (distanciaMinion <= rangeDeAtackMinion)//distancia para atacar//
{
nav_Agent.destination = transform.position;
anima_minion.SetBool("perseguir", false);
anima_minion.SetBool("atacar", true);
var rotation = Quaternion.LookRotation(frente1.transform.position - transform.position);
rotation.x = 0;
rotation.z = 0;
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Olhar_alvo);
if (velo_hit >=0)
{
anima_minion.SetBool("aguardar", true);
velo_hit += Time.deltaTime;
if (velo_hit >= calibradorDano)//momento em q o minion reseta seu auto atack//
{
if (velo_hit >= 1.4f)//momento exato do hit//
{
frente1.transform.GetComponent<MinionBlueStatus>().life -= dano;//dano q o minion ira aplicar no inimigo//
}
anima_minion.SetBool("atacar", false);
anima_minion.SetBool("aguardar", true);
velo_hit = 0;
}
}
hellside- Membro
- PONTOS : 1850
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] sistema de dano particular
para quem tentar usar esse codigo eu acabei de melhorar um pouco qualquer coisa chama no privado ow discord: Spark#5380
hellside- Membro
- PONTOS : 1850
REPUTAÇÃO : 17
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Tomar dano do inimigo e causar dano no mesmo
» [RESOLVIDO] Dano no inimigo
» Tiro sistema dano
» [RESOLVIDO] Problema com dano aos inimigos
» [RESOLVIDO] tirar dano com a animacao
» [RESOLVIDO] Dano no inimigo
» Tiro sistema dano
» [RESOLVIDO] Problema com dano aos inimigos
» [RESOLVIDO] tirar dano com a animacao
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos