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

UE C++ 多镜头设置缩放 平移

一.整体思路

首先需要在 想要控制的躯体Pawn上,生成不同相机对应的SpringArm组件。其次是在Controller上,拿到这个Pawn,并在其中设置输入响应,并定义响应事件。响应事件里有指向Pawn的指针,并把Pawn的缩放平移功能进行调用。

二.

1.CameraPawn的组件构成

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MySceneComponent)USceneComponent* MyRoot;UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MySceneComponent)USpringArmComponent* MySpringArm;UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MySceneComponent)UCameraComponent* MyCamera;void Zoom(bool Direction, float ZoomSpeed);void Panx(float x);void Pany(float y);void Back();
ACameraPawn::ACameraPawn()
{// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;MyRoot = CreateDefaultSubobject<USceneComponent>(TEXT("MyRootComponent"));MySpringArm = CreateDefaultSubobject <USpringArmComponent>(TEXT("MySpringArmComponent"));MyCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("MySCameraComponent"));RootComponent = MyRoot;MySpringArm->SetupAttachment(MyRoot);MyCamera->SetupAttachment(MySpringArm);MySpringArm->bDoCollisionTest = false;
}

2.将Pawn自己镜头伸缩,平移功能,复原写好

void ACameraPawn::Zoom(bool Direction, float ZoomSpeed) {if (Direction) {if (MySpringArm->TargetArmLength >= 300 && MySpringArm->TargetArmLength < 5000) {MySpringArm->TargetArmLength += (ZoomSpeed * 2);GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("SpringArmLength is %f"), MySpringArm->TargetArmLength));}}else {if (MySpringArm->TargetArmLength > 300 && MySpringArm->TargetArmLength <= 5000) {MySpringArm->TargetArmLength -= (ZoomSpeed * 2);GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("SpringArmLength is %f"), MySpringArm->TargetArmLength));}}
}void ACameraPawn::Panx(float x)
{MyCamera->AddLocalOffset(FVector(0,x,0));
}void ACameraPawn::Pany(float y)
{MyCamera->AddLocalOffset(FVector(0,0,y));
}void ACameraPawn::Back()
{MyCamera->SetRelativeLocation(FVector(0,0,0));
}

 3.在MyPlayerController里面绑定输入映射,以及响应的事件。

	virtual void SetupInputComponent();void WheelUpFunction();void WheelDownFunction();void PanX(float x);void PanY(float y);void Back();

4.绑定映射

void AMyPlayerController::SetupInputComponent()
{Super::SetupInputComponent();InputComponent->BindAction("WheelUp", IE_Pressed, this, &AMyPlayerController::WheelUpFunction);InputComponent->BindAction("WheelDown", IE_Pressed, this, &AMyPlayerController::WheelDownFunction);InputComponent->BindAction("BackXY",IE_Pressed,this,&AMyPlayerController::Back);InputComponent->BindAxis("PanX",this,&AMyPlayerController::PanX);InputComponent->BindAxis("PanY",this,&AMyPlayerController::PanY);//InputComponent->BindAction("ESCEvent", IE_Pressed, this, &AMyPlayerController::ESCEvent).bExecuteWhenPaused=true;//游戏暂停可以执行//InpuptComponent->BindAxis("PanY",this,);
}

5.响应事件,并操控控制到对应的Pawn里的函数。

void AMyPlayerController::WheelUpFunction()
{if (GetPawn()) {ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());if (MyCameraPawn) {MyCameraPawn->Zoom(1, 10);}}
}void AMyPlayerController::WheelDownFunction()
{if (GetPawn()) {ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());if (MyCameraPawn) {MyCameraPawn->Zoom(0, 10);}}
}void AMyPlayerController::PanX(float x)
{if (GetPawn()){ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());if (MyCameraPawn) {MyCameraPawn->Panx(x);}}
}void AMyPlayerController::PanY(float y)
{if (GetPawn()){ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());if (MyCameraPawn) {MyCameraPawn->Pany(y);}}
}void AMyPlayerController::Back()
{if (GetPawn()){ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());if (MyCameraPawn) {MyCameraPawn->Back();}}
}

6.需要在ProjectSetting里面,设置使用的按键。

三.可能需要注意的

1.Pawn这里,需要Poccess。不然会控制不到。

2.SpringArm设置视角的位置。Camera最好都是相对位置为0,这样视角返回默认值可以用。

MyCamera->SetRelativeLocation(FVector(0,0,0));

相关文章:

UE C++ 多镜头设置缩放 平移

一.整体思路 首先需要在 想要控制的躯体Pawn上&#xff0c;生成不同相机对应的SpringArm组件。其次是在Controller上&#xff0c;拿到这个Pawn&#xff0c;并在其中设置输入响应&#xff0c;并定义响应事件。响应事件里有指向Pawn的指针&#xff0c;并把Pawn的缩放平移功能进行…...

代码随想录Day69(图论Part05)

并查集 // 1.初始化 int fa[MAXN]; void init(int n) {for (int i1;i<n;i)fa[i]i; }// 2.查询 找到的祖先直接返回&#xff0c;未进行路径压缩 int.find(int i){if(fa[i] i)return i;// 递归出口&#xff0c;当到达了祖先位置&#xff0c;就返回祖先elsereturn find(fa[i])…...

53-1 内网代理3 - Netsh端口转发(推荐)

靶场还是用上一篇文章搭建的靶场 :52-5 内网代理2 - LCX端口转发(不推荐使用LCX)-CSDN博客 一、Netsh 实现端口转发 Netsh是Windows自带的命令行脚本工具,可用于配置端口转发。在一个典型的场景中,如果我们位于公网无法直接访问内网的Web服务器,可以利用中间的跳板机通过…...

慧哥充电桩开源平台小程序、PC后、手机商户端历经2年的无数次迭代。

...

四、(1)网络爬虫入门及准备工作(爬虫及数据可视化)

四、&#xff08;1&#xff09;网络爬虫入门及准备工作&#xff08;爬虫及数据可视化&#xff09; 1&#xff0c;网络爬虫入门1.1 百度指数1.2 天眼查1.3 爬虫原理1.4 搜索引擎原理 2&#xff0c;准备工作2.1 分析爬取页面2.2 爬虫拿到的不仅是网页还是网页的源代码2.3 爬虫就是…...

2024华为OD机试真题-分月饼-(C++/Python)-C卷D卷-200分

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 中秋节,公司分月饼,m 个员工,买了 n 个月饼,m ≤ n,每个员工至少分 1 个月饼,但可以分多个,单人分到最多月饼的个数是 Max1 ,单人分到第二多月饼个数是 Max2 ,Max1 - Max2 ≤ 3 ,单人分到第 n - 1…...

Git 查看提交历史

Git 查看提交历史 Git 是一个强大的版本控制系统&#xff0c;它允许开发人员跟踪代码的变化&#xff0c;并与其他人协作。了解如何查看提交历史对于理解项目的发展和维护代码库至关重要。本文将详细介绍如何使用 Git 查看提交历史&#xff0c;包括不同的命令和选项&#xff0c…...

力扣双指针算法题目:快乐数

目录 1.题目 2.思路解析 3.代码展示 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 题目意思是将一个正整数上面的每一位拿出来&#xff0c;然后分别求平方&#xff0c;最后将这些数字的平方求和得到一个数字&#xff0c;如此循环&#xff0c;如果在此循环中…...

【Tools】了解人工通用智能 (AGI):未来的智能体

什么是人工通用智能 (AGI)&#xff1f; 人工通用智能&#xff08;Artificial General Intelligence&#xff0c;AGI&#xff09;是指一种能够理解、学习和应用知识&#xff0c;具有像人类一样广泛和通用的认知能力的智能系统。与专门处理特定任务的人工智能&#xff08;AI&…...

华媒舍:8种网站构建推广方法全揭密!

网站构建成为了推广宣传和宣传品牌的关键一环。对于新手&#xff0c;搭建和营销推广网站有可能是一项全新的挑战。下面我们就为大家介绍8种网站搭建和营销推广技巧&#xff0c;帮助你在这些方面取得成功。 1.选择适合自己的网站构建平台选择合适的网站构建平台针对构建一个成功…...

【Scrapy】 深入了解 Scrapy 下载中间件的 process_exception 方法

准我快乐地重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 再去做没流着情泪的伊人 假装再有从前演过的戏份 重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 你纵是未明白仍夜深一人 穿起你那无言毛衣当跟你接近 &#x1f3b5; 陈慧娴《傻女》 Scrapy 是…...

DevEco Studio无法识别本地模拟器设备的解决方法

目录 场景 解决办法 方式1 方式2 场景 有很多小伙伴遇到过安装了手机模拟器, 但是开发工具设备栏不识别手机设备的问题, 如下图,明明模拟器都安装了,并启动, 但为什么设备栏不显示呢? 解决后的截图,应该是这样(其实跟 android 类似 )...

EN-SLAM:Implicit Event-RGBD Neural SLAM解读

论文路径&#xff1a;https://arxiv.org/pdf/2311.11013.pdf 目录 1 论文背景 2 论文概述 2.1 神经辐射场&#xff08;NeRF&#xff09; 2.2 事件相机&#xff08;Event Camera&#xff09; 2.3 事件时间聚合优化策略&#xff08;ETA&#xff09; 2.4 可微分的CRF渲染技术…...

2407C++,从构生成协议文件

原文 protobuf会根据proto文件生成c对象及其序化/反序化方法,而iguana的struct_pb则是以结构为核心,编译期反射来生成序化/反序化代码. 有人提出能不能按proto文件输出结构呢,这样就可给其它语言用了,很好建议,实现起来也比较简单. protobuf是从proto文件到c对象,而struct_p…...

遗传算法求解TSP

一、基本步骤 遗传算法求解旅行商问题&#xff08;TSP&#xff09;的一般步骤如下&#xff1a; 编码&#xff1a; 通常采用整数编码&#xff0c;将城市的访问顺序表示为一个染色体。例如&#xff0c;假设有 5 个城市&#xff0c;编码为[1, 3, 5, 2, 4]&#xff0c;表示旅行商的…...

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【明文导入密钥(C/C++)】

明文导入密钥(C/C) 以明文导入ECC密钥为例。具体的场景介绍及支持的算法规格 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 指定密钥别名keyAlias。 密钥别名的最大长度为64字节。 封装密钥属性集和密钥材料。通过[OH_Huks_I…...

视频汇聚/安防监控/GB28181国标EasyCVR视频综合管理平台出现串流的原因排查及解决

安防视频监控系统/视频汇聚EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;视频汇聚EasyCVR平台支持设备…...

TypeError: Cannot read properties of null (reading ‘nextSibling‘)

做项目用的Vue3Vite, 在画静态页面时&#xff0c;点击菜单跳转之后总是出现如下报错&#xff0c;百思不得其解。看了网上很多回答&#xff0c;也没有解决问题&#xff0c;然后试了很多方法&#xff0c;最后竟然发现是template里边没有结构的原因。。。 原来我的index.vue是这样…...

解决 npm intasll 安装报错 Error: EPERM: operation not permitted

Node.js安装及环境配置完成之后 npm install express -g 安装全局的模块报错提示没有权限operation not permitted mkdir 错误编号4048&#xff1a; 其原因是当前用户操作该目录权限不足&#xff0c;当以管理员身份运行cmd&#xff0c;再执行npm install express -g 是不会报权…...

redis实用技能

为什么要使用redis及其使用场景 大部分场景是应对高并发高性能场景才会使用,就是访问量已经超过mysql所能承受的,需要做缓存,帮助mysql分流。或者一些复杂查询,mysql执行很慢没法优化,可以做缓存提速(做缓存)做认证服务的时候需要存储用户的session信息,使用redis数据有…...

【架构师通关】理发店排队 + 车库停车,大白话秒懂“进程状态模型”与“PV操作

兄弟们&#xff0c;操作系统的进程管理一直是软考里最让人头疼的“硬骨头” &#x1f9b4;。什么“阻塞”、“挂起”、“信号量”、“PV操作”&#xff0c;听着就像天书 &#x1f4da;。 但今天&#xff0c;飞哥绝不跟你拽学术名词&#xff01;咱们就通过“去理发店剪个头” &a…...

保姆级教程:在Linux上用Flume 1.7.0 + Spark 2.4.7搭建实时日志流处理管道

企业级实时日志处理实战&#xff1a;Flume 1.7.0与Spark 2.4.7深度整合指南 在当今数据驱动的商业环境中&#xff0c;实时日志处理能力已成为企业技术栈的核心竞争力。想象一下电商大促期间每秒数万条的用户行为日志&#xff0c;或是金融交易系统中毫秒级延迟的风控信号处理——…...

SAP销售订单BAPI调用避坑指南:手把手教你处理增强字段、合作伙伴与定价(附完整ABAP代码)

SAP销售订单BAPI实战&#xff1a;增强字段、合作伙伴与定价的深度解决方案 当你第一次调用SD_SALESDOCUMENT_CREATE创建销售订单时&#xff0c;可能会遇到这样的场景&#xff1a;订单看似创建成功&#xff0c;但增强字段没值、合作伙伴角色错乱、定价条件未生效。这种"表…...

深度解析 Android 开发工程师(智能硬件/音视频方向)的技术栈与实战

引言 随着物联网(IoT)和智能硬件的迅猛发展,Android 系统凭借其广泛的用户基础、强大的生态和丰富的硬件接口支持,成为连接智能硬件设备(如对讲机、智能耳机、智能家居等)与用户的重要桥梁。特别是在需要实时交互、音视频传输的领域,如实时对讲、音乐播放、语音通话、视…...

OpenClaw学习路径:从Phi-3-mini-128k-instruct对接到复杂自动化编排

OpenClaw学习路径&#xff1a;从Phi-3-mini-128k-instruct对接到复杂自动化编排 1. 为什么选择OpenClawPhi-3-mini组合 去年我在整理学术文献时&#xff0c;每天要花3小时重复操作&#xff1a;下载PDF→提取关键段落→归类到不同主题文件夹→生成摘要。直到发现OpenClaw这个能…...

DXVK:彻底解决Linux游戏兼容性难题的Vulkan翻译层

DXVK&#xff1a;彻底解决Linux游戏兼容性难题的Vulkan翻译层 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 你是否曾经因为心爱的Windows游戏无法在Linux上运行而感到…...

万象视界灵坛惊艳效果:上传模糊图片仍准确返回‘雨夜霓虹’‘80年代复古’等高阶语义

万象视界灵坛惊艳效果&#xff1a;上传模糊图片仍准确返回雨夜霓虹80年代复古等高阶语义 1. 突破传统视觉识别的智能平台 在数字内容爆炸式增长的今天&#xff0c;如何从海量视觉数据中快速提取有价值的信息成为一大挑战。传统图像识别技术往往受限于预设分类体系&#xff0c…...

AGV如何选合适的传感器

一、AGV传感器的三大功能块几乎所有AGV都可以把传感器分成三类&#xff1a;1&#xff09;导航/定位传感器&#xff1a;用来“知道自己在哪、怎么走” 2&#xff09;本体/运动传感器&#xff1a;用来“知道自己怎么动的” 3&#xff09;避障/安全传感器&#xff1a;用来“不撞人…...

5分钟掌握Python抢票神器:告别手动抢票的烦恼!

5分钟掌握Python抢票神器&#xff1a;告别手动抢票的烦恼&#xff01; 【免费下载链接】damaihelper 支持大麦网&#xff0c;淘票票、缤玩岛等多个平台&#xff0c;演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 你是否还在为抢不到心仪…...

藏在化橘红里的数字农业隐喻:拼多多将“地方风物”做成了新爆款

图片 2026年两会期间&#xff0c;化橘红因为一个点赞意外“出圈”。 不少人将化橘红的“走红”归结为偶然的流量红利&#xff0c;只要深入化橘红的产业肌理&#xff0c;就会发现并非是一场单纯的“流量造神”&#xff0c;而是电商供应链、新农人回流、产业化升级交织下的必然。…...