В первой сцене игры я играю видео, как только игра начнет использовать видеоплайер Unity < /code>.
Вот что происходит: < /p>
Когда видео играет все, что работает, как нет, с помощью как все работает, и с вида, и с помощью, с оба, с оба, с оба, с помощью видео все работает. После того, как видео заканчивается, следующая сцена загружается, и элементы пользовательского интерфейса, такие как Canvas правильно исчезают. Понятно, что видео воспроизводится, потому что я могу слышать звук, но на экране ничего не отображается. Canvas не исчезает. Формат файла: .mp4 , размещенный в StreatingAssets .
Я также использую Graphics Jobs и многопоточный рендеринг , и я подозреваю, что они могут быть связаны. Кто -нибудь испытал подобное поведение или имел предложения о том, как исправить или отладить это?
Код: Выделить всё
public class LogoScene : MonoBehaviour
{
[SerializeField] private AudioMixer mixer;
[SerializeField] private VideoPlayer videoPlayer;
[SerializeField] private new Renderer renderer;
private void Start()
{
InitializeVideo();
}
private void InitializeVideo()
{
if (videoPlayer == null || renderer == null)
{
Debug.LogError("VideoPlayer or Renderer is not assigned!");
return;
}
string videoPath = System.IO.Path.Combine(Application.streamingAssetsPath, "LogoMotionMionik.mp4");
#if UNITY_ANDROID && !UNITY_EDITOR
videoPlayer.url = videoPath;
#else
videoPlayer.url = "file://" + videoPath;
#endif
videoPlayer.started += OnVideoStarted;
videoPlayer.loopPointReached += OnLoopPointReached;
videoPlayer.prepareCompleted += OnPrepareCompleted;
videoPlayer.errorReceived += OnVideoError;
videoPlayer.Prepare();
}
private void OnVideoError(VideoPlayer source, string message)
{
SceneManager.LoadScene(1);
}
private void OnPrepareCompleted(VideoPlayer source)
{
videoPlayer.Play();
}
private void OnVideoStarted(VideoPlayer source)
{
renderer.material.color = new Color(1f, 1f, 1f, 1f);
}
private void OnLoopPointReached(VideoPlayer source)
{
videoPlayer.started -= OnVideoStarted;
videoPlayer.loopPointReached -= OnLoopPointReached;
videoPlayer.prepareCompleted -= OnPrepareCompleted;
SceneManager.LoadScene(1);
}
}
Код: Выделить всё
public void LoadScene(Scene scene, float fadeDelay = 0, float waitTime = 0)
{
if (SceneManager.GetActiveScene().name == scene.ToString()) return;
_canvasGroup.blocksRaycasts = true;
Application.backgroundLoadingPriority = ThreadPriority.High;
StartCoroutine(LoadSceneEnum(scene, fadeDelay, waitTime));
}
private IEnumerator LoadSceneEnum(Scene scene, float fadeDelay = 0, float waitTime = 0)
{
DOTween.Kill(_canvasGroup);
yield return _canvasGroup.DOFade(1, .3f).SetDelay(fadeDelay).SetEase(Ease.Linear).WaitForCompletion();
if (waitTime > 0)
yield return new WaitForSeconds(waitTime);
yield return null;
var asyncOperation = SceneManager.LoadSceneAsync(scene.ToString(), LoadSceneMode.Single);
asyncOperation.allowSceneActivation = false;
while (asyncOperation.progress < 0.9f)
{
yield return null;
}
yield return SceneActivationDelay;
asyncOperation.allowSceneActivation = true;
while (!asyncOperation.isDone)
{
yield return null;
}
👉_canvasGroup.DOFade(0, 1f);
**This code is where things don't work correctly, and the Canvas doesn't fade in if the video in the previous scene didn't play properly.**
Application.backgroundLoadingPriority = ThreadPriority.Low;
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... roid-build