播放视频引导

main
yurui 2024-05-24 15:07:50 +08:00
parent 5972eed92f
commit bb6f00e5e7
9 changed files with 840 additions and 3 deletions

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: dfc953a58b4d9274fb3943382c442f7d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,537 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1407983806254288158
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2574958771690436741}
- component: {fileID: 8315029369043761832}
- component: {fileID: 4399687919276303790}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2574958771690436741
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1407983806254288158}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 153629090011074926}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 13}
m_SizeDelta: {x: 378, y: 112}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8315029369043761832
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1407983806254288158}
m_CullTransparentMesh: 1
--- !u!114 &4399687919276303790
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1407983806254288158}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: "\u8DF3\u8FC7"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: d996718f19de68245bc356be2938e063, type: 2}
m_sharedMaterial: {fileID: -8559898196655864114, guid: d996718f19de68245bc356be2938e063,
type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 50
m_fontSizeBase: 50
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_enableWordWrapping: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &1558783236151293779
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 153629090011074926}
- component: {fileID: 8337583993852733053}
- component: {fileID: 4780584252771821704}
- component: {fileID: 5100073563909549961}
m_Layer: 5
m_Name: ButtonSkip
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &153629090011074926
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1558783236151293779}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2574958771690436741}
m_Father: {fileID: 734077920832269191}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -15, y: -16}
m_SizeDelta: {x: 378, y: 111}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8337583993852733053
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1558783236151293779}
m_CullTransparentMesh: 1
--- !u!114 &4780584252771821704
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1558783236151293779}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 2d3a343aa88f98c4eab8503ffccd828e, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &5100073563909549961
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1558783236151293779}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 4780584252771821704}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1 &5591672884844066155
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7581025338141196448}
m_Layer: 5
m_Name: UI_PlayVideo
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7581025338141196448
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5591672884844066155}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3335416349094137413}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -1820, y: -980}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &8415525795393985440
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3335416349094137413}
- component: {fileID: 5467700285911904373}
- component: {fileID: 1539001798671729197}
- component: {fileID: 1721757717761397659}
- component: {fileID: 2981469153207997975}
m_Layer: 5
m_Name: ImageBG
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3335416349094137413
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8415525795393985440}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 734077920832269191}
m_Father: {fileID: 7581025338141196448}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 1821, y: 981}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5467700285911904373
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8415525795393985440}
m_CullTransparentMesh: 1
--- !u!114 &1539001798671729197
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8415525795393985440}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Texture: {fileID: 0}
m_UVRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
--- !u!328 &1721757717761397659
VideoPlayer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8415525795393985440}
m_Enabled: 1
m_VideoClip: {fileID: 0}
m_TargetCameraAlpha: 1
m_TargetCamera3DLayout: 0
m_TargetCamera: {fileID: 0}
m_TargetTexture: {fileID: 0}
m_TimeReference: 0
m_TargetMaterialRenderer: {fileID: 0}
m_TargetMaterialProperty: <noninit>
m_RenderMode: 2
m_AspectRatio: 2
m_DataSource: 1
m_TimeUpdateMode: 2
m_PlaybackSpeed: 1
m_AudioOutputMode: 1
m_TargetAudioSources:
- {fileID: 2981469153207997975}
m_DirectAudioVolumes:
- 1
m_Url:
m_EnabledAudioTracks: 01
m_DirectAudioMutes: 00
m_ControlledAudioTrackCount: 1
m_PlayOnAwake: 0
m_SkipOnDrop: 1
m_Looping: 0
m_WaitForFirstFrame: 1
m_FrameReadyEventEnabled: 0
m_VideoShaders: []
--- !u!82 &2981469153207997975
AudioSource:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8415525795393985440}
m_Enabled: 1
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 0}
m_PlayOnAwake: 1
m_Volume: 1
m_Pitch: 1
Loop: 0
Mute: 0
Spatialize: 0
SpatializePostEffects: 0
Priority: 128
DopplerLevel: 1
MinDistance: 1
MaxDistance: 500
Pan2D: 0
rolloffMode: 0
BypassEffects: 0
BypassListenerEffects: 0
BypassReverbZones: 0
rolloffCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
panLevelCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spreadCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMixCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!1 &8653058590332840382
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 734077920832269191}
m_Layer: 5
m_Name: UI_Topbtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &734077920832269191
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8653058590332840382}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 153629090011074926}
m_Father: {fileID: 3335416349094137413}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 725.8, y: -85.80005}
m_SizeDelta: {x: 464.90002, y: 100}
m_Pivot: {x: 0.5, y: 0.5}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9dc03ace008c7cc43a91ea05cada20b5
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -235,7 +235,12 @@
IAPServerVerifySuccessful,
//界面跳转完成
WindowJumpFinished
WindowJumpFinished,
/// <summary>
/// 播放视频完成
/// </summary>
PlayVideoComplete,
}
}
}

View File

@ -43,6 +43,7 @@ public partial class UIManager
_WindowMeta(UINameConst.UI_Raffle, UIWindowLayer.Normal, UIOpenType.FullScreen);
_WindowMeta(UINameConst.UI_RaffleAnim, UIWindowLayer.Normal);
_WindowMeta(UINameConst.UI_RaffleOneResult, UIWindowLayer.Normal);
_WindowMeta(UINameConst.UI_PlayVideo, UIWindowLayer.Normal, UIOpenType.FullScreen);
_WindowMeta(UINameConst.UIStoryMain, UIWindowLayer.Normal);
_WindowMeta(UINameConst.UINewLogin, UIWindowLayer.Normal);
_WindowMeta(UINameConst.UIGiftCode, UIWindowLayer.Normal);
@ -162,6 +163,11 @@ public static class UINameConst
/// </summary>
public static readonly string UI_RaffleTotalResult = "MainScene/Raffle/UI_RaffleTotalResult"; // 测试
/// <summary>
/// 播放视频界面
/// </summary>
public static readonly string UI_PlayVideo = "Interface/UI_PlayVideo";
public static readonly string UIVersionUpdate = "VersionUpdate/UI_VersionUpdate";
public static readonly string UINewLogin = "StartScene/UINewLogin";

View File

@ -35,6 +35,15 @@ public class GuideManager : Singlenton<GuideManager>, IInitable
EventManager.Instance.Unregister(EventManager.EventName.AllConfigLoad, InitData);
}
/// <summary>
/// 完成指定引导步骤
/// </summary>
/// <param name="step"></param>
public void Complete(GuideStepBase step)
{
}
/// <summary>
/// 初始化数据
/// </summary>

View File

@ -1,8 +1,29 @@
using cfg.GuideCfg;
using Framework;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 引导状态
/// </summary>
public enum E_GuideState
{
/// <summary>
/// 未开始
/// </summary>
NotStarted,
/// <summary>
/// 引导中
/// </summary>
Guiding,
/// <summary>
/// 引导完成
/// </summary>
Complete,
}
/// <summary>
/// 引导步骤基类
/// </summary>
@ -13,10 +34,57 @@ public abstract class GuideStepBase
/// </summary>
public string StepType;
/// <summary>
/// 引导状态
/// </summary>
protected E_GuideState guideState;
public GuideStepBase(DataGuideCfg dataGuideCfg)
{
guideState = E_GuideState.NotStarted;
}
public void StartGuide()
{
DoBeforeGuide();
guideState = E_GuideState.Guiding;
DoGuide();
}
/// <summary>
/// 完成引导
/// </summary>
public void Complete()
{
if (E_GuideState.NotStarted == guideState)
return;
if (E_GuideState.Complete == guideState)
return;
guideState = E_GuideState.Complete;
DoBeforeComplete();
GuideManager.Instance.Complete(this);
}
/// <summary>
/// 引导显示之前
/// </summary>
protected virtual void DoBeforeGuide()
{ }
/// <summary>
/// 引导完成之前
/// </summary>
protected virtual void DoBeforeComplete()
{ }
/// <summary>
/// 引导
/// </summary>
protected abstract void DoGuide();
}
/// <summary>
@ -27,11 +95,55 @@ public class ClickButtonStep : GuideStepBase
public ClickButtonStep(DataGuideCfg dataGuideCfg) : base(dataGuideCfg)
{
}
protected override void DoGuide()
{
}
}
/// <summary>
/// 播放视频
/// </summary>
public class PlayVideoStep : GuideStepBase
{
public PlayVideoStep(DataGuideCfg dataGuideCfg) : base(dataGuideCfg)
/// <summary>
/// 视频路径
/// </summary>
private readonly string videoPath;
public PlayVideoStep(DataGuideCfg cfg) : base(cfg)
{
if (cfg.GuideTypeParams.Length <= 0)
throw new Exception($"引导类型:{StepType}参数错误");
videoPath = cfg.GuideTypeParams[0];
}
protected override void DoBeforeGuide()
{
EventManager.Instance.Register(EventManager.EventName.PlayVideoComplete, (Action<string>)OnPlayVideoComplete);
}
protected override async void DoGuide()
{
await UI_PlayVideoController.Open(videoPath);
}
protected override void DoBeforeComplete()
{
EventManager.Instance.Unregister(EventManager.EventName.PlayVideoComplete, (Action<string>)OnPlayVideoComplete);
}
/// <summary>
/// 播放视频完成回调
/// </summary>
/// <param name="path"></param>
private void OnPlayVideoComplete(string path)
{
if (path != videoPath)
return;
Complete();
}
}

View File

@ -0,0 +1,142 @@
using Cysharp.Threading.Tasks;
using Framework;
using Gameplay;
using Gameplay.Performance;
using PhxhSDK;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
using YooAsset;
using SceneHandle = PhxhSDK.Res.SceneHandle;
/// <summary>
/// 播放视频
/// </summary>
public class UI_PlayVideoController : UIWindow
{
/// <summary>
/// 打开播放视频界面
/// </summary>
public static async UniTask<UIWindow> Open(string path)
{
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_PlayVideo, path);
}
/// <summary>
/// 视频播放器
/// </summary>
private VideoPlayer videoPlayer;
private AudioSource audioSource;
private RawImage rawImage;
/// <summary>
/// 视频播放rt
/// </summary>
private RenderTexture renderTexture;
/// <summary>
/// 跳过按钮
/// </summary>
private Button buttonSkip;
/// <summary>
/// 使用的视频路径
/// </summary>
private string videoPath;
public override void OnInit()
{
videoPlayer = GetComponent<VideoPlayer>("ImageBG");
audioSource = GetComponent<AudioSource>("ImageBG");
rawImage = GetComponent<RawImage>("ImageBG");
buttonSkip = GetComponent<Button>("ImageBG/UI_Topbtn/ButtonSkip");
renderTexture = RenderTexturePool.Instance.Create("Video", PerformanceManager.instance.fullScreenWidth, PerformanceManager.instance.fullScreenHeight);
renderTexture.depthStencilFormat = UnityEngine.Experimental.Rendering.GraphicsFormat.None;
videoPlayer.targetTexture = renderTexture;
rawImage.texture = renderTexture;
BindButton(buttonSkip, OnSkip);
}
protected override async void OnShowWindow(object data = null)
{
if (data is string path)
videoPath = path;
SceneHandle sceneHandle = GameSceneHelper.Instance.GetCurrentUIViewScene();
GameSceneHelper.Instance.SetSceneActiveForUIView(sceneHandle, false); // 隐藏抽卡场景,减少播视频的渲染压力
CommonUtils.GetVideoPathByPerformance(ref videoPath);
DebugUtil.Log($"开始加载video path: {videoPath}");
RawFileHandle rawFileHandle = AssetManager.Instance.LoadRawFileAsync(videoPath);
await rawFileHandle;
string realPath = rawFileHandle.GetRawFilePath();
DebugUtil.Log($"获取到真实路径: {realPath}");
string mp4Path = realPath;
if (!mp4Path.EndsWith(".mp4"))
mp4Path += ".mp4";
if (!File.Exists(mp4Path))
{
DebugUtil.Log("文件不存在复制一份到mp4Path");
File.Copy(realPath, mp4Path);
}
audioSource.volume = AudioManager.Instance.GlobalMusicVolume;
videoPlayer.loopPointReached += OnEndPlayer;
videoPlayer.prepareCompleted += OnPreCompleted;
videoPlayer.url = mp4Path;
videoPlayer.Prepare();
}
protected override void OnHideWindow()
{
videoPlayer.prepareCompleted -= OnPreCompleted;
videoPlayer.loopPointReached -= OnEndPlayer;
SceneHandle sceneHandle = GameSceneHelper.Instance.GetCurrentUIViewScene();
GameSceneHelper.Instance.SetSceneActiveForUIView(sceneHandle, true);
}
public override void OnRelease()
{
RenderTexturePool.Instance.Destroy(renderTexture);
}
#region 回调
/// <summary>
/// 播放完毕
/// </summary>
/// <param name="videoPlayer"></param>
private void OnEndPlayer(VideoPlayer videoPlayer)
{
videoPlayer.loopPointReached -= OnEndPlayer;
if (videoPlayer.isPlaying)
videoPlayer.Stop();
CloseWindow();
EventManager.Instance.Send(EventManager.EventName.PlayVideoComplete, videoPath);
}
/// <summary>
/// 视频加载完成
/// </summary>
/// <param name="videoPlayer"></param>
private void OnPreCompleted(VideoPlayer videoPlayer)
{
videoPlayer.targetTexture.Release();
videoPlayer.Play();
}
/// <summary>
/// 跳过
/// </summary>
private void OnSkip()
{
OnEndPlayer(videoPlayer);
}
#endregion
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: be07b99248bc752468e41522287ec528
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: