UE5 C++ 创建可缩放的相机
一.要将相机设置在Pawn类里
1.在MyPawn头文件里,加上摇臂和相机组件
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
2.在Pawm里声明SceneComponet,SpringArmComponent,CameraComponent组件指针
再声明一个移动缩放调用的函数
public: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);
在Pawn里将的组件通过CreateDefaultSubobject<T>(TEXT("Name"))创造命名。
根组件赋值为MyRoot的物体组件。SetupAttackment来连接子组件。将MySpringArm的bDoCollisionTest = false来停止碰撞。
AMyPawn::AMyPawn()
{// 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("MyCameraComponent"));RootComponent = MyRoot;MySpringArm->SetupAttachment(MyRoot);MyCamera->SetupAttachment(MySpringArm);MySpringArm->bDoCollisionTest = false; //让它无碰撞
3.设置好Pawn的Transform信息。
FVector MyLocation = FVector(0,0,0);FRotator MyRotation = FRotator(-50,0,0);FVector MyScale = FVector(1,1,1);SetActorLocation(MyLocation);SetActorRotation(MyRotation);SetActorScale3D(MyScale);
4.在滑动函数里,将相机的伸缩臂的伸缩方向和速度的逻辑写好
void AMyPawn::Zoom(bool Direction, float ZoomSpeed)
{if (Direction) //1{if (MySpringArm->TargetArmLength >= 300 && MySpringArm->TargetArmLength < 5000) //如果摄像机摇臂在300 到 5000之间{MySpringArm->TargetArmLength += (ZoomSpeed * 2);GEngine->AddOnScreenDebugMessage(-1, 5.0f, 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.0f,FColor::Red,FString::Printf(TEXT("SpringArmLength is %f"),MySpringArm->TargetArmLength));}}
}
5.在PlayerController.cpp头文件里包含Pawn。注意顺序(MyPlayerController.h要放在第一个)
#include "MyPlayerController.h"
#include "MyPawn.h"
在PlayerController.h里声明 绑定输入 和 其他功能函数
virtual void SetupInputComponent();void WheelUpFunction();void WheelDownFunction();
设置输入绑定事件,由于要重写SetupInputComponent虚函数,首先要继承父类的Super::SetupInputComponent(); 这个在UE里要写。再加上额外添加的代理绑定功能。
通过绑定输入代理,调用PlayerController的新定义的函数
void AMyPlayerController::SetupInputComponent()
{Super::SetupInputComponent();InputComponent->BindAction("WheelUp",IE_Pressed,this,&AMyPlayerController::WheelUpFunction);InputComponent->BindAction("WheelDown",IE_Pressed,this,&AMyPlayerController::WheelDownFunction);
}
新定义的函数中,通过GetPawn()拿到,GameMode里的Pawn,把它转换为AMyPawn。如果转换成功,在调用里面的MyPawn里的Zoom函数。
void AMyPlayerController::WheelUpFunction()
{if (GetPawn()){AMyPawn* MyCameraPawn = Cast<AMyPawn>(GetPawn());if (MyCameraPawn){MyCameraPawn->Zoom(true, 10);}}
}void AMyPlayerController::WheelDownFunction()
{if (GetPawn()){AMyPawn* MyCameraPawn = Cast<AMyPawn>(GetPawn());if (MyCameraPawn){MyCameraPawn->Zoom(false, 10);}}
}
可以伸缩,并且打印SpringArm的长度
相关文章:

UE5 C++ 创建可缩放的相机
一.要将相机设置在Pawn类里 1.在MyPawn头文件里,加上摇臂和相机组件 #include "GameFramework/SpringArmComponent.h" #include "Camera/CameraComponent.h" 2.在Pawm里声明SceneComponet,SpringArmComponent,CameraComponent组件…...
Fabric中的溯源方法
背景 在Fabric链码中,我们可以使用PutState方法对一个key的值进行覆盖,当我们再使用GetState查询时是最新的值。如果我们希望找到这个key的修改记录,我们可以使用溯源方法GetHistoryForKey。完整源码链接:https://github.com/hyp…...

混子文章|蓝桥杯一题 -平方差
题目考点: 平方差 ,平方差奇偶关系 代码 #include<bits/stdc.h> #define Run 0 #define endl "\n" #define N 100005 using unl __int128_t; using ll long long; using namespace std; class Solution { public: void slove() {int sum 0;int L, R; cin &…...

计算机视觉基础:【矩阵】矩阵选取子集
OpenCV的基础是处理图像,而图像的基础是矩阵。 因此,如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作,从而更好地实现对图像的处理。 示例 示例:选取矩阵中指定的行和列的…...
解决laravel-admin安装报错1071 Specified key was too long问题
在执行php artisan admin:install命令安装laravel-admin的时候,如果你使用的数据库是MySQL v5.7.7以下版本就会报下面的错: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL:…...

【Python---六大数据结构】
🚀 作者 :“码上有前” 🚀 文章简介 :Python 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 Python---六大数据结构 往期内容前言概述一下可变与不可变 Number四种不同的数值类型Number类型的创建i…...

一个简短的补充------对链表练习题的补充补充
昨天不是写了一篇有关链表的数据结构练习题嘛,其实那篇文章的第二道题还有许多值得我们思考的东西,今天就在这做一个简短的补充。补充一下运用那道题解决另一道题。 给大家看一下绿色让眼睛放松一下。 给定一个链表的头节点 head ,返回链表…...

Spring最新核心高频面试题(持续更新)
1 什么是Spring框架 Spring框架是一个开源的Java应用程序开发框架,它提供了很多工具和功能,可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架,开发者可以更加轻松地开发Java应用程序,并且可以更加灵活地组织和管理应…...

[计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构)
文章目录 一.网络层与传输层协议sockaddr结构体继承体系(Linux体系)贯穿计算机系统的网络通信架构图示: 二.实现并部署多线程并发Tcp服务器框架线程池模块序列化反序列化工具模块通信信道建立模块服务器主体模块任务回调模块(根据具体应用场景可重构)Tips:DebugC代码过程中遇到…...

Spring Boot 笔记 020 redis集成
1.1 安装redis Windows 下 Redis 安装与配置 教程_redis windows-CSDN博客 2.1 引入redis坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2.2 配置…...

防火墙——计算机网络
前述基于密码的安全机制不能有效解决以下安全问题: 用户入侵: 利用系统漏洞进行未授权登录; 授权用户非法获取更高级别权限等。 软件入侵: 通过网络传播病毒、蠕虫和特洛伊木马。 拒绝服务攻击等。 解决方法: 防火墙&a…...

用html编写的招聘简历
用html编写的招聘简历 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…...
215数组中的第K个最大元素
215数组中的第K个最大元素 题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。…...

【动态规划】【矩阵快速幂】LeetCode2851. 字符串转换
作者推荐 【深度优先搜索】【树】【有向图】【推荐】685. 冗余连接 II 涉及知识点 【矩阵快速幂】封装类及测试用例及样例 LeetCode 2851. 字符串转换 给你两个长度都为 n 的字符串 s 和 t 。你可以对字符串 s 执行以下操作: 将 s 长度为 l (0 <…...
【LeetCode每日一题】单调栈 402 移掉k位数字
402. 移掉 K 位数字 给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k **位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 : 输入:num "1432219", k 3 输出ÿ…...

力扣 309. 买卖股票的最佳时机含冷冻期
题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/ C题解:动态规划 状态1:表示持有股票。更新为之前持有股票(dp[i-1][0])或者不持有股票且不处于冷冻期后买入&…...
2024年刷题记录
马上要开始找实习了,又开始重启刷题计划了!加油冲冲冲!刷题的顺序follow代码随想录的60天刷题计划!感谢FuCosmo的总结!之前都是按照C的语法进行刷题的,这次也同样使用C。 Day 1 数组 这些题过年前都刷过了…...
【JGit 】简述及学习资料整理
JGit 介绍 [官网](JGit | The Eclipse Foundation): https://www.eclipse.org/jgit/ 用户指南 : https://github.com/eclipse-jgit/jgit/wiki/User-Guide JGit是一个用于Java编程语言的开源Git实现。它提供了一组Java库和API,使开发人员可以在他们的Java应用程序…...
python数据类型-集合set
1 集合(set)的定义 1.1 集合是一个无序且不重复元素的序列: 1)无序:存储顺序和添加的顺序不一定相同,不支持索引、切片 2)元素不重复:当添加重复元素时,集合会自动去重…...
excel如何指定求和
在Excel中,你可以使用函数来实现动态求和,使得当指定行的数值更新后,和也随之更新。具体来说,你可以使用SUM函数结合一些动态的引用方法。以下是一种实现方式: 假设你要对A列(从A1到A10,以示例…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...