Como criar um objeto só quando colider com outro?
3 participantes
Página 1 de 1
Como criar um objeto só quando colider com outro?
Ola, a ideia do meu jogo é bem simples, você morre e tem que usar seu corpo para passar as fasses, porem eu estou tendo um problema, quando eu collido com os espinhos era para apenas spawnar outro objeto do Player porem todos os jeitos que eu tentei ou criavam milhares de players infinitamente ou apenas criava um só.Alguem sabe como posso resolver isso?
Phelipe- Iniciante
- PONTOS : 1313
REPUTAÇÃO : 2
Respeito as regras :
Re: Como criar um objeto só quando colider com outro?
Phelipe escreveu:Ola, a ideia do meu jogo é bem simples, você morre e tem que usar seu corpo para passar as fasses, porem eu estou tendo um problema, quando eu collido com os espinhos era para apenas spawnar outro objeto do Player porem todos os jeitos que eu tentei ou criavam milhares de players infinitamente ou apenas criava um só.Alguem sabe como posso resolver isso?
ola amigo, boa noite, coloque seu script para darmos uma olhada e tentar corrigir de acordo com sua lógica
Re: Como criar um objeto só quando colider com outro?
ai meu codigo para recriar o PLayerFelipeSouza11 escreveu:Phelipe escreveu:Ola, a ideia do meu jogo é bem simples, você morre e tem que usar seu corpo para passar as fasses, porem eu estou tendo um problema, quando eu collido com os espinhos era para apenas spawnar outro objeto do Player porem todos os jeitos que eu tentei ou criavam milhares de players infinitamente ou apenas criava um só.Alguem sabe como posso resolver isso?
ola amigo, boa noite, coloque seu script para darmos uma olhada e tentar corrigir de acordo com sua lógica
- Código:
public GameObject player;
public float criar = 0;
public bool recriar = false;
public float Contagem;
public GameObject gameOver;
// Use this for initialization
void Start () {
Instantiate(player, transform.position, transform.rotation);
Contagem -= 1;
}
// Update is called once per frame
void Update () {
if (criar == 1 && Contagem >= 0)
{
Contagem -= 1;
Instantiate(player, transform.position, transform.rotation);
}
if(Contagem < 0)
{
gameOver.SetActive(true);
}
[code][/code]
Phelipe- Iniciante
- PONTOS : 1313
REPUTAÇÃO : 2
Respeito as regras :
Re: Como criar um objeto só quando colider com outro?
Oi blz, Porque vc não só utiliza o OnCollisionEnter ou OnTriggerEnter ,essas voids só vão acionar uma vez quando seu personagem colidi.Phelipe escreveu:Ola, a ideia do meu jogo é bem simples, você morre e tem que usar seu corpo para passar as fasses, porem eu estou tendo um problema, quando eu collido com os espinhos era para apenas spawnar outro objeto do Player porem todos os jeitos que eu tentei ou criavam milhares de players infinitamente ou apenas criava um só.Alguem sabe como posso resolver isso?
hendrick22- MembroAvançado
- PONTOS : 2678
REPUTAÇÃO : 57
Idade : 25
Respeito as regras :
Re: Como criar um objeto só quando colider com outro?
voçe pode criar um gerenciador para gerenciar o spawn e respaw um exemplo básico:
como o amigo acima disse voçe pode usar o OntriggerEnter ou OnCollisionEnter ,para esse tipo eu acharia melhor o OnCollisionEnter ou OnCollisionEnter2D para 2d
fiz um exemplo básico , nao sei se seu jogo é 2d ou 3d, mais ja vi muitos desses jogos em 2d então fiz um exemplo
o que precisei :
1- criar um objeto vazio qualquer e renomeia para "GerenciadorRespaw" e adicionar o script SpawnManager nele e linkar o que pede nos campos
2- criar 3 Tags se nao tiver , Tag "Player", "Morto" e "Spike",
3- coloque a tag do player para "Player" se nao colocou , e colocar a tag "Spike" nos espinhos
assim que o jogador morrer a tag dele sera mudada para "Morto" no script, só para diferenciar
Gerenciador pra dar spawn ,respaw:
SpawnManager.cs
script do jogador , os controler de movimento e pulo peguei em um site qualquer só pra elaborar a logica ,, se voce ja tem os movimentos e pulo ignore o "FixedUpdate"
Controller.cs
é um exemplo exatamente de como voce faria sua lógica, testado e aprovado , tirando as mecanicas de movimentos, resolvido o erro de spawnar varios player de uma vez só , as linhas estão comentadas para nao virar uma coisa muito complexa ,
qualquer dúvida só xamar
como o amigo acima disse voçe pode usar o OntriggerEnter ou OnCollisionEnter ,para esse tipo eu acharia melhor o OnCollisionEnter ou OnCollisionEnter2D para 2d
fiz um exemplo básico , nao sei se seu jogo é 2d ou 3d, mais ja vi muitos desses jogos em 2d então fiz um exemplo
o que precisei :
1- criar um objeto vazio qualquer e renomeia para "GerenciadorRespaw" e adicionar o script SpawnManager nele e linkar o que pede nos campos
2- criar 3 Tags se nao tiver , Tag "Player", "Morto" e "Spike",
3- coloque a tag do player para "Player" se nao colocou , e colocar a tag "Spike" nos espinhos
assim que o jogador morrer a tag dele sera mudada para "Morto" no script, só para diferenciar
Gerenciador pra dar spawn ,respaw:
SpawnManager.cs
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnManager : MonoBehaviour
{
public int vidas=3; //contagem de vezes que pode dar respawn quando um jogador morrer
private GameObject Player; //player
public Transform localSpawn; //locar a qual o player vai dar spawn, respawn, arrastar o local no inpector
public GameObject PlayerPrefab; //prefab do player, arrastar a prefab no inpector
// Start is called before the first frame update
void Start()
{
Player=GameObject.FindGameObjectWithTag("Player"); //tentar buscar o player na cena
//se nao encontar instanciar , nao vai custar vida
if(Player==null){
var newPlayer= Instantiate(PlayerPrefab, localSpawn.position, Quaternion.identity);
Player= newPlayer;
}
}
public void Spawn(){
//se a vida for maior que zero vai respawnar ao morrer
if(vidas>0)
if(Player==null){
var newPlayer= Instantiate(PlayerPrefab, localSpawn.position, Quaternion.identity);
Player= newPlayer;
print("novo jogador respawnado");
}
}
public void onDead(){
Player=null;
}
//opcional ----->
private void Update() {
//se acabar as vidas do respaw
if(vidas<=0){
//fim de jogo , escolhe seu final ou qualquer coisa
}
}
//<--------
}
script do jogador , os controler de movimento e pulo peguei em um site qualquer só pra elaborar a logica ,, se voce ja tem os movimentos e pulo ignore o "FixedUpdate"
Controller.cs
- Código:
using UnityEngine;
using System.Collections;
public class Controller : MonoBehaviour {
public bool estaVivo=true; //se o player esta vivo | true ou false
private SpawnManager playerManager; //o script SpawnManager, GerenciadorRespaw
public float speed; //velocidade andar
public float jump; //velocidade pulo
public GameObject rayOrigin; //origem do raio para detectar o chao
public float rayCheckDistance;
Rigidbody2D rb; //rigidbody
//ao Start
void Start () {
playerManager= GameObject.Find("GerenciadorRespaw").GetComponent<SpawnManager>(); //busca e pega o script do gerenciador de spawn
rb = GetComponent <Rigidbody2D> (); //pegando o rigidbody
}
//opcional , se ja tiver seu proprio movimento apague o trecho abaixo----->
void FixedUpdate () {
//movimento e pulo
float x = Input.GetAxis ("Horizontal");
//movimento de testes
if(estaVivo==true){
if (Input.GetAxis ("Jump") > 0) {
RaycastHit2D hit = Physics2D.Raycast(rayOrigin.transform.position, Vector2.down, rayCheckDistance);
if (hit.collider != null) {
rb.AddForce (Vector2.up * jump, ForceMode2D.Impulse);
}
}
rb.velocity = new Vector3 (x * speed, rb.velocity.y, 0);
}
//<----------- trecho
}
//ao colidir com qualquer obstaculo que mata ou qualquer outro
private void OnCollisionEnter2D(Collision2D other) {
/* compara tag dos espinhos
*
*/
if(estaVivo){
if(other.collider.CompareTag("Spike")){
print("morreu"); //msg morreu
estaVivo=false; //se nao esta vivo morreu
gameObject.tag="Morto"; //mudar a tag para morto
GetComponent<Controller>().enabled=false; //desativar o controler do player
GetComponent<Rigidbody2D>().isKinematic=true; //bloquaer de ser empurrado
playerManager.onDead(); //setar Player para null no SpawnManager
playerManager.Spawn(); //spawn novo player
playerManager.vidas-=1; //diminuir vidas, vezes de spawn etc
}
}
}
}
é um exemplo exatamente de como voce faria sua lógica, testado e aprovado , tirando as mecanicas de movimentos, resolvido o erro de spawnar varios player de uma vez só , as linhas estão comentadas para nao virar uma coisa muito complexa ,
qualquer dúvida só xamar
Tópicos semelhantes
» (Duvida) como misturar objeto e criar outro
» Como fazer para interagir um objeto com um outro objeto [Estilo Granny]
» Como fazer o objeto emitido pela partícula ser direcionado até outro objeto
» Como fazer para um objeto não colidir com um "collider" e o outro objeto si
» Como mudar rotacao de um objeto em relacao a posicao do outro objeto
» Como fazer para interagir um objeto com um outro objeto [Estilo Granny]
» Como fazer o objeto emitido pela partícula ser direcionado até outro objeto
» Como fazer para um objeto não colidir com um "collider" e o outro objeto si
» Como mudar rotacao de um objeto em relacao a posicao do outro objeto
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos