264 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			264 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# TsScreenPlayerTextureRenderer
							 | 
						|||
| 
								 | 
							
								   - MultiViewActor: UE.MultiViewActor;// 用于渲染pvw/pgm画面
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								- ReceiveBeginPlay() =>
							 | 
						|||
| 
								 | 
							
									- this.RegisterLocalEventListener(); =>
							 | 
						|||
| 
								 | 
							
										- this.ChangeCameraTask(TaskData);
							 | 
						|||
| 
								 | 
							
								## RegisterLocalEventListener
							 | 
						|||
| 
								 | 
							
								```ts
							 | 
						|||
| 
								 | 
							
								private RegisterLocalEventListener(): void {
							 | 
						|||
| 
								 | 
							
									this.PVWCameraChangeFunc = (TaskData: UE.CamTaskDataRPC) => {
							 | 
						|||
| 
								 | 
							
										if (this.CurTag == DirectorMode.PVWCameraRenderer) {
							 | 
						|||
| 
								 | 
							
											this.ChangeCameraTask(TaskData);
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									this.PGMCameraChangeFunc = (TaskData: UE.CamTaskDataRPC) => {
							 | 
						|||
| 
								 | 
							
										if (this.CurTag == DirectorMode.PGMCameraRenderer) {
							 | 
						|||
| 
								 | 
							
											this.ChangeCameraTask(TaskData);
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									this.SwitchDirectorNetTagFunc = (oldTag: UE.GameplayTag, newTag: UE.GameplayTag) => {
							 | 
						|||
| 
								 | 
							
										this.SwitchDirectorNetTagCallback(oldTag, newTag);
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									DirectorEventSystem.RegisterEventListener(this, DirectorEvent.OnPVWTaskRequested, this.PVWCameraChangeFunc);
							 | 
						|||
| 
								 | 
							
									DirectorEventSystem.RegisterEventListener(this, DirectorEvent.OnPGMTaskRequested, this.PGMCameraChangeFunc);
							 | 
						|||
| 
								 | 
							
									DirectorEventSystem.RegisterEventListener(this, DirectorEvent.SwitchDirectorMode, this.SwitchDirectorNetTagFunc)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								## ChangeCameraTask
							 | 
						|||
| 
								 | 
							
								```ts
							 | 
						|||
| 
								 | 
							
								    ChangeCameraTask(TaskData: UE.CamTaskDataRPC) {
							 | 
						|||
| 
								 | 
							
								        if(!this.bStarted){
							 | 
						|||
| 
								 | 
							
								            return;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        if(this.DirectorCamManagerActor == null){
							 | 
						|||
| 
								 | 
							
								            this.DirectorCamManagerActor = this.GetCameraManagerActor();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // double check
							 | 
						|||
| 
								 | 
							
								        if(this.DirectorCamManagerActor == null){
							 | 
						|||
| 
								 | 
							
								            return;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        if (this.Task) {
							 | 
						|||
| 
								 | 
							
								            this.Task.Stop();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        this.Task = DirectorCamUtil.CreateCamTask(this, TaskData, CamTaskType.FullStream, this.DirectorCamManagerActor.droneCamera, null, this.DirectorCamManagerActor.handHeldCamera)
							 | 
						|||
| 
								 | 
							
								        if (this.Task) {
							 | 
						|||
| 
								 | 
							
								            this.Task.Start()
							 | 
						|||
| 
								 | 
							
								            this.BindCamera(this.Task.TryGetBindedMainCamera());
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# DirectorCamGroup.cpp
							 | 
						|||
| 
								 | 
							
								```c++
							 | 
						|||
| 
								 | 
							
								UDirectorSequencePlayer* UDirectorCamGroup::GetDirectorSequencePlayerFromPool(int CamIndex, bool IsPreview)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									TargetPlayer = NewObject<UDirectorSequencePlayer>(this);  
							 | 
						|||
| 
								 | 
							
									TargetPlayer->SetCamSequence(CamIndex, SequenceActor);  
							 | 
						|||
| 
								 | 
							
									if(IsPreview)  
							 | 
						|||
| 
								 | 
							
									{  
							 | 
						|||
| 
								 | 
							
									    CachedPreviewingPlayer.AddUnique(TargetPlayer);  
							 | 
						|||
| 
								 | 
							
									}  
							 | 
						|||
| 
								 | 
							
									else  
							 | 
						|||
| 
								 | 
							
									{  
							 | 
						|||
| 
								 | 
							
									    CachedStreamingPlayer.AddUnique(TargetPlayer);  
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# PVW & PGM红框效果代码 TsDirectorCamManagerActor.ts
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								//客户机加入流程:
							 | 
						|||
| 
								 | 
							
								//连接Server->同步当前场景->场景加载完成后收到本地事<E59CB0>?->初始化workShop
							 | 
						|||
| 
								 | 
							
								//->确认机器身份,执行本机任务(异步任务处理流程)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//异步处理流程:根据机器的性能,加入时间不同,状态差异自适应处理任务逻辑
							 | 
						|||
| 
								 | 
							
								// 服务端收到任务请<E58AA1>?->确保服务端的workShop初始化完<E58C96>?->处理数据及同<E58F8A>??
							 | 
						|||
| 
								 | 
							
								// ->客户机收到同步数据后->等待自己的workshop初始化完<E58C96>?->处理自己的逻辑
							 | 
						|||
| 
								 | 
							
								// 同一种任务只处理最近一<E8BF91>?
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## HandlePreStreamTaskByNetTag()
							 | 
						|||
| 
								 | 
							
								相关切区域与切镜代码会调用RequestPVWTaskServer()
							 | 
						|||
| 
								 | 
							
								RequestPVWTaskServer() =>
							 | 
						|||
| 
								 | 
							
								RequestPVWTask() => HandlePreStreamTaskDataMulticast() => HandlePreStreamTaskByNetTag()
							 | 
						|||
| 
								 | 
							
								```ts
							 | 
						|||
| 
								 | 
							
								HandlePreStreamTaskByNetTag(): void {
							 | 
						|||
| 
								 | 
							
									if (this.prestreamTaskData) {
							 | 
						|||
| 
								 | 
							
										switch (Utils.GetDirectorMode(this).TagName) {
							 | 
						|||
| 
								 | 
							
											case DirectorMode.PVWAndPGM:
							 | 
						|||
| 
								 | 
							
												if(!DirectorCamUtil.SubmitNewCommandIfDataNotChanged(this.preStreamTask, this.prestreamTaskData)){
							 | 
						|||
| 
								 | 
							
													if (this.preStreamTask) {
							 | 
						|||
| 
								 | 
							
														this.preStreamTask.Stop()
							 | 
						|||
| 
								 | 
							
													}
							 | 
						|||
| 
								 | 
							
													this.preStreamTask = DirectorCamUtil.CreateCamTask(this, this.prestreamTaskData, CamTaskType.FullStream, this.droneCamera,
							 | 
						|||
| 
								 | 
							
														this.PVWWindow, this.handHeldCamera)
							 | 
						|||
| 
								 | 
							
													if (this.preStreamTask) {
							 | 
						|||
| 
								 | 
							
														this.preStreamTask.Start()
							 | 
						|||
| 
								 | 
							
														if (this.PVWWindow) {
							 | 
						|||
| 
								 | 
							
															this.PVWWindow.SetViewBorderColor(0, new UE.LinearColor(0, 1, 0, 1))
							 | 
						|||
| 
								 | 
							
														}
							 | 
						|||
| 
								 | 
							
														console.log('PVW Task:' + this.preStreamTask.workShop.BindPlacement.Title + " " + this.preStreamTask.groupName + " " +
							 | 
						|||
| 
								 | 
							
															this.preStreamTask.camName)
							 | 
						|||
| 
								 | 
							
													}
							 | 
						|||
| 
								 | 
							
												}
							 | 
						|||
| 
								 | 
							
												break
							 | 
						|||
| 
								 | 
							
											case DirectorMode.Preview:
							 | 
						|||
| 
								 | 
							
												this.RefreshWindowViewBorderColor()
							 | 
						|||
| 
								 | 
							
												break
							 | 
						|||
| 
								 | 
							
											case DirectorMode.PVW:
							 | 
						|||
| 
								 | 
							
												this.HandlePVWTask()
							 | 
						|||
| 
								 | 
							
												break;
							 | 
						|||
| 
								 | 
							
											default:
							 | 
						|||
| 
								 | 
							
												break
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 130mm Bug日志
							 | 
						|||
| 
								 | 
							
								```c++
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.09:625][373]Puerts: (0x00000703D1DF42D0) request PVW: WorkShop:3F855CF84C91BBD9207C0FAF5273586C, CamGroup:9223AA8A478BA88F1217CD86911EDAE1, Index=0, StartFrame:0
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.09:626][373]LogLevelSequence: Starting new camera cut: 'Cam_TalkShowZuo_ZhuJiWei24mm_1'
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.09:626][373]Puerts: (0x00000703D1DF42D0) 设置相机目标:
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.09:626][373]Puerts: (0x00000703D1DF42D0) PVW Task: 线下 站\n4 ZhuJiWei24mm
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:550][487]Puerts: Warning: (0x00000703D1DF42D0) PauseOrResumeAllFxProp ,true
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:551][487]Puerts: Warning: (0x00000703D1DF42D0) PauseOrResumeAllFxProp ,false
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:551][487]LogChaosBone: Display: ResetDynamics: 1, ChaosBoneAssets Name: CBA_SK_JiaRan_Costume_BHair
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:551][487]LogChaosBone: Display: ResetDynamics: 1, ChaosBoneAssets Name: CBA_SK_JiaRan_Costume_dress
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:602][490]Puerts: Warning: (0x00000703D1DF42D0) BP_JiaRan_Costume_C_0 set visible  false
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:602][490]Puerts: Warning: (0x00000703D1DF42D0) teleport to livearea 031D1C1742D7EB4C76F6B397FF404FD8
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:602][490]Puerts: Warning: (0x00000703D1DF42D0) PauseOrResumeAllFxProp ,true
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:602][490]Puerts: (0x00000703D1DF42D0) X=0.000 Y=0.000 Z=0.000
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:602][490]Puerts: Warning: (0x00000703D1DF42D0) PauseOrResumeAllFxProp ,false
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:602][490]Puerts: (0x00000703D1DF42D0) BP_JiaRan_Costume_C_0,attach prop ,玩具水枪A
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:603][490]Puerts: Warning: (0x00000703D1DF42D0) get socket of JiaRan: RightHandSocket
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:604][490]Puerts: (0x00000703D1DF42D0) Attach prop 玩具水枪A
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.11:604][490]Puerts: (0x00000703D1DF42D0) Idol.JiaRan successfully switch to 031D1C1742D7EB4C76F6B397FF404FD8
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:085][519]Puerts: Error: (0x00000703D1DF42D0) OnFinishDisappearFx(), but the idol visibility is true!!BP_JiaRan_Costume_C_0
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:107][520]Puerts: Warning: (0x00000703D1DF42D0) BP_JiaRan_Costume_C_0 set visible  true
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:108][520]LogBlueprintUserMessages: [BP_JiaRan_Costume_C_0] Apply Material.  Oringinal Material: false
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:108][520]Puerts: (0x00000703D1DF42D0) RefreshSceneCaptureShowList
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:109][520]Puerts: (0x00000703D1DF42D0) CheckItemFxPool, size 0
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:109][520]Puerts: (0x00000703D1DF42D0) TriggerHandPose 
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:109][520]Puerts: (0x00000703D1DF42D0) TriggerHandPose 
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:109][520]Puerts: Warning: (0x00000703D1DF42D0) Disable instrument pose
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:109][520]Puerts: (0x00000703D1DF42D0) Detect hand pose ToyGun
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:109][520]Puerts: (0x00000703D1DF42D0) TriggerHandPose ToyGun
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:455][541]Puerts: (0x00000703D1DF42D0) request PGM: WorkShop:3F855CF84C91BBD9207C0FAF5273586C, CamGroup:9223AA8A478BA88F1217CD86911EDAE1, Index=0, StartFrame:0 , PushMethod =0
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.12:805][562]Puerts: (0x00000703D1DF42D0) request PGM: WorkShop:3F855CF84C91BBD9207C0FAF5273586C, CamGroup:9223AA8A478BA88F1217CD86911EDAE1, Index=0, StartFrame:0 , PushMethod =0
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.14:606][670]LogBlueprintUserMessages: [BP_JiaRan_Costume_C_0] Apply Material.  Oringinal Material: true
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.15:822][743]Puerts: (0x00000703D1DF42D0) request PVW: WorkShop:3F855CF84C91BBD9207C0FAF5273586C, CamGroup:DDB1F27A44E7E5B312830A828EB55464, Index=0, StartFrame:0
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.15:823][743]LogLevelSequence: Starting new camera cut: 'Cine_Camera_Actor_1'
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.15:823][743]Puerts: (0x00000703D1DF42D0) 设置相机目标:
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.15:824][743]Puerts: (0x00000703D1DF42D0) PVW Task: 线下 贝拉2024生日 lengthtest
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.15:824][743]LogBlueprintUserMessages: [BP_Cine_Cam_FOV_1] 35.0
							 | 
						|||
| 
								 | 
							
								[2024.08.06-05.08.16:256][769]LogBlueprintUserMessages: [BP_Cine_Cam_FOV_1] 35.002922
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								相关Log顺序:
							 | 
						|||
| 
								 | 
							
								- request PVW: WorkShop:3F855CF84C91BBD9207C0FAF5273586C, CamGroup:DDB1F27A44E7E5B312830A828EB55464, Index=0, StartFrame:0
							 | 
						|||
| 
								 | 
							
								- LogLevelSequence: Starting new camera cut: 'Cine_Camera_Actor_1'
							 | 
						|||
| 
								 | 
							
								- Puerts: 设置相机目标:
							 | 
						|||
| 
								 | 
							
								- Puerts:  PVW Task: 线下 贝拉2024生日 lengthtest
							 | 
						|||
| 
								 | 
							
								- PrintString BP_Cine_Cam_FOV_1 35.0
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								***HandlePVWTask中的prestreamTaskData 不对***
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 日志
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) request PVW: WorkShop:3F855CF84C91BBD9207C0FAF5273586C, CamGroup:B3441B7649E66555CCB558B2C0FD2872, Index=0, StartFrame:0
							 | 
						|||
| 
								 | 
							
								LogLevelSequence: Starting new camera cut: 'ZhuJiwei_Zheng16-24mm_5'
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) 130mm bug用log:,其他相机1 bindingCam逻辑,ZhuJiwei_Zheng16-24mm_5
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) 130mm bug用log:,其他相机2 bindingCam逻辑,ZhuJiwei_Zheng16-24mm_5
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) 130mm bug用log:,ChangeSequenceCamTarget FullStream Other
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) 设置相机目标: Idol.BeiLa 0
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) PVW Task: 线下 单唱站\nFastRhythm ZhuJiwei_Zheng16-24mm
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) request PVW: WorkShop:3F855CF84C91BBD9207C0FAF5273586C, CamGroup:DDB1F27A44E7E5B312830A828EB55464, Index=0, StartFrame:0
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) Nice Playing Sequence:LevelSequenceActor_2:BP_lengthtest_1
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) RebindTarget: BP_BeiLa_Costume_C_0
							 | 
						|||
| 
								 | 
							
								PIE: Warning: Sequence did not contain any bindings with the tag 'Beila' LevelSequenceActor_2
							 | 
						|||
| 
								 | 
							
								LogLevelSequence: Starting new camera cut: 'CineCameraActor_Focus130MMTest_1'
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) 130mm bug用log:,其他相机1 bindingCam逻辑,CineCameraActor_Focus130MMTest_1
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) 130mm bug用log:,其他相机2 bindingCam逻辑,CineCameraActor_Focus130MMTest_1
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) 130mm bug用log:,ChangeSequenceCamTarget FullStream Other
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) 设置相机目标: Idol.BeiLa 0
							 | 
						|||
| 
								 | 
							
								Puerts: (0x000009E309FB5E30) PVW Task: 线下 贝拉2024生日 BP_lengthtest_1
							 | 
						|||
| 
								 | 
							
								LogBlueprintUserMessages: [BP_Cine_Cam_FOV_1] 35.0
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 可能的相关代码
							 | 
						|||
| 
								 | 
							
								```c
							 | 
						|||
| 
								 | 
							
								    // 播放指定相机到PVW.
							 | 
						|||
| 
								 | 
							
								    @ufunction.ufunction(ufunction.ServerAPI, ufunction.Reliable)
							 | 
						|||
| 
								 | 
							
								    PlayCamSequenceOnPVWServer(camGroupId:UE.Guid, camIndex:number):void{
							 | 
						|||
| 
								 | 
							
								        let shotExists = this.directorCamSubSystem.ShotExistInGroup(this.prestreamTaskData.WorkShopId, camGroupId, camIndex)
							 | 
						|||
| 
								 | 
							
								        if (shotExists || camIndex == DirectorCamUtil.DRONE_CAM_INDEX || camIndex == DirectorCamUtil.HANDHELD_CAM_INDEX) {
							 | 
						|||
| 
								 | 
							
								            let newPVWTaskData = DirectorCamUtil.CopyTaskData(this.prestreamTaskData)
							 | 
						|||
| 
								 | 
							
								            newPVWTaskData.CamGroupId = camGroupId
							 | 
						|||
| 
								 | 
							
								            newPVWTaskData.CamIndex = camIndex
							 | 
						|||
| 
								 | 
							
								            newPVWTaskData.StartFrame = 0
							 | 
						|||
| 
								 | 
							
								            newPVWTaskData.bPreviewOneFrame = false
							 | 
						|||
| 
								 | 
							
								            this.RequestPVWTaskServer(newPVWTaskData)
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        else {
							 | 
						|||
| 
								 | 
							
								            console.warn('当前镜头不存<E4B88D>?,切换无效!index=' + camIndex)
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								  
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								class TsDirectorCamSequencePlayBridge extends UE.Actor {
							 | 
						|||
| 
								 | 
							
								    PlayCamSequence(camGroupId:UE.Guid, camIndex:number): void {
							 | 
						|||
| 
								 | 
							
								        let camManager = TsDirectorCamManagerActor.Get(this);
							 | 
						|||
| 
								 | 
							
								        if (camManager) {
							 | 
						|||
| 
								 | 
							
								            camManager.PlayCamSequenceOnPVWServer(camGroupId, camIndex);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```c++
							 | 
						|||
| 
								 | 
							
								// 切换到当前直播区域中的多个workShop
							 | 
						|||
| 
								 | 
							
								SwitchWorkShopInAreaServer(index: number): void {
							 | 
						|||
| 
								 | 
							
									// [Server]监听到场景模块切换了直播区域后,自动切换<E58887>?0个workshop,当前切换事件用来切换当前直播区域中的多个workshop
							 | 
						|||
| 
								 | 
							
									let levelControl = this.GetLevelAreaManager()
							 | 
						|||
| 
								 | 
							
									let liveArea = levelControl.GetCurrentLiveArea()
							 | 
						|||
| 
								 | 
							
									if (!liveArea) {
							 | 
						|||
| 
								 | 
							
										console.error('DirectorCamManager@ cannot find LiveAreaBy id')
							 | 
						|||
| 
								 | 
							
										return
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									let placement = DirectorCamUtil.GetPlacementInCurLiveArea(index, liveArea)
							 | 
						|||
| 
								 | 
							
									if (!placement) {
							 | 
						|||
| 
								 | 
							
										console.error('DirectorCamManager@SwitchWorkShopEvent:GetPlacementInCurLiveArea failed')
							 | 
						|||
| 
								 | 
							
										return
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									let GroupData = DirectorCamUtil.GetDefaultGroupData(this, placement.UUID)
							 | 
						|||
| 
								 | 
							
									if (GroupData) {
							 | 
						|||
| 
								 | 
							
										// 预览:切换workShop后播放第一个分<E4B8AA>?
							 | 
						|||
| 
								 | 
							
										let newPreviewTaskData = new UE.CamTaskDataRPC()
							 | 
						|||
| 
								 | 
							
										newPreviewTaskData.WorkShopId = DirectorCamUtil.CopyGuid(placement.UUID)
							 | 
						|||
| 
								 | 
							
										newPreviewTaskData.CamGroupId = DirectorCamUtil.CopyGuid(GroupData.UUID)
							 | 
						|||
| 
								 | 
							
										newPreviewTaskData.CamIndex = 0
							 | 
						|||
| 
								 | 
							
										newPreviewTaskData.OperationId = this.previewTaskData.OperationId + 1
							 | 
						|||
| 
								 | 
							
										newPreviewTaskData.StartFrame = 0
							 | 
						|||
| 
								 | 
							
										newPreviewTaskData.bPreviewOneFrame = false
							 | 
						|||
| 
								 | 
							
										this.HandlePreviewTaskDataMulticast(newPreviewTaskData);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										// 预推流:切换workShop后,播放第一个分组的第一个镜头
							 | 
						|||
| 
								 | 
							
										let newPVWTaskData = new UE.CamTaskDataRPC()
							 | 
						|||
| 
								 | 
							
										newPVWTaskData.WorkShopId = DirectorCamUtil.CopyGuid(placement.UUID)
							 | 
						|||
| 
								 | 
							
										newPVWTaskData.CamGroupId = DirectorCamUtil.CopyGuid(GroupData.UUID)
							 | 
						|||
| 
								 | 
							
										newPVWTaskData.CamIndex = 0
							 | 
						|||
| 
								 | 
							
										newPVWTaskData.StartFrame = 0
							 | 
						|||
| 
								 | 
							
										newPVWTaskData.bPreviewOneFrame = false
							 | 
						|||
| 
								 | 
							
										this.RequestPVWTaskServer(newPVWTaskData);
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								```
							 |