Mudar cor ao tomar dano
4 participantes
Página 1 de 1
Mudar cor ao tomar dano
Boa tarde pessoal,
como eu faço aquele efeito de quando um objeto é golpeado por outro, por exemplo, uma nave toma um tiro, muda a cor do objeto?
a mudança de cor ocorre quando o tiro apenas acerta, e como são muitos tiros acertando dá esse efeito que a cor está piscando, muito comum nos jogos shmups de nave como no video em anexo:
qual script para fazer isso?
agradeço desde já!!
como eu faço aquele efeito de quando um objeto é golpeado por outro, por exemplo, uma nave toma um tiro, muda a cor do objeto?
a mudança de cor ocorre quando o tiro apenas acerta, e como são muitos tiros acertando dá esse efeito que a cor está piscando, muito comum nos jogos shmups de nave como no video em anexo:
qual script para fazer isso?
agradeço desde já!!
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Mudar cor ao tomar dano
Bom dia,
qual o script para alterar a cor do inimigo quando ele tomar dano, como ocorre com o cavalo marinho e os inimigos no video?
queria alterar para a cor branca mesmo.
se for preciso postar o script de saude dos inimigos, posto aqui depois.
qual o script para alterar a cor do inimigo quando ele tomar dano, como ocorre com o cavalo marinho e os inimigos no video?
queria alterar para a cor branca mesmo.
se for preciso postar o script de saude dos inimigos, posto aqui depois.
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Mudar cor ao tomar dano
Seu jogo é 3D ou 2D?
Se for 3D, você pode duplicar o mesh e colocar um material branco nele, com transparência, ou seja, criar uma textura de efeito. Esse mesh de efeito ficaria oculto e você chamaria um método de mostrar ele e ocultar em x segundos.
Se for 2D, basta criar um método de mudar a cor do sprite. Se não ficar legal, você pode colocar outro objeto como na solução 3D, só que um sprite com o efeito desejado e deixar como filho do inimigo e acionar ele quando sofrer dano.
Se for 3D, você pode duplicar o mesh e colocar um material branco nele, com transparência, ou seja, criar uma textura de efeito. Esse mesh de efeito ficaria oculto e você chamaria um método de mostrar ele e ocultar em x segundos.
Se for 2D, basta criar um método de mudar a cor do sprite. Se não ficar legal, você pode colocar outro objeto como na solução 3D, só que um sprite com o efeito desejado e deixar como filho do inimigo e acionar ele quando sofrer dano.
wischutz- Membro
- PONTOS : 3573
REPUTAÇÃO : 15
Respeito as regras :
Re: Mudar cor ao tomar dano
Fala wischutz! o jogo é em 2D.
me explique melhor como fazer isso.
essa imagem é um print do prefab de uma nave inimiga com seus componentes, é o prefab Inimigo2 na aba Hierachy.
ele tem um script SaudeInimigos como pode ver na imgem, que é o que gerencia a tomada de dano. segue o script:
e que outro objeto eu coloco como filho do Inimigo2?
veja que o prefab não tem mesh como componente, apenas o Sprite Renderer, então o que posso mudar nele?
me explique melhor como fazer isso.
essa imagem é um print do prefab de uma nave inimiga com seus componentes, é o prefab Inimigo2 na aba Hierachy.
ele tem um script SaudeInimigos como pode ver na imgem, que é o que gerencia a tomada de dano. segue o script:
- Código:
using UnityEngine;
using System.Collections;
public class SaudeInimigos : MonoBehaviour {
public int hp = 1;
public int scoreValue = 30; // A quantidade adicionada à pontuação do jogador quando o inimigo morrer.
public AudioClip deathClip; // O som para tocar quando o inimigo morrer.
private AudioSource enemyAudio; // Referência ao audio source.
void Awake() {
// Configurando as referências.
enemyAudio = GetComponent<AudioSource>();
}
public void Damage(int damageCount) {
hp -= damageCount;
if (hp <= 0) {
//Cria o efeito de partícula.
EfeitoEspecialScript.Instance.ExplEnemy1(transform.position);
Destroy(gameObject);
ScoreManager.score += scoreValue; // Aumentar a pontuação por valor pontuação do inimigo.
Death(); // O inimigo está morto.
}
}
void Death() {
// Altera o clipe de áudio da fonte de áudio para o clipe de morte e o reproduz (isto irá parar o clipe de jogo machucado).
enemyAudio.clip = deathClip;
}
}
e que outro objeto eu coloco como filho do Inimigo2?
veja que o prefab não tem mesh como componente, apenas o Sprite Renderer, então o que posso mudar nele?
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Mudar cor ao tomar dano
Opa!
Como é 2d, pode usar essa versão alterando a cor para vermelho, já que não dá pra "branquear" o sprite:
Se não quiser o efeito em vermelho, pode testar outras cores.
Se quiser fazer um efeito mais parecido com o do vídeo, pode criar uma nova sprite como no efeito (o shape do inimigo, branco e com transparência) e coloca como filho do inimigo e zera o transform, para ficar na mesma posição. Lembre-se de colocar a order in layer do filho maior que o pai, pois o filho deve se sobrepôr ao pai. Aí assina o filho nessa versão:
Espero que te ajude!
Como é 2d, pode usar essa versão alterando a cor para vermelho, já que não dá pra "branquear" o sprite:
- Código:
using UnityEngine;
using System.Collections;
public class SaudeInimigos : MonoBehaviour
{
public int hp = 1;
public int scoreValue = 30; // A quantidade adicionada à pontuação do jogador quando o inimigo morrer.
public AudioClip deathClip; // O som para tocar quando o inimigo morrer.
private AudioSource enemyAudio; // Referência ao audio source.
SpriteRenderer rend;
void Awake()
{
// Configurando as referências.
enemyAudio = GetComponent<AudioSource>();
rend = GetComponent<SpriteRenderer>();
}
public void Damage(int damageCount)
{
hp -= damageCount;
MudaCor();
if (hp <= 0)
{
//Cria o efeito de partícula.
EfeitoEspecialScript.Instance.ExplEnemy1(transform.position);
Destroy(gameObject);
ScoreManager.score += scoreValue; // Aumentar a pontuação por valor pontuação do inimigo.
Death(); // O inimigo está morto.
}
}
void Death()
{
// Altera o clipe de áudio da fonte de áudio para o clipe de morte e o reproduz (isto irá parar o clipe de jogo machucado).
enemyAudio.clip = deathClip;
}
void MudaCor()
{
rend.color = Color.red;
Invoke("NormalizaCor", 0.5f); //tempo para voltar a cor normal
}
void NormalizaCor()
{
rend.color = Color.white;
}
}
Se não quiser o efeito em vermelho, pode testar outras cores.
Se quiser fazer um efeito mais parecido com o do vídeo, pode criar uma nova sprite como no efeito (o shape do inimigo, branco e com transparência) e coloca como filho do inimigo e zera o transform, para ficar na mesma posição. Lembre-se de colocar a order in layer do filho maior que o pai, pois o filho deve se sobrepôr ao pai. Aí assina o filho nessa versão:
- Código:
using UnityEngine;
using System.Collections;
public class SaudeInimigos : MonoBehaviour
{
public int hp = 1;
public int scoreValue = 30; // A quantidade adicionada à pontuação do jogador quando o inimigo morrer.
public AudioClip deathClip; // O som para tocar quando o inimigo morrer.
public GameObject efeitoFilho; // assina o filho que será o efeito
private AudioSource enemyAudio; // Referência ao audio source.
void Awake()
{
// Configurando as referências.
enemyAudio = GetComponent<AudioSource>();
efeitoFilho.SetActive(false);
}
public void Damage(int damageCount)
{
hp -= damageCount;
MostraEfeito();
if (hp <= 0)
{
//Cria o efeito de partícula.
EfeitoEspecialScript.Instance.ExplEnemy1(transform.position);
Destroy(gameObject);
ScoreManager.score += scoreValue; // Aumentar a pontuação por valor pontuação do inimigo.
Death(); // O inimigo está morto.
}
}
void Death()
{
// Altera o clipe de áudio da fonte de áudio para o clipe de morte e o reproduz (isto irá parar o clipe de jogo machucado).
enemyAudio.clip = deathClip;
}
void MostraEfeito()
{
efeitoFilho.SetActive(true);
Invoke("OcultaEfeito", 0.5f); //tempo para voltar ao normal
}
void OcultaEfeito()
{
efeitoFilho.SetActive(false);
}
}
Espero que te ajude!
wischutz- Membro
- PONTOS : 3573
REPUTAÇÃO : 15
Respeito as regras :
Re: Mudar cor ao tomar dano
valeu wischutz funcionou legal aqui!
eu tinha feito usando IEnumerator, funcionou só com uma nave inimiga e as outras não. Desse jeito que vc fez funciona com cada uma.
eu fiz parecido com o do video, tive que importar novamente a mesma imagem da nave só que antes de importar eu mudei a cor para branco usando o photoshop e mudei o nome da imagem.
então ficou duas imagens para o mesmo inimigo, aí a branca eu pus como filho do Inimigo2, mudando a Order in Layer como vc falou.
o problema é que vou encher o projeto de imagens brancas porque serão váaaaarios inimigos nas cenas. imagina uma imagem branca para cada um dos outros inimigos....
essa é a unica forma de fazer esse efeito para jogo 2D ou tem outra forma de fazer que não necessite importar outros sprites?
eu tinha feito usando IEnumerator, funcionou só com uma nave inimiga e as outras não. Desse jeito que vc fez funciona com cada uma.
eu fiz parecido com o do video, tive que importar novamente a mesma imagem da nave só que antes de importar eu mudei a cor para branco usando o photoshop e mudei o nome da imagem.
então ficou duas imagens para o mesmo inimigo, aí a branca eu pus como filho do Inimigo2, mudando a Order in Layer como vc falou.
o problema é que vou encher o projeto de imagens brancas porque serão váaaaarios inimigos nas cenas. imagina uma imagem branca para cada um dos outros inimigos....
essa é a unica forma de fazer esse efeito para jogo 2D ou tem outra forma de fazer que não necessite importar outros sprites?
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Mudar cor ao tomar dano
sera que nao teria como usar um elemento de mask branco para ser aplicado no objeto quando este perde vida?
Re: Mudar cor ao tomar dano
como faço esse mask branco?
é isso que substituiria importar varias imagens brancas?
é isso que substituiria importar varias imagens brancas?
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Mudar cor ao tomar dano
Eu só conheço o mask nativo do UI, mas acho que não rola em sprite.
Você pode usar um sprite branco genérico, tipo um círculo e usar o mesmo em todos.
Você pode usar um sprite branco genérico, tipo um círculo e usar o mesmo em todos.
wischutz- Membro
- PONTOS : 3573
REPUTAÇÃO : 15
Respeito as regras :
Re: Mudar cor ao tomar dano
Talvez o circulo branco em todos não acomode com a formas dos sprites, fique sobrando para fora, acho melhor deixar um sprite branco para cada inimigo mesmo, cada imagem branca será só alguns kbytes, não pesaria tanto.
mas como é este mask do UI?
mas como é este mask do UI?
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Mudar cor ao tomar dano
É esse aqui: https://www.youtube.com/watch?v=g3gpXmo8zRo
wischutz- Membro
- PONTOS : 3573
REPUTAÇÃO : 15
Respeito as regras :
Re: Mudar cor ao tomar dano
Qual shader você está usando para o material desse objeto que você quer trocar de cor?
Tópicos semelhantes
» Quais cuidados devo tomar ao trabalhar em dupla?
» Ao tomar dano o player dar um pulo / Knockback
» Unity Dano 2D
» Dano do player
» errro jogo 2d Fazendo o player tomar dano
» Ao tomar dano o player dar um pulo / Knockback
» Unity Dano 2D
» Dano do player
» errro jogo 2d Fazendo o player tomar dano
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos