Unity - методы кнопок установлены неправильно - PullRequest
0 голосов
/ 23 апреля 2019

Я создаю галерею просмотра видео .mp4 и фотографий .jpg в Unity;В галерее, если я выбираю кнопку «Добавить», я открываю браузер, где могу искать фотографию или видеофайл и сохраняю ссылку, чтобы назначить ее кнопке, если, например, я добавляю видео и даю его, воспроизведение работает без проблем,если я сделаю ту же процедуру на другой кнопке с вышеупомянутым, но на этот раз добавление равной фотографии воспроизводится без проблем.

Screenshot of adding a video file Screenshot of adding a photo file

Моя проблема в том, что я добавил фотографию, и я хочу снова воспроизвести видео, и оно не позволяет мне воспроизвести его, потому что каким-то образом кнопка назначила метод воспроизведения фотографий, если я добавляю больше фотографий, то нетпроблема.то же самое происходит, если я сначала добавляю фотографии, а затем видео.

Я действительно не могу найти способ ее решить, у меня заняло около 3 дней этой проблемы.

Я прикрепляю коды ся работаю.

Класс 1:

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>();
}

Класс 2:

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();
}

Класс 3:

public GameObject _fileExplorer;
public GameObject _destroyExplorer;
public Button _submitButton;
public Button _cancelButton;

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...