简单讲讲UE中的PlayerCameraManager

这篇具有很好参考价值的文章主要介绍了简单讲讲UE中的PlayerCameraManager。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们在平时开发中,少不了编写一些逻辑去控制相机,例如俯视角镜头与各个特写镜头的过渡切换,因此了解一些PlayerCameraManager是有必要的。

PlayerCameraManager是UE自带的相机管理组件,本身比较简单,一般需要自行扩展。本文就来简单讲解一下。

1.PlayerCameraManager执行流程

执行流程如下图所示:
ue cameramanager,UE5,数码相机,学习,ue4,ue5
游戏启动后通过GameMode找到PlayerControllerPlayerController的蓝图面板中也可以指定当前的PlayerCameraManager类是哪一个,然后通过PlayerController创建PlayerCameraManager,在其更新时可以通过蓝图方法重写BlueprintUpdateCamera函数,若不重写则通过UE自己的逻辑执行更新,输出完的结果还会通过CameraModifier再执行一次最终修改,然后输出。

2.重写PlayerCameraManager类,以便扩展

我们可以蓝图中指定PlayerCameraManager的类,首先创建一个继承PlayerCameraManager的蓝图:
ue cameramanager,UE5,数码相机,学习,ue4,ue5
然后找到PlayerController,设置自定义的相机管理器类:
ue cameramanager,UE5,数码相机,学习,ue4,ue5
这一步在c++部分对应代码如下(SpawnPlayerCameraManager函数)

PlayerController.cpp:

void APlayerController::PostSeamlessTravel()
{
	// Track the last completed seamless travel for the player
	LastCompletedSeamlessTravelCount = SeamlessTravelCount;

	CleanUpAudioComponents();

	if (PlayerCameraManager == nullptr)
	{
		SpawnPlayerCameraManager();
	}

}
void APlayerController::SpawnPlayerCameraManager()
{
	// servers and owning clients get cameras
	// If no archetype specified, spawn an Engine.PlayerCameraManager.  NOTE all games should specify an archetype.
	FActorSpawnParameters SpawnInfo;
	SpawnInfo.Owner = this;
	SpawnInfo.Instigator = GetInstigator();
	SpawnInfo.ObjectFlags |= RF_Transient;	// We never want to save camera managers into a map
	if (PlayerCameraManagerClass != NULL)
	{
		PlayerCameraManager = GetWorld()->SpawnActor<APlayerCameraManager>(PlayerCameraManagerClass, SpawnInfo);
	}
	else
	{
		PlayerCameraManager = GetWorld()->SpawnActor<APlayerCameraManager>(SpawnInfo);
	}

	if (PlayerCameraManager != NULL)
	{
		PlayerCameraManager->InitializeFor(this);
	}
	else
	{
		UE_LOG(LogPlayerController, Log,  TEXT("Couldn't Spawn PlayerCameraManager for Player!!") );
	}
}

3.通过BlueprintUpdateCamera自定义更新逻辑

PlayerCameraManager中预留了自定义更新的函数BlueprintUpdateCamera,我们可以在自定义相机管理器蓝图类中重写它:
ue cameramanager,UE5,数码相机,学习,ue4,ue5
该函数对应c++部分如下:

void APlayerCameraManager::UpdateViewTargetInternal(FTViewTarget& OutVT, float DeltaTime)
{
	if (OutVT.Target)
	{
		FVector OutLocation;
		FRotator OutRotation;
		float OutFOV;

		if (BlueprintUpdateCamera(OutVT.Target, OutLocation, OutRotation, OutFOV))
		{
			OutVT.POV.Location = OutLocation;
			OutVT.POV.Rotation = OutRotation;
			OutVT.POV.FOV = OutFOV;
		}
		else
		{
			OutVT.Target->CalcCamera(DeltaTime, OutVT.POV);
		}
	}
}

4.关于CameraModifier

最后再讲一下CameraModifier,在相机管理器更新函数的末尾处还会遍历所有已添加的CameraModifier,更新相机位置信息:

if (!bDoNotApplyModifiers || bAlwaysApplyModifiers)
{
	// Apply camera modifiers at the end (view shakes for example)
	ApplyCameraModifiers(DeltaTime, OutVT.POV);
}

例如CameraShake就是一种CameraModifier,我们也可以新建一个继承CameraModifier的蓝图类:
ue cameramanager,UE5,数码相机,学习,ue4,ue5

并通过蓝图节点Add New Camera Modifier添加修改器:
ue cameramanager,UE5,数码相机,学习,ue4,ue5


对PlayerCameraManager的简单讲解到此结束,本文的内容可以应对简单相机扩展与使用。文章来源地址https://www.toymoban.com/news/detail-763603.html

到了这里,关于简单讲讲UE中的PlayerCameraManager的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE5 UDP通信 UE4.21-UE5.1

    目录 客户端,发送数据 1.建立字符串变量UDPConnection,绑定连接事件  2.连接初始化  3.发送数据  4.关闭UDP服务  服务器,接收数据 1.绑定连接事件  2.绑定数据接收事件  3.开启UDP服务  4.返回数据  5.关闭UDP服务   需要提供远程端IP地址和端口号 0.0.0.0表示监听所有ip,端口

    2024年02月15日
    浏览(77)
  • 【UE5】vsCode 调试 UE5 PuerTs

    配置PuerTs的步骤这里不赘述。 2.1 打开项目 正常来说,直接打开项目可以看到如下画面 如果直接点击运行,可以发现下方的 Output Log 窗口已经开始 Print 了很多案例。 是因为该项目默认执行的是QuickStart.ts。 2.2 打开TsGameInstance.cpp 3.1 在VsCode找到QuickStart.ts,随便断一个点 (这里

    2023年04月09日
    浏览(36)
  • 【UE5】解决UE5无法播放mp4视频

    最近接手的项目需要把项目从UE4中迁移至UE5.0,其中遇到了一个mp4视频无法播放的bug,这里做一下记录。 在官方论中有提到过这个bug,https://forums.unrealengine.com/t/media-textures-wont-display-video-in-ue5-preview-1-while-using-directx-12/503980/2 按照常规的方法播放视频在MediaPlay的Play节点会返回

    2024年01月17日
    浏览(58)
  • UE5学习笔记(1)——从源码开始编译安装UE5

    0.1 在windows的话,建议装一个Git bash,同时还要有自己的github账号,注册github账号这里就不再赘述了,安装git bash后,设置自己的github账号。或者在windows装一个WSL。 0.2 把自己的github账号关联Epic官方,必须关联之后才能下载Unreal的源码。关联方式见官方教程 0.3 安装VS 2022,这里

    2024年02月08日
    浏览(52)
  • 【UE5】如何在UE5.1中创建级联粒子系统

    1. 可以先新建一个actor蓝图,然后在该蓝图中添加一个“Cascade Particle System Component” 2. 在右侧的细节面板中,点击“模板”一项中的下拉框,然后点击“Cascade粒子系统(旧版)” 然后就可以选择在哪个路径下创建级联粒子系统了

    2024年02月06日
    浏览(37)
  • 【UE】UE5 学习笔记

    快捷键 快捷键 描述 F 定位关一卡对象:双击游戏对象名字或选游戏对象名字 鼠标中键 移动视野 alt+鼠标左键移 旋转视野 滑动鼠标滚轮 缩放视野 alt+鼠标右键拖动鼠标 缩放视野 鼠标左键移动鼠标 前后漫游 WASD+鼠标右键 自由漫游 漫游时滑动鼠标滚轮 调节漫游速度 选中要克隆

    2023年04月14日
    浏览(51)
  • 【UE5】UE5与Python Socket通信中文数据接收不全

    最近在使用UE的Socket模块与Python服务器进行通信时遇到了一些坑,特此记录一下。 先来复现一下问题,这里只截取关键代码。 UE端: Python端: 运行结果: UE端发送的数据: Python端接收到数据: 可以看到数据容量并没有超出缓存上限,且Python端接收的数据都有做utf-8的编码转

    2024年02月14日
    浏览(41)
  • (最新详细下载UE5教程)学习UE5的第一步;下载Epic及从Epic中选取相关引擎及启动UE5/day.1

    虚幻引擎5是EPIC于2020年公布的第五代游戏引擎,其实吧吧啦吧啦这么多毛用也没有,大伙也知道这些东西,不知道的也不会想学😃。 那么,就进入正题吧! 各位玩游戏吗?玩的话那肯定知道EPIC,也就是各大玩友戏称为“E宝”的游戏商店;(如果你下载了的话直接跳到第二

    2023年04月10日
    浏览(49)
  • UE5.1 利用WEBUI插件完成UE与JS的交互 (UE5.1嵌入WEB)

    目录 一、UE4显示Echart图表 二、UE调用JS(修改Echart图表数据) 三、JS调用UE(UE4中打印js传递过来的数据) 步骤: 1.下载WEBUI插件 我的UE编辑器版本是4.24.3对应版本的插件下载地址是 webui 插件:链接:https://pan.baidu.com/s/1vaZiqre8K2GEueVJOtZ2fA?pwd=xsby  提取码:xsby  下载后解压放到

    2024年03月20日
    浏览(36)
  • 【ChatGPT】程序员的半个老师,今天简单讲讲使用心得

    程序员有个玩笑叫做复制黏贴,原来的百度谷歌只能是碎片层面,有了chatGPT,可以实现更深层次的复制黏贴,直接帮你写好整个方法和实现步骤,不再是简单的碎片。 当然他只能做到教材级的解答,业务层面做不到,如果连业务层面都做到了,那程序员就真失业了!! 程序

    2023年04月20日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包