当前位置: 首页 > news >正文

Cesium 全球视角 和 多方案镜头切换

一.切换镜头

镜头切换,在一个Pawn里的多个镜头。可以使用UE中World Settings里的玩家控制器中,默认的控制器行为会对当前开启的Camera组件进行激活处理。 

谁激活谁就是主相机。

			Cast<UCameraComponent>(m_childComponentMap[it.CameraName])->SetAutoActivate(false);Cast<UCameraComponent>(m_childComponentMap[it.CameraName])->SetActive(false);

激活处理。

但是如果是两个Pawn之间切换,就要用Poccess 掌控。蓝图如下:

1.我用这两个都行,前提是这个是在世界里的物体。

	APlayerController* tmpPC = UGameplayStatics::GetPlayerController(GetWorld(), 0);
APlayerController* tmpPC = UGameplayStatics::GetPlayerController(Cast<UObject>(this), 0);
APlayerController* PC1 = GetWorld()->GetFirstLocalPlayerFromController()->GetPlayerController(GetWorld());APlayerController* PC2 = GetWorld()->GetFirstPlayerController();APlayerController* PC3 = GEngine->GetFirstLocalPlayerController(GetWorld());APlayerController* PC4 = UGameplayStatics::GetPlayerController(GetWorld(), 0);

这里我是让每个Pawn自己抢夺,控制权。将Controller安在自己身上。实现不同Pawn之间的是视角切换。

		tmpPC->SetViewTargetWithBlend(Cast<AActor>(this));tmpPC->Possess(this);

二. 全球视角 有点像卫星,绕着地球转。

1.这个主要讲思路因为实现,算是比较好实现了。

将控制拿到。

	APlayerController* tmpPC = UGameplayStatics::GetPlayerController(Cast<UObject>(this), 0);if (tmpPC){tmpPC->SetViewTargetWithBlend(Cast<AActor>(this));tmpPC->Possess(this);/*m_childComponentMap[cameraName]->SetActive(true);usingCamera = Cast<UCameraComponent>(m_childComponentMap[cameraName]);*/}

2.通过GlobeAnchor位移,鼠标导致经纬移动,有插值和映射,离地球越远越快。

void AWorldCameraPawn::MoveX(float value)
{if (globeAnchor != nullptr){FVector curLLH = globeAnchor->GetLongitudeLatitudeHeight();double height = curLLH.Z;double change;change= UKismetMathLibrary::MapRangeClamped(height, 100, 100000, 0.001, 0.3);FVector toLLH = FVector(curLLH.X + value * change, curLLH.Y, curLLH.Z);FVector finalLLH = FVector(FMath::Lerp(curLLH.X, toLLH.X, 0.1), curLLH.Y, curLLH.Z);globeAnchor->MoveToLongitudeLatitudeHeight(finalLLH);globeAnchor->SetEastSouthUpRotation(FRotator(-90, 0 - 90, 0).Quaternion());}
}

3.滚轮 导致高度变化

void AWorldCameraPawn::MoveUp()
{if (globeAnchor != nullptr){FVector curLLH = globeAnchor->GetLongitudeLatitudeHeight();double height = curLLH.Z;double changeAltitude;double toAltitude;if (height > 10000){changeAltitude = UKismetMathLibrary::MapRangeClamped(height, 100, 100000, 10, 200000);toAltitude = curLLH.Z + changeAltitude;	}else{changeAltitude = UKismetMathLibrary::MapRangeClamped(height, 100, 10000, 10, 1000);toAltitude = curLLH.Z + changeAltitude;}if (toAltitude < 300){toAltitude = 300;}FVector toLLH = FVector(curLLH.X, curLLH.Y, toAltitude);globeAnchor->MoveToLongitudeLatitudeHeight(toLLH);globeAnchor->SetEastSouthUpRotation(FRotator(-90, 0 - 90, 0).Quaternion());}
}

三.处理输入,最好在Controller里,为什么因为你的Pawn换了,你也能逻辑清晰,不必重写。

同一个输入,可以将不同的Pawn对应不同的功能,可能相同也可能不同。这里WorldPawn就是升高高度。而MyCameraPawn是伸缩弹簧臂。

void PlayerController::WheelUpFunction()
{if (GetPawn()) {AAirForce* MyCameraPawn = Cast<AAirForce>(GetPawn());if (MyCameraPawn) {MyCameraPawn->Zoom(0, 10);}AWorldCameraPawn* WorldCameraPawn = Cast<AWorldCameraPawn>(GetPawn());if (WorldCameraPawn){WorldCameraPawn->MoveDown();}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • webserver使用webbench工具连续压测失败
  • java grpc 使用
  • 关于tresos Studio(EB)的MCAL配置之ADC
  • linux 进程开机自启
  • 从事大模型研发的技术栈和学习路线
  • SX_Git Graph图形化案例详解_20
  • C++学习笔记——打印ASCII码
  • 2024年8月27日(dockerfile应用,创建私有仓库,在企业中分享项目)
  • 详细了解如何设计和实现一个SSO系统?
  • C++ 设计模式——享元模式
  • 统一 transformer 与 diffusion !Meta 融合新方法剑指下一代多模态王者
  • 速盾:cdn能防ip追踪吗?
  • jieba分词和RecursiveCharacterTextSplitter分词
  • electron rce
  • Milvus在数派数据大模型业务中的实践
  • @angular/forms 源码解析之双向绑定
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 07.Android之多媒体问题
  • es6要点
  • express.js的介绍及使用
  • Java 多线程编程之:notify 和 wait 用法
  • js学习笔记
  • JS字符串转数字方法总结
  • Logstash 参考指南(目录)
  • nginx 负载服务器优化
  • Node + FFmpeg 实现Canvas动画导出视频
  • spring学习第二天
  • 从零开始的无人驾驶 1
  • 基于Android乐音识别(2)
  • 技术发展面试
  • 技术胖1-4季视频复习— (看视频笔记)
  • 免费小说阅读小程序
  • 浅谈web中前端模板引擎的使用
  • 微信小程序--------语音识别(前端自己也能玩)
  • 国内开源镜像站点
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (备忘)Java Map 遍历
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (三)SvelteKit教程:layout 文件
  • (推荐)叮当——中文语音对话机器人
  • (自用)gtest单元测试
  • ..回顾17,展望18
  • .Mobi域名介绍
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net framework profiles /.net framework 配置
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net wcf memory gates checking failed