#c# #unity3d #vuforia
#c# #unity3d #vuforia
Вопрос:
Я пытаюсь создать видеоплеер Vuforia с виртуальными кнопками, но когда я пытаюсь приостановить и воспроизвести, это выдает ошибку. Я просмотрел некоторые форумы и некоторые старые вопросы, но они не решили мою проблему. Ошибка:
Assetsvp_time.cs(23,9): error CS0120: An object reference is required for the non-static field, method, or property 'VideoPlayer.Pause()'
Assetsvp_time.cs(27,9): error CS0120: An object reference is required for the non-static field, method, or property 'VideoPlayer.Play()'
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
using Vuforia;
public class vp_time : MonoBehaviour
{
public GameObject vbBtnObj;
public GameObject vbVpObj;
// Start is called before the first frame update
void Start()
{
vbBtnObj = GameObject.Find("VideoBtn");
vbBtnObj.GetComponent<VirtualButtonBehaviour>().RegisterOnButtonPressed(OnButtonPressed);
vbBtnObj.GetComponent<VirtualButtonBehaviour>().RegisterOnButtonReleased(OnButtonReleased);
vbVpObj.GetComponent<VideoPlayer>();
}
public void OnButtonPressed(VirtualButtonBehaviour vb){
VideoPlayer.Pause();
}
public void OnButtonReleased(VirtualButtonBehaviour vb){
VideoPlayer.Play();
}
// Update is called once per frame
void Update()
{
}
}
Ответ №1:
Ну, как говорится в ошибке VideoPlayer
, это тип. У него нет static
метода VideoPlayer.Play
. Вам нужна ссылка на экземпляр type VideoPlayer
и вызов метода для этого экземпляра.
vbVpObj.GetComponent<VideoPlayer>();
эта строка абсолютно ничего не делает!
Вы скорее хотели сохранить эту ссылку в поле
// Drag this already in via the Inspector in Unity
[SerializeField] private VideoPlayer videoPlayer;
или сделать
private void Start ()
{
...
// As fallback get the reference on runtime ONCE
if(!videoPlayer) videoPlayer = vbVpObj.GetComponent<VideoPlayer>();
}
и позже
videoPlayer.Play();
и
videoPlayer.Pause();