Sistema de missão [Duvida]
3 participantes
Página 1 de 1
Sistema de missão [Duvida]
Olá, eu estou tendo uma pequena dúvida em um sistema de missão que adaptei para o meu projeto, o mesmo funciona de maneira perfeita, mas tem alguns pequenos problemas, eu preciso pegar uma chave inicial, ir ate um local, coletar 3 objetos e levar ate um lugar para ser 'entregue' e em seguida, eu recebo a missão de ir ate um outro local, pegar a próxima chave e fazer a mesma coisa, e assim por diante, exemplos
* Vá ate tal lugar e pegue tal chave
(Após pegar essa chave)
* Colete 3 Objetos em tal Lugar
(Após coletar esses objetos)
*Vá ate tal lugar e pegue tal chave.. assim por diante
O Script que estou utilizando é um que já estava disponível no fórum, um para carregar objetos em mãos e outro para contar objetos ao destrui-los, apenas tentei adaptar para essas funções.
O que eu gostaria de fazer é que a partir do momento que eu coletasse todos os objetos necessarios de um quarto, eu recebesse a missao de ir pegar a proxima chave, e após pegar essa proxima chave (que abre o quarto), automaticamente recebo a missão de coletar os objetos nesse quarto, e assim por diante..
* Vá ate tal lugar e pegue tal chave
(Após pegar essa chave)
* Colete 3 Objetos em tal Lugar
(Após coletar esses objetos)
*Vá ate tal lugar e pegue tal chave.. assim por diante
O Script que estou utilizando é um que já estava disponível no fórum, um para carregar objetos em mãos e outro para contar objetos ao destrui-los, apenas tentei adaptar para essas funções.
- Código:
public Text itensPegas;
public GameObject textMissao401,textMissao402;
public Text pegueA402, contagemDosObjetos;
public GameObject chave402;
public static int itensValor401 = 0;
public static int itensValor402 = 0;
void Start(){
textMissao402.SetActive (false);
pegueA402.enabled = false;
chave402.SetActive (false);
}
void Update(){
itensPegas.text = itensValor401.ToString ();
if (itensValor401 == 3) {
chave402.SetActive (true);
textMissao401.SetActive (false);
itensPegas.enabled = false;
contagemDosObjetos.enabled = false;
pegueA402.enabled = true; //Até aqui funciona perfeitamente
chamar402();
}
}
void chamar402(){
itensPegas.text = itensValor402.ToString ();
if (chave402.gameObject == false){
pegueA402.enabled = false;
contagemDosObjetos.enabled = true;
textMissao402.SetActive (true);
if (itensValor402 == 3) {
}
}
}
}
O que eu gostaria de fazer é que a partir do momento que eu coletasse todos os objetos necessarios de um quarto, eu recebesse a missao de ir pegar a proxima chave, e após pegar essa proxima chave (que abre o quarto), automaticamente recebo a missão de coletar os objetos nesse quarto, e assim por diante..
Re: Sistema de missão [Duvida]
Não sei se te ajudaria exatamente isso, mas sempre que me da um problema eu uso um contador... faz assim, cada item necessário acrescenta +1 no contador, e quando pegar um numero x de itens, ele ativa a missão.
luansantos- Iniciante
- PONTOS : 2496
REPUTAÇÃO : 7
Idade : 27
Áreas de atuação : Minha área central é programação, mas me dou bem em todas as outras áreas, menos em Design. S2
Respeito as regras :
Re: Sistema de missão [Duvida]
Sim, é basicamente isso que acontece, através de um contador, sempre que eu entrego um item ele acrescenta + 1 e quando chega em um numero especifico de itens, ele ativa uma certa missão, até ai tudo bem. Porém, sempre que eu vou pegar a próxima chave ( a mesma teria que ser destruida ou desativada após a coleta ), ela desativa e reativa na mesma hora, e a próxima missão fica uma por cima da outra.luansantos escreveu:Não sei se te ajudaria exatamente isso, mas sempre que me da um problema eu uso um contador... faz assim, cada item necessário acrescenta +1 no contador, e quando pegar um numero x de itens, ele ativa a missão.
Exemplo
*Vá ate tal lugar e pegue a chave (mesmo já tendo pego, o texto fica ali) + Colete o tanto de itens x/x* (Ao mesmo tempo)
O Script que acrescenta +1.
- Código:
using UnityEngine;
using System.Collections;
public class coletar : MonoBehaviour {
void OnCollisionEnter (Collision coll) {
if (coll.gameObject.tag == "Coletor401") {
TextoGerenciado.itensValor401++;
Destroy (gameObject);
}
if (coll.gameObject.tag == "Coletor402") {
TextoGerenciado.itensValor402++;
Destroy (gameObject);
}
}
}
Ao iniciar a missão
[/img]
Ao entregar os objetos (o cubo na mao simboliza o item que será coletado, e o que esta no chao é onde sera entregue)
[/img]
Após entregar os objetos necessarios vem a proxima missão
[/img]
Quando eu pego a chave, acontece isso. (A chave seria o cilindro)
[/img]
Re: Sistema de missão [Duvida]
Tenta destruir, faz um Destroy(nome do objeto); no caso o texto que esta ficando sobre o outro, assim não vai dar este problema mais.
luansantos- Iniciante
- PONTOS : 2496
REPUTAÇÃO : 7
Idade : 27
Áreas de atuação : Minha área central é programação, mas me dou bem em todas as outras áreas, menos em Design. S2
Respeito as regras :
Re: Sistema de missão [Duvida]
Funcionou de certa forma, porém, a contagem ela não reinicia, e o console fica apitando um erro desse Texto ter sido destruído a todo momento, seja ele um texto ou um gameobject.luansantos escreveu:Tenta destruir, faz um Destroy(nome do objeto); no caso o texto que esta ficando sobre o outro, assim não vai dar este problema mais.
[/img]
[/img]
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextoGerenciado : MonoBehaviour{
public Text itensPegas;
public GameObject textMissao401,textMissao402;
public Text pegueA402, contagem;
public GameObject chave402;
public static int itensValor401 = 0;
public static int itensValor402 = 0;
void Start(){
textMissao402.SetActive (false);
pegueA402.enabled = false;
chave402.SetActive (false);
}
void Update(){
itensPegas.text = itensValor401.ToString ();
if (itensValor401 == 3) { //Se o valor dos itens do quarto 401 for igual a 3
chave402.SetActive (true); //a chave sera ativada
textMissao401.SetActive (false);
contagem.enabled = false;
pegueA402.enabled = true;
chamar402();
}
}
void chamar402(){
itensPegas.text = itensValor402.ToString ();
if (chave402.gameObject == true && Input.GetMouseButtonDown (0)){
pegueA402.enabled = false;
Destroy(chave402.gameObject);
itensPegas.enabled = true;
contagem.enabled = true;
textMissao402.SetActive (true);
if (itensValor402 == 3) {
}
}
}
}
Re: Sistema de missão [Duvida]
O que eu acho que está acontecendo é que quando voce atinge 3 objetos coletados do 401, ativa a chave402, porém voce chama a void chamar402() que acaba por destruir a chave402, e os objetos coletados do 401 ainda continuam como 3 então eles tentam ativar a chave402 mas ela nao existe mais, então para resolver isso é só checar se a chave402 é nula, tente assim:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextoGerenciado : MonoBehaviour{
public Text itensPegas;
public GameObject textMissao401,textMissao402;
public Text pegueA402, contagem;
public GameObject chave402;
public static int itensValor401 = 0;
public static int itensValor402 = 0;
void Start(){
textMissao402.SetActive (false);
pegueA402.enabled = false;
chave402.SetActive (false);
}
void Update(){
itensPegas.text = itensValor401.ToString ();
if (itensValor401 == 3 && chave402 != null) { //Se o valor dos itens do quarto 401 for igual a 3 e a chave ainda existir
chave402.SetActive (true); //a chave sera ativada
textMissao401.SetActive (false);
contagem.enabled = false;
pegueA402.enabled = true;
chamar402();
}
}
void chamar402(){
itensPegas.text = itensValor402.ToString ();
if (chave402.gameObject == true && Input.GetMouseButtonDown (0)){
pegueA402.enabled = false;
Destroy(chave402.gameObject);
itensPegas.enabled = true;
contagem.enabled = true;
textMissao402.SetActive (true);
if (itensValor402 == 3) {
}
}
}
}
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: Sistema de missão [Duvida]
O problema de certa forma persistiu, porém, eu desativei o contador "itemValor401" após passar para o 402, e ativei o "itemValor402", funcionou, porém, não conta ao coletar a partir do 402, eu estou usando 2 coletores por tag em 1 "OnCollisionEnter", não sei se isso interfere em algo.Pokedlg escreveu:O que eu acho que está acontecendo é que quando voce atinge 3 objetos coletados do 401, ativa a chave402, porém voce chama a void chamar402() que acaba por destruir a chave402, e os objetos coletados do 401 ainda continuam como 3 então eles tentam ativar a chave402 mas ela nao existe mais, então para resolver isso é só checar se a chave402 é nula, tente assim:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextoGerenciado : MonoBehaviour{
public Text itensPegas;
public GameObject textMissao401,textMissao402;
public Text pegueA402, contagem;
public GameObject chave402;
public static int itensValor401 = 0;
public static int itensValor402 = 0;
void Start(){
textMissao402.SetActive (false);
pegueA402.enabled = false;
chave402.SetActive (false);
}
void Update(){
itensPegas.text = itensValor401.ToString ();
if (itensValor401 == 3 && chave402 != null) { //Se o valor dos itens do quarto 401 for igual a 3 e a chave ainda existir
chave402.SetActive (true); //a chave sera ativada
textMissao401.SetActive (false);
contagem.enabled = false;
pegueA402.enabled = true;
chamar402();
}
}
void chamar402(){
itensPegas.text = itensValor402.ToString ();
if (chave402.gameObject == true && Input.GetMouseButtonDown (0)){
pegueA402.enabled = false;
Destroy(chave402.gameObject);
itensPegas.enabled = true;
contagem.enabled = true;
textMissao402.SetActive (true);
if (itensValor402 == 3) {
}
}
}
}
- Código:
using UnityEngine;
using System.Collections;
public class coletar : MonoBehaviour {
void OnCollisionEnter (Collision coll) {
if (coll.gameObject.tag == "Coletor401") {
TextoGerenciado.itensValor401++;
Destroy (gameObject);
}
if (coll.gameObject.tag == "Coletor402") {
TextoGerenciado.itensValor402++;
Destroy (gameObject);
}
}
}
Re: Sistema de missão [Duvida]
Mas quem possui as tags sao os objetos ou o player?
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: Sistema de missão [Duvida]
O script iria no objeto que seria pego que buscaria alguém com a TAG player (que seria pra coletar ao encostar), porem como adaptei, ele busca algo com cada tag diferente em relação aos quartosPokedlg escreveu:Mas quem possui as tags sao os objetos ou o player?
*Coletor401 *Coletor402 *Coletor403..
Re: Sistema de missão [Duvida]
Se a tag vai ao player, quando voce altera a tag do player para "Coletor402"? O problema que está ocorrendo é que nao está contando a contagem do 402 nao é?
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: Sistema de missão [Duvida]
Sim, o script foi programado para quando o objeto (com o script) encostar em algo com a devida tag, ele se destrói e acrescenta +1. Porem, como eu adicionei duas tags em um único objeto, ele só conta da primeira que é o 401, a partir do 402 não conta.Pokedlg escreveu:Se a tag vai ao player, quando voce altera a tag do player para "Coletor402"? O problema que está ocorrendo é que nao está contando a contagem do 402 nao é?
Re: Sistema de missão [Duvida]
Ok, entao pelo que eu entendi, o player nunca muda para a tag "Coletor402", por isso nao conta, é isso?
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: Sistema de missão [Duvida]
Tenta assim:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextoGerenciado : MonoBehaviour{
public Text itensPegas;
public GameObject textMissao401,textMissao402;
public Text pegueA402, contagem;
public GameObject chave402;
public static int itensValor401 = 0;
public static int itensValor402 = 0;
void Start(){
textMissao402.SetActive (false);
pegueA402.enabled = false;
chave402.SetActive (false);
}
void Update(){
itensPegas.text = itensValor401.ToString ();
if (itensValor401 == 3 && chave402 != null) { //Se o valor dos itens do quarto 401 for igual a 3 e a chave ainda existir
chave402.SetActive (true); //a chave sera ativada
textMissao401.SetActive (false);
contagem.enabled = false;
pegueA402.enabled = true;
chamar402();
}
}
void chamar402(){
itensPegas.text = itensValor402.ToString ();
gameObject.tag = "Coletor402";
if (chave402.gameObject == true && Input.GetMouseButtonDown (0)){
pegueA402.enabled = false;
Destroy(chave402.gameObject);
itensPegas.enabled = true;
contagem.enabled = true;
textMissao402.SetActive (true);
if (itensValor402 == 3) {
}
}
}
}
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: Sistema de missão [Duvida]
BásicamentePokedlg escreveu:Ok, entao pelo que eu entendi, o player nunca muda para a tag "Coletor402", por isso nao conta, é isso?
Re: Sistema de missão [Duvida]
Consegui mano, porém, a questão estava na chave, a partir do momento que eu destruo a chave, eu não sei porq mas simplesmente para de contar, dai eu desativei a render e passou a contar, porém, por conta do Input, sempre que eu aperto o botao do mouse, a missao "Vá ate tal lugar e pegue a chave", ela fica novamente por cima, sempre que eu aperto, desativa e ativa.. Mas a contagem eu de certa forma consegui resolver..Pokedlg escreveu:Tenta assim:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextoGerenciado : MonoBehaviour{
public Text itensPegas;
public GameObject textMissao401,textMissao402;
public Text pegueA402, contagem;
public GameObject chave402;
public static int itensValor401 = 0;
public static int itensValor402 = 0;
void Start(){
textMissao402.SetActive (false);
pegueA402.enabled = false;
chave402.SetActive (false);
}
void Update(){
itensPegas.text = itensValor401.ToString ();
if (itensValor401 == 3 && chave402 != null) { //Se o valor dos itens do quarto 401 for igual a 3 e a chave ainda existir
chave402.SetActive (true); //a chave sera ativada
textMissao401.SetActive (false);
contagem.enabled = false;
pegueA402.enabled = true;
chamar402();
}
}
void chamar402(){
itensPegas.text = itensValor402.ToString ();
gameObject.tag = "Coletor402";
if (chave402.gameObject == true && Input.GetMouseButtonDown (0)){
pegueA402.enabled = false;
Destroy(chave402.gameObject);
itensPegas.enabled = true;
contagem.enabled = true;
textMissao402.SetActive (true);
if (itensValor402 == 3) {
}
}
}
}
Tópicos semelhantes
» Sistema de Missao e Recompensa!
» [Duvida]Sistema de marchas
» [DÚVIDA] SISTEMA DE CARGAS
» [Ajuda] Em um sistema de inventario!
» [DÚVIDA] SISTEMA DE HEADSHOT
» [Duvida]Sistema de marchas
» [DÚVIDA] SISTEMA DE CARGAS
» [Ajuda] Em um sistema de inventario!
» [DÚVIDA] SISTEMA DE HEADSHOT
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos