112 lines
3.9 KiB
C#
112 lines
3.9 KiB
C#
/*----------------------------------------------------------------
|
||
// Copyright (C) 2025 Beijing All rights reserved.
|
||
//
|
||
// Author: huachangmiao
|
||
// Create Date: 2025/04/11
|
||
// Module Describe: Hierarchy 右键菜单创建视频播放器
|
||
//----------------------------------------------------------------*/
|
||
|
||
using UnityEngine;
|
||
using UnityEditor;
|
||
using UnityEngine.UI;
|
||
|
||
public static class LeviathanVideoMenu
|
||
{
|
||
/// <summary>
|
||
/// 创建 UI 视频播放器 (RawImage)
|
||
/// </summary>
|
||
[MenuItem("GameObject/Leviathan Video/Leviathan Video Player (UI)", false, 10)]
|
||
private static void CreateUIVideoPlayer(MenuCommand menuCommand)
|
||
{
|
||
// 创建 GameObject
|
||
GameObject go = new GameObject("LeviathanVideoPlayer");
|
||
|
||
// 添加 RectTransform(UI 组件需要)
|
||
RectTransform rectTransform = go.AddComponent<RectTransform>();
|
||
rectTransform.sizeDelta = new Vector2(400, 300);
|
||
|
||
// 添加 RawImage 组件(LeviathanVideoDecoder 需要)
|
||
RawImage rawImage = go.AddComponent<RawImage>();
|
||
rawImage.color = Color.white;
|
||
|
||
// 添加视频解码器组件
|
||
go.AddComponent<LeviathanVideoDecoder>();
|
||
|
||
// 设置父物体
|
||
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
|
||
|
||
// 如果没有父物体,尝试放到 Canvas 下
|
||
if (go.transform.parent == null)
|
||
{
|
||
Canvas canvas = Object.FindObjectOfType<Canvas>();
|
||
if (canvas != null)
|
||
{
|
||
go.transform.SetParent(canvas.transform, false);
|
||
}
|
||
else
|
||
{
|
||
// 如果没有 Canvas,创建一个
|
||
GameObject canvasGO = new GameObject("Canvas");
|
||
canvas = canvasGO.AddComponent<Canvas>();
|
||
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
||
canvasGO.AddComponent<CanvasScaler>();
|
||
canvasGO.AddComponent<GraphicRaycaster>();
|
||
go.transform.SetParent(canvas.transform, false);
|
||
}
|
||
}
|
||
|
||
// 注册撤销
|
||
Undo.RegisterCreatedObjectUndo(go, "Create Leviathan Video Player (UI)");
|
||
|
||
// 选中创建的对象
|
||
Selection.activeObject = go;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建 3D 视频播放器 (Cube)
|
||
/// </summary>
|
||
[MenuItem("GameObject/Leviathan Video/Leviathan Video Player (3D Cube)", false, 11)]
|
||
private static void Create3DVideoPlayerCube(MenuCommand menuCommand)
|
||
{
|
||
// 创建 Cube
|
||
GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||
go.name = "LeviathanVideoPlayer3D";
|
||
|
||
// 添加视频渲染器组件
|
||
go.AddComponent<LeviathanVideo3DRenderer>();
|
||
|
||
// 设置父物体
|
||
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
|
||
|
||
// 注册撤销
|
||
Undo.RegisterCreatedObjectUndo(go, "Create Leviathan Video Player (3D Cube)");
|
||
|
||
// 选中创建的对象
|
||
Selection.activeObject = go;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建 3D 视频播放器 (Quad/Plane)
|
||
/// </summary>
|
||
[MenuItem("GameObject/Leviathan Video/Leviathan Video Player (3D Quad)", false, 12)]
|
||
private static void Create3DVideoPlayerQuad(MenuCommand menuCommand)
|
||
{
|
||
// 创建 Quad
|
||
GameObject go = GameObject.CreatePrimitive(PrimitiveType.Quad);
|
||
go.name = "LeviathanVideoPlayer3D";
|
||
|
||
// 添加视频渲染器组件
|
||
go.AddComponent<LeviathanVideo3DRenderer>();
|
||
|
||
// 设置父物体
|
||
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
|
||
|
||
// 注册撤销
|
||
Undo.RegisterCreatedObjectUndo(go, "Create Leviathan Video Player (3D Quad)");
|
||
|
||
// 选中创建的对象
|
||
Selection.activeObject = go;
|
||
}
|
||
}
|
||
|