[RESOLVIDO] Destruir objetos com o mesmo id
3 participantes
Página 1 de 1
[RESOLVIDO] Destruir objetos com o mesmo id
Bem eu tenho um script de música onde ele continua tocando a musica apos trocar de sena.
Ele basicamente utilija o mesmo obijeto e muda a musica de acordo com o id da sena.
Mas persebi mais fasil cirar um obijeto de musica para cada sena e muanter o anterior se caso a musica fosse a mesma das duas fases.
Então a minha ideia é criar uma variável public float ID;
E dizer se tiver o mesmo numero ele destrói o objeto que esta na cena e manter o da cena anterior.
Casso o contrario ele manter o da cena atual e destrói o anterior.
Mas eu não sei como fazer isso então alguém poderia me ajudar?
script atual caso alguém queira ver como está.
Acredito que fazendo isso daria para eliminar o void Update e o void changeBGM.
Ele basicamente utilija o mesmo obijeto e muda a musica de acordo com o id da sena.
Mas persebi mais fasil cirar um obijeto de musica para cada sena e muanter o anterior se caso a musica fosse a mesma das duas fases.
Então a minha ideia é criar uma variável public float ID;
E dizer se tiver o mesmo numero ele destrói o objeto que esta na cena e manter o da cena anterior.
Casso o contrario ele manter o da cena atual e destrói o anterior.
Mas eu não sei como fazer isso então alguém poderia me ajudar?
script atual caso alguém queira ver como está.
- Código:
using UnityEngine;
using UnityEngine.SceneManagement;
[RequireComponent(typeof(AudioSource))]
public class MusicContinuesAfterChangingScenes : MonoBehaviour
{
[SerializeField] private static MusicContinuesAfterChangingScenes Instance;
[SerializeField] private float ID;
[SerializeField] private AudioClip[] tracks;
AudioSource Music;
void Awake()
{
Music = GetComponent<AudioSource>();
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(Instance);
}
else
{
Destroy(gameObject);
}
}
public void Update()
{
int sceneIndex = SceneManager.GetActiveScene().buildIndex;
if (sceneIndex >= 1 && sceneIndex < 5)
{
if (Music.clip != tracks[1])
{
changeBGM(tracks[1]);
}
}
}
public void changeBGM(AudioClip music)
{
Music.Stop();
Music.clip = music;
Music.Play();
}
}
Acredito que fazendo isso daria para eliminar o void Update e o void changeBGM.
Re: [RESOLVIDO] Destruir objetos com o mesmo id
Coloque "static" em "AudioSource Music;" , isso fará com que a variável seja "global" (não é o termo correto, eu que gosto de chamar assim haha) e não por instância (depender de um objeto instanciado em cena).
E troque "Awake" para "Start".
E troque "Awake" para "Start".
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: [RESOLVIDO] Destruir objetos com o mesmo id
No caso até onde eu sei do script.NKKF escreveu:Coloque "static" em "AudioSource Music;" , isso fará com que a variável seja "global" (não é o termo correto, eu que gosto de chamar assim haha) e não por instância (depender de um objeto instanciado em cena).
E troque "Awake" para "Start".
Eu tenho duas cenas uma com o objeto 1 e outra com o objeto 2.
a variável "Instance" vendo se a objetos com o mesmo script.
E oque eu quero fazer é se a variável "ID" do objeto 1 for igual a do objeto 2 ele destrói o objeto 2.
E se for diferente ele destrói o objeto 1 e manter o objeto 2.
é isso que eu estou tentando fazer.
- Código:
using UnityEngine;
public class MusicContinuesAfterChangingScenes : MonoBehaviour
{
private static MusicContinuesAfterChangingScenes Instance;
public float ID;
void Start()
{
if (Instance == null)
{
if (ID ???)
{
Instance = this;
DontDestroyOnLoad(Instance);
}
else
{
Destroy(gameObject);
}
}
}
}
Re: [RESOLVIDO] Destruir objetos com o mesmo id
Pode tentar Isso Tambem:
Exemplo de Uso:
- Código:
using UnityEngine;
public sealed class MusicContinuesAfterChangingScenes : MonoBehaviour
{
private static MusicContinuesAfterChangingScenes _MusicInstance;
public float ID;
private MusicContinuesAfterChangingScenes() { } // METODO CONSTRUTOR PRIVADO.
public static MusicContinuesAfterChangingScenes Instancia()
{
return _MusicInstance;
}
private void Awake()
{
if (_MusicInstance == null)
_MusicInstance = this;
else if (_MusicInstance != this)
Destroy(gameObject.GetComponent(_MusicInstance.GetType()));
}
}
Exemplo de Uso:
- Código:
using UnityEngine;
public class Teste : MonoBehaviour
{
private void Start()
{
MusicContinuesAfterChangingScenes.Instancia().ID = 10;
}
}
Magnatah- Instrutor
- PONTOS : 3547
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: [RESOLVIDO] Destruir objetos com o mesmo id
Encontrei a solução para este script.
- Código:
using UnityEngine;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
[RequireComponent(typeof(AudioSource))]
public class MusicContinuesAfterChangingScenes : MonoBehaviour
{
[Header("Put Scene ID Here")]
[SerializeField] private List<int> ScenesId;
[Header("Put Object Priority Numbers")]
[Header("Smaller numbers mean the object is less important and can be Deleted.")]
public int Number;
AudioSource Music;
private void Awake()
{
DontDestroyOnLoad(gameObject);
Music = GetComponent<AudioSource>();
}
private void Update()
{
// check if the current scene identifier is in the list of scenes where the music should keep playing
if (ScenesId.Contains(SceneManager.GetActiveScene().buildIndex))
{
if (!Music.isPlaying)
{
Music.Play();
}
}
else
{
Music.Stop();
Destroy(gameObject);
}
}
private void OnLevelWasLoaded()
{
// finds all objects with script "MusicContinuesAfterChangingScenes" in the scene
MusicContinuesAfterChangingScenes[] objects = FindObjectsOfType<MusicContinuesAfterChangingScenes>();
foreach (MusicContinuesAfterChangingScenes obj in objects)
{
// checks if the current object number is greater than the current object number
if (obj.Number > Number)
{
if (obj != this)
{
Destroy(gameObject);
return;
}
}
}
}
}
Tópicos semelhantes
» (AJUDA) DESTRUIR OBJETOS INSTANCIADOS
» 2 Objetos no mesmo spawner ao mesmo tempo
» Olá, Como destruir um objeto que não foi o mesmo que eu encostei ? LOL "0"
» Destruir objetos com Raycast
» Destruir Objetos Filhos
» 2 Objetos no mesmo spawner ao mesmo tempo
» Olá, Como destruir um objeto que não foi o mesmo que eu encostei ? LOL "0"
» Destruir objetos com Raycast
» Destruir Objetos Filhos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos