Unity – Métodos de botones no se establecen correctamente

Tratare ser lo mas especifico posible.

Estoy creando la galería de un visualizador de vídeos .mp4 y fotos .jpg en Unity; En la galería si selecciono el botón Add, me abre un explorador donde yo podre buscar el archivo foto o vídeo y guardar la referencia para asignarlo al botón, si por ejemplo agrego un vídeo y le doy reproducir funciona sin problemas, si hago el mismo procedimiento en otro botón con lo mencionado anteriormente pero esta vez agregando una foto igual se reproduce sin problemas.

Captura de cuando agrego un video:

introducir la descripción de la imagen aquí

Captura de cuando agrego una foto:

introducir la descripción de la imagen aquí

Mi problema esta en cuando ya tengo agregado ya reproduje la foto y quiero volver a reproducir el vídeo ya no me deja reproducirlo porque de alguna forma el botón tiene asignado el método para reproducir fotos, si agrego mas fotos no hay problema. los mismo pasa si agrego primero fotos y después vídeos.

Realmente no encuentro como solucionarlo, llevo aproximadamente 3 días atorado con este problema.

Adjunto los códigos con los que estoy trabajando.

Clase 1:

public GameObject _photoSphere; public GameObject _videoSphere;  public TextMeshProUGUI[] _buttonFileName;  //Botones para la interfaz, agregar, borrar y plays public Button[] _addFile; public Button[] _deleteFile; public Button[] _playFile;  //Iconos para los archivos public SVGImage[] _photoIcon; public SVGImage[] _videoIcon;  #region Metodos para inicializacion  private void Start() {     AddFileListenerOnClick();     DeleteFileListenerOnClick();     PlayFilesOnClick();         }  #endregion  #region Metodos para botones  //Asiganamos metodo para abrir el explorador de archivo al Metodo OnClick _addFile basandonos en el index seleccionado public void AddFileListenerOnClick() {     for ( int i = 0; i < _addFile.Length; i++ )     {         int tempInt = i + 0;         _addFile[i].onClick.AddListener( () => _vRMEDExplorerScript.OpenFileBrowser( tempInt ) );     } }  public void DeleteFileListenerOnClick() {     for (int i = 0; i < _addFile.Length; i++)     {         int tempInt = i + 0;         //_deleteFile[i].onClick.AddListener(() => _galleryControlsRPC.DeleteFileName(tempInt));     } }  //Asiganamos metodo para reproducir archivo al Metodo OnClick de PlayFliesOnClick basandonos en el index seleccionado public void PlayFilesOnClick() {     for (int i = 0; i < _playFile.Length; i++)     {         int tempInt = i + 1;         _playFile[i].onClick.AddListener(() => PlayFile(tempInt));     } }  //Metodo que manda la instruccion de reproducir public void PlayFile(int playIndex) {     var video = Array.FindIndex(_loadVideoFileScript._videoFiles, row => row.Contains(".mp4"));     var photo = Array.FindIndex(_loadPhotoFileScript._photoFiles, row => row.Contains(".jpg"));      if (_galleryControlsRPC.isVideo == true)     {         for (int i = 0; i < _loadVideoFileScript._videoFiles.Length; i++)         {             if (video == i)             {                 VideoReady(playIndex);             }         }     }      else if (_galleryControlsRPC.isPhoto == true)     {         for (int i = 0; i < _loadPhotoFileScript._photoFiles.Length; i++)         {             if (photo == i)             {                 PhotoReady(playIndex);             }         }     } }  private void VideoReady(int videoReadyIndex) {             _galleryControlsRPC._filePlayIndex = videoReadyIndex;     _galleryControlsRPC.SendRpcSetPlayVideo(_galleryControlsRPC._filePlayIndex);      _photoSphere.SetActive(false);     _videoSphere.SetActive(true); }  private void PhotoReady(int photoReadyIndex) {             _galleryControlsRPC._filePlayIndex = photoReadyIndex;     _galleryControlsRPC.PlayPhoto(_galleryControlsRPC._filePlayIndex);     _ClassPlayer._VRMEDPlayer.CloseVideo();      _photoSphere.SetActive(true);     _videoSphere.SetActive(false); }  //Este metodo se encarga de buscar en la lista principal los archivos con extencion //.jpg y mp4 para almacenarlos en sus respectivas listas public void AddFileToPlay() {     if (_loadVideoFileScript._videoFiles[_galleryControlsRPC._fileExplorerIndex].Contains(".mp4"))     {         for (int i = 0; i < _loadVideoFileScript._videoFiles.Length; i++)         {             _videoIcon[_galleryControlsRPC._fileExplorerIndex].enabled = true;             _photoIcon[_galleryControlsRPC._fileExplorerIndex].enabled = false;         }     }      else if (_loadPhotoFileScript._photoFiles[_galleryControlsRPC._fileExplorerIndex].Contains(".jpg"))     {         for (int i = 0; i < _loadPhotoFileScript._photoFiles.Length; i++)         {             _videoIcon[_galleryControlsRPC._fileExplorerIndex].enabled = false;             _photoIcon[_galleryControlsRPC._fileExplorerIndex].enabled = true;         }     }     //_result = _photoFiles.ToList().Concat(_videoFiles.ToList()).ToArray(); } 

Clase 2:

public string _filePath;  [SyncVar] public string _file; [SyncVar] public int _filePlayIndex; [SyncVar] public int _fileExplorerIndex;  public bool isVideo; public bool isPhoto;  #endregion  #region Metodos de inicializacion  private void Start() {     FileBrowser.AddQuickLink( "Contenidos", _filePath, null );     _filePlayIndex = 1; }  #endregion  public void SendRpcSetFileName( int serverOption ) {     if (isServer)     {         RpcSetFileName( serverOption );     }     SetFileName( serverOption ); }  [ClientRpc] private void RpcSetFileName( int rpcOption ) {     SetFileName( rpcOption ); }  //Metodo que extrae el nombre del archivo seleccionado en el explorador, la asigna en una variable temporal, asigna su formato //y al momento de aceptar en el boton del explorador lo sincronizara en todos los clientes private void SetFileName( int option ) {     _galleryControlsScript._buttonFileName[_galleryControlsRPC._fileExplorerIndex].text          = _fileBrowserScript.filenameInputField.text;      if ( option == _galleryControlsRPC._fileExplorerIndex && _fileBrowserScript.filenameInputField.text.Contains( ".mp4" ) )     {         isVideo = true;         isPhoto = false;         //Obtenemos el nombre del archivo con su extencion         _galleryControlsScript._buttonFileName[_galleryControlsRPC._fileExplorerIndex].text              = _fileBrowserScript.filenameInputField.text.Replace( ".mp4", string.Empty ) ;          //Obtenemos el nombre del archivo, le quitamos la extencion .mp4 y la asignamos al texto del boton seleccionado//asignamos el nombre del archivo a la variable _file         _file = _galleryControlsScript._buttonFileName[_galleryControlsRPC._fileExplorerIndex].text + ".mp4";          //y la agregamos a la lista general de archivos agregandole nuevamente su extencion .mp4         _loadVideoFileScript._videoFiles[_galleryControlsRPC._fileExplorerIndex] = _file;          Debug.Log( "Nombre del archivo: " + _file + " " + " index del explorador: " + _galleryControlsRPC._fileExplorerIndex + " e indes de reproduccion " + _filePlayIndex );         Debug.Log( "Es Video" );     }     else if ( option == _galleryControlsRPC._fileExplorerIndex && _fileBrowserScript.filenameInputField.text.Contains( ".jpg" ) )     {         isPhoto = true;         isVideo = false;         //Obtenemos el nombre del archivo con su extencion         _galleryControlsScript._buttonFileName[_galleryControlsRPC._fileExplorerIndex].text              = _fileBrowserScript.filenameInputField.text.Replace(".jpg", string.Empty);          //Obtenemos el nombre del archivo, le quitamos la extencion .mp4 y la asignamos al texto del boton seleccionado//asignamos el nombre del archivo a la variable _file         _file = _galleryControlsScript._buttonFileName[_galleryControlsRPC._fileExplorerIndex].text + ".jpg";          //y la agregamos a la lista general de archivos agregandole nuevamente su extencion .mp4         _loadPhotoFileScript._photoFiles[_galleryControlsRPC._fileExplorerIndex] = _file;         Debug.Log( "Nombre del archivo: " + _file + " " + " index del explorador: " + _galleryControlsRPC._fileExplorerIndex + " e indes de reproduccion " + _filePlayIndex );         Debug.Log( "Es Foto" );     } }  public void SendRpcSetPlayVideo( int serverOption ) {     if ( isServer )     {         RpcSetPlayVideo( serverOption );     }     SetPlayVideo( serverOption ); }  [ClientRpc] public void RpcSetPlayVideo( int rpcOption ) {     SetPlayVideo( rpcOption ); }  //Metodo que manda a reproducir video por red public void SetPlayVideo( int option ) {     _loadVideoFileScript.LoadVideo( _filePlayIndex );                       }  //Metodo que manda a reproducir video por red public void PlayPhoto( int option ) {     _loadPhotoFileScript.PhotoLoader( _filePlayIndex ); }  public void GetFileBrowserComponent() {     GameObject file = GameObject.FindGameObjectWithTag( "fileExplorer" );     _fileBrowserScript = file.GetComponent<FileBrowser>(); 

Clase 3:

   #region Metodos para Exporador de archivos  //Metodo que se encarga de inicializar los metodos de instanciado del //explorador, obtener los botones "OK" y "Cancel" del explorador. //Tambien hace un seguimiendo del boton seleccionado basandose de un index //y busca el ta "fileExplorer" para mas adelante poder destruirlo public void OpenFileBrowser(int buttonIndex) {     Debug.Log("Boton de explorador = " + buttonIndex);     InstantiateExplorer(buttonIndex);     GetButtonExplorer();     _galleryControlsRPC._fileExplorerIndex = buttonIndex;     _destroyExplorer = GameObject.FindGameObjectWithTag("fileExplorer");     GetFileBrowserComponent();     _galleryControlsRPC.GetFileBrowserComponent();     _fileBrowserScript.GetScripts(); }  //Obtenermos los botones "OK" y "Cancelar" en base a su nombre de tag //y se les agrega el metodo que destruira el explorador public void GetButtonExplorer() {     //Obtenermos el boton cancelar     GameObject getCancelButton = GameObject.FindGameObjectWithTag("buttonCancel");     _cancelButton = getCancelButton.GetComponent<Button>();     if ( _disableButtons )     {         _cancelButton.onClick.AddListener(() => StartCoroutine(ExplorerDestroy()));         _cancelButton.onClick.AddListener(() => _disableButtons.EnableDeleteButton(_galleryControlsRPC._fileExplorerIndex));     }      //Obtenemos el boton aceptar     GameObject getSubmitButton = GameObject.FindGameObjectWithTag("buttonOk");     _submitButton = getSubmitButton.GetComponent<Button>();     if (_galleryControlsRPC && _disableButtons && _galleryControlsScript )     {         _submitButton.onClick.AddListener(() => _galleryControlsRPC.SendRpcSetFileName(_galleryControlsRPC._fileExplorerIndex));         _submitButton.onClick.AddListener(() => StartCoroutine(ExplorerDestroy()));         _submitButton.onClick.AddListener(() => _disableButtons.DisableAddButton(_galleryControlsRPC._fileExplorerIndex));         _submitButton.onClick.AddListener(() => _galleryControlsScript.AddFileToPlay());     } }  //Metodo que destruye el explorador public IEnumerator ExplorerDestroy() {     yield return new WaitForSeconds(0.01f);     DestroyImmediate(_destroyExplorer); }  //Metodo que crea una instancia del explorador de archivos private void InstantiateExplorer(int index) {     GameObject goElement = (GameObject)Instantiate(_fileExplorer);     goElement.transform.localScale = new Vector3(1, 1, 1);     goElement.name = "FileBrowser_" + index; }  //Buscamos el explorador de archivos por su nombre de tag public void GetFileBrowserComponent() {     GameObject file = GameObject.FindGameObjectWithTag("fileExplorer");     _fileBrowserScript = file.GetComponent<FileBrowser>(); }  #endregion