Files
Fishing2/Assets/Scripts/Editor/ZHWindow.cs
2025-05-10 12:49:47 +08:00

145 lines
4.3 KiB
C#

using System;
using UnityEditor;
using UnityEngine;
using UnityEngine.Video;
using Object = UnityEngine.Object;
namespace NBF
{
public class ZHWindow : EditorWindow
{
[MenuItem("Window/ZH窗口")]
public static void ShowWindow()
{
GetWindow<ZHWindow>("Scene - ZH");
}
private bool _isInitialized;
private VideoPlayer _videoPlayer;
private RenderTexture _renderTexture;
private long _lastInitTime;
private int _videoIndex = 1;
private void OnEnable()
{
InitializePlayer();
// 注册更新回调
EditorApplication.update += OnEditorUpdate;
}
private void InitializePlayer()
{
if (_isInitialized) return;
_lastInitTime = DateTimeOffset.Now.ToUnixTimeSeconds();
var obj = GameObject.Find("ZHVideoPlayer");
if (obj == null) return;
_videoPlayer = GameObject.Find("ZHVideoPlayer").GetComponent<VideoPlayer>();
_videoPlayer.isLooping = true;
_renderTexture = _videoPlayer.targetTexture;
// 设置 RenderTexture
// _renderTexture = new RenderTexture(408, 720, 0);
_videoPlayer.renderMode = VideoRenderMode.RenderTexture;
// _videoPlayer.targetTexture = _renderTexture;
// _videoPlayer.playbackSpeed = 0.5f;
// 加载视频
string videoPath = $"ResRaw/Test/video{_videoIndex}.mp4"; // 修改为你的视频路径
var path = System.IO.Path.Combine(Application.dataPath, videoPath);
_videoPlayer.url = path;
_videoPlayer.Prepare();
_videoPlayer.Play();
_isInitialized = true;
_videoIndex++;
if (_videoIndex > 8)
{
_videoIndex = 1;
}
}
private void OnEditorUpdate()
{
if (_videoPlayer != null && _videoPlayer.isPrepared)
{
Repaint();
}
}
private void OnGUI()
{
var currentTime = DateTimeOffset.Now.ToUnixTimeSeconds();
if (currentTime - _lastInitTime > 30)
{
_isInitialized = false;
}
if (!_isInitialized)
{
// EditorGUILayout.HelpBox(
// "Video Player is not initialized. Please ensure the video file is properly set.",
// MessageType.Warning);
InitializePlayer();
return;
}
if (_videoPlayer == null || _renderTexture == null)
{
ReleaseResources();
InitializePlayer();
return;
}
if (!_videoPlayer.isPlaying)
{
_videoPlayer.Play();
}
if (_renderTexture != null)
{
float width = position.width;
float height = position.height;
// 计算视频显示比例
float targetAspect = (float)_renderTexture.width / _renderTexture.height;
float windowAspect = width / height;
float displayWidth, displayHeight;
if (windowAspect > targetAspect)
{
displayHeight = height;
displayWidth = height * targetAspect;
}
else
{
displayWidth = width;
displayHeight = width / targetAspect;
}
// 居中显示视频
float offsetX = (width - displayWidth) / 2f;
float offsetY = (height - displayHeight) / 2f;
GUI.DrawTexture(new Rect(offsetX, offsetY, displayWidth, displayHeight), _renderTexture);
}
}
private void OnDisable()
{
ReleaseResources();
// 移除更新回调
EditorApplication.update -= OnEditorUpdate;
}
private void ReleaseResources()
{
if (_videoPlayer != null)
{
_videoPlayer.Stop();
// DestroyImmediate(_videoPlayer.gameObject);
_videoPlayer = null;
}
_isInitialized = false;
}
}
}