[RESOLVIDO] Arremessar uma granada(2D)
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Arremessar uma granada(2D)
Tudo bem, gente?
Alguém poderia me dar uma luz de como funcionaria o arremesso de uma granada em 2D? Estou tentando fazer algo no estilo do Metal Slug. Já tentei procurar por material na internet, mas não ajudou muito.
Alguém poderia me dar uma luz de como funcionaria o arremesso de uma granada em 2D? Estou tentando fazer algo no estilo do Metal Slug. Já tentei procurar por material na internet, mas não ajudou muito.
BananaSmith- Membro
- PONTOS : 3420
REPUTAÇÃO : 6
Respeito as regras :
Re: [RESOLVIDO] Arremessar uma granada(2D)
tem um topico semelhante só com objeto 3d,
https://www.schultzgames.com/t530-como-lancar-objetos-ao-apertar-uma-tecla-unity5?highlight=lancar+granada
eu fiz um semelhante ao do marcos,mas tem colocar uns ajustes pra funcionar
1-criar duas layers no editor , "player" & "granada"
2-colocar a layer do seu objeto Player para "player" e colocar a layer do seu Objeto granada como "granada" q vc criou
3-criar uma tag "granada_pref" e colocar seu objeto sprite granada com essa tag
4- adicionar Rigibody2d a esse objeto granada e arrastar para a pasta assets como prefab ,bloquear a rot Z do rigidbody
meu script:
pq um tanto de coisa, pra nao bugar o colisor da granada com o do player,boa noite brow ,espero ter ajudado
https://www.schultzgames.com/t530-como-lancar-objetos-ao-apertar-uma-tecla-unity5?highlight=lancar+granada
eu fiz um semelhante ao do marcos,mas tem colocar uns ajustes pra funcionar
1-criar duas layers no editor , "player" & "granada"
2-colocar a layer do seu objeto Player para "player" e colocar a layer do seu Objeto granada como "granada" q vc criou
3-criar uma tag "granada_pref" e colocar seu objeto sprite granada com essa tag
4- adicionar Rigibody2d a esse objeto granada e arrastar para a pasta assets como prefab ,bloquear a rot Z do rigidbody
meu script:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TesteGranada : MonoBehaviour
{
public GameObject Objeto; //arrastar o sprite prefab granada para cá
public int forcax = 50; //forca X
public int forcay = 50; //força Y
void Update()
{
if (Objeto)
{
//ignorar a colisao da granada com player
Physics2D.IgnoreLayerCollision(transform.gameObject.layer, LayerMask.NameToLayer("granada"), true);
}
if (Input.GetKeyDown(KeyCode.G)) //tecla G
{
GameObject objetoInstanciado = Instantiate(Objeto, transform.position, transform.rotation) as GameObject;
if (objetoInstanciado.GetComponent<Rigidbody2D>() == null) //verifica se a granada nao tem Rigidbody2D
{
objetoInstanciado.AddComponent(typeof(Rigidbody2D)); //adiciona o rb2d
}
objetoInstanciado.GetComponent<Rigidbody2D>().AddForce(new Vector2(transform.right.x*forcax,transform.up.y*forcay));
StartCoroutine(DestroyGranadas()); //destroir granadas
}
}
IEnumerator DestroyGranadas()
{
//buscar os objetos com a tag "granada_pref" para destruir
GameObject[] granadas = GameObject.FindGameObjectsWithTag("granada_pref");
yield return new WaitForSeconds(2); //segundo para destruir granada
for (int x = 0; x < granadas.Length; x++)
{
Destroy(granadas[x]);
}
}
}
pq um tanto de coisa, pra nao bugar o colisor da granada com o do player,boa noite brow ,espero ter ajudado
Re: [RESOLVIDO] Arremessar uma granada(2D)
FelipeSouza11 escreveu:tem um topico semelhante só com objeto 3d,
https://www.schultzgames.com/t530-como-lancar-objetos-ao-apertar-uma-tecla-unity5?highlight=lancar+granada
eu fiz um semelhante ao do marcos,mas tem colocar uns ajustes pra funcionar
1-criar duas layers no editor , "player" & "granada"
2-colocar a layer do seu objeto Player para "player" e colocar a layer do seu Objeto granada como "granada" q vc criou
3-criar uma tag "granada_pref" e colocar seu objeto sprite granada com essa tag
4- adicionar Rigibody2d a esse objeto granada e arrastar para a pasta assets como prefab ,bloquear a rot Z do rigidbody
meu script:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TesteGranada : MonoBehaviour
{
public GameObject Objeto; //arrastar o sprite prefab granada para cá
public int forcax = 50; //forca X
public int forcay = 50; //força Y
void Update()
{
if (Objeto)
{
//ignorar a colisao da granada com player
Physics2D.IgnoreLayerCollision(transform.gameObject.layer, LayerMask.NameToLayer("granada"), true);
}
if (Input.GetKeyDown(KeyCode.G)) //tecla G
{
GameObject objetoInstanciado = Instantiate(Objeto, transform.position, transform.rotation) as GameObject;
if (objetoInstanciado.GetComponent<Rigidbody2D>() == null) //verifica se a granada nao tem Rigidbody2D
{
objetoInstanciado.AddComponent(typeof(Rigidbody2D)); //adiciona o rb2d
}
objetoInstanciado.GetComponent<Rigidbody2D>().AddForce(new Vector2(transform.right.x*forcax,transform.up.y*forcay));
StartCoroutine(DestroyGranadas()); //destroir granadas
}
}
IEnumerator DestroyGranadas()
{
//buscar os objetos com a tag "granada_pref" para destruir
GameObject[] granadas = GameObject.FindGameObjectsWithTag("granada_pref");
yield return new WaitForSeconds(2); //segundo para destruir granada
for (int x = 0; x < granadas.Length; x++)
{
Destroy(granadas[x]);
}
}
}
pq um tanto de coisa, pra nao bugar o colisor da granada com o do player,boa noite brow ,espero ter ajudado
Puts, obrigado! Eu estava quebrando a cabeça para fazer essa granada voar. Entendi o que eu deveria ter feito na parte de adicionar força ao objeto instanciado. Valeu mesmo <3
BananaSmith- Membro
- PONTOS : 3420
REPUTAÇÃO : 6
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] De me uma luz
» Granada
» Lançar Granada
» [RESOLVIDO] Fps em C#
» [RESOLVIDO] Verificar se um texto é um email [RESOLVIDO]
» Granada
» Lançar Granada
» [RESOLVIDO] Fps em C#
» [RESOLVIDO] Verificar se um texto é um email [RESOLVIDO]
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos