ue4 常见问题解答

2023-05-16

1.如何让客户端自动连接服务器

MyGame.exe 127.0.0.1

通过命令行参数指定服务器IP,就会自动进入游戏

参考:https://docs.unrealengine.com/latest/CHN/Programming/Basics/CommandLineArguments/index.html

2.如何以spectator模式启动客户端

在ULocalPlayer的派生类中重写GetGameLoginOptions函数,具体如下

FString UShooterLocalPlayer::GetGameLoginOptions() const
{
return TEXT("SpectatorOnly=1");
}

3.如何解决ue4 vs 调试不能看到FString等变量值的问题

调试

Visual Studio支持通过‘可视化查看器’来扩展调试器,从而轻松地查看常见的虚幻数据类型, 比如对象FNames 和动态数组。根据您所使用的Visual Studio 2010或Visual Studio 2012的不同, 这个功能的设置也有所区别。

针对Visual Studio 2012的可视化查看器设置

您会发现您的安装文件中包含了具备该可视化查看器逻辑的文件:

[ROCKETINSTALL]/Engine/Extras/VisualStudioDebugging/UE4.natvis

复制该文件到以下位置:

[VSINSTALLDIR]/Common7/Packages/Debugger/Visualizers/UE4.natvis
[USERPROFILE]/My Documents/Visual Studio 2012/Visualizers/UE4.natvis

参考:https://docs.unrealengine.com/latest/CHN/Programming/Development/VisualStudioSetup/index.html

4.ShooterGame 中LOS是什么意思

应该是 Line-of-sight 的意思

5.C++如何在屏幕上打印输出

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, NewControlRotation.ToString());

6.shootergame中projectile是如何检测碰撞的

在ProjectileMovementComponent.cpp中MoveUpdatedComponent函数调用

7.ue4中打包出来地图可以运行,从源码编译选择Development确不能运行,提示加载地图失败,怎么解决

在编辑器中烘培一下该地图,再进就可以(File->Cook Content For Windows)

8.在游戏中,给pawn加了一个发射子弹时的动作,但发现有时播放,有时不播放,后来发现是因为子弹个数问题,之前的逻辑子弹为0时播放会重新装弹,所以没有播放发射子弹的动作

9.函数前加 UFUNCTION(exec) 是什么意思

加了这个指明该函数可以在控制台执行

10.如何决定一个Actor是否需要同步

代码在ActorReplication.cpp中,IsNetRelevantFor函数

具体代码如下:

bool AActor::IsNetRelevantFor(const AActor* RealViewer, const AActor* ViewTarget, const FVector& SrcLocation) const
{
	if (bAlwaysRelevant || IsOwnedBy(ViewTarget) || IsOwnedBy(RealViewer) || this == ViewTarget || ViewTarget == Instigator)
	{
		return true;
	}
	else if ( bNetUseOwnerRelevancy && Owner)
	{
		return Owner->IsNetRelevantFor(RealViewer, ViewTarget, SrcLocation);
	}
	else if ( bOnlyRelevantToOwner )
	{
		return false;
	}
	else if ( RootComponent && RootComponent->AttachParent && RootComponent->AttachParent->GetOwner() && (Cast<USkeletalMeshComponent>(RootComponent->AttachParent) || (RootComponent->AttachParent->GetOwner() == Owner)) )
	{
		return RootComponent->AttachParent->GetOwner()->IsNetRelevantFor(RealViewer, ViewTarget, SrcLocation);
	}
	else if( bHidden && (!RootComponent || !RootComponent->IsCollisionEnabled()) )
	{
		return false;
	}

	if (!RootComponent)
	{
		UE_LOG(LogNet, Warning, TEXT("Actor %s / %s has no root component in AActor::IsNetRelevantFor. (Make bAlwaysRelevant=true?)"), *GetClass()->GetName(), *GetName() );
		return false;
	}
	if (GetDefault<AGameNetworkManager>()->bUseDistanceBasedRelevancy)
	{
		return ((SrcLocation - GetActorLocation()).SizeSquared() < NetCullDistanceSquared);
	}

	return true;
}

参考文档:https://wiki.beyondunreal.com/Everything_you_ever_wanted_to_know_about_replication_(but_were_afraid_to_ask)

11.FString转int32

Color = FCString::Atoi(*ColorStr)

ColorStr类型为FString,Color类型为int32

12.int32转FString

FString::FromInt(Color)

13.UnrealTournament编译报错

编译UnrealTournament Master,报错,后来查是因为本身代码有问题,然后下载了release版,链接报错 error LNK1181 Box2D.lib

解决方法,找到UnrealTournamentEditor.Target.cs文件,UEBuildConfiguration.bCompileBox2D 由false改为true,再编译,就正常了

14.如何重新生成generated.h文件

ue4中,很多头文件都会预编译一遍,生成对应的generated.h,比如,ShooterBot会生成ShooterBot.generated.h。有时候我们希望generated.h重新生成,怎么办呢,只需要修改对应的头文件,generated.h就会重新生成

15.Actor中使用了胶囊体(UCapsuleComponent),当actor被放入场景的时候,胶囊体的中心在地面上,但把Pawn拖到场景时,胶囊体的底贴在地面上,这是什么原因呢

Actor中有个成员变量bCollideWhenPlacing,在Pawn的构造函数中被初始化为了true,所以胶囊体底部会贴着地面,如果想让你的物体(派生自Actor)也有同样的效果,只要在物体的构造函数中加入bCollideWhenPlacing=true就可以了

16.ue4接htc vive看到的画面不正确,像是反了一样

htc vive有问题,但oclus没有问题,后来发现时PostProcessVolume里面的一个参数设置问题

具体参数是 ScreenPercentage 的问题,默认值是100,我们游戏里改为了125,改回100就好了

17.ue4崩溃,具体说是一个verify没过,卡在了LevelTick.cpp 777行

解决办法:把这个verify去掉就好了

verify(ComponentsThatNeedEndOfFrameUpdate.Remove(WeakComponent) == 1);

改为

ComponentsThatNeedEndOfFrameUpdate.Remove(WeakComponent);

18.ue4 C++项目如何重命名

https://answers.unrealengine.com/questions/242407/renaming-a-c-project.html

19.如何开关某个分类的log

如:打开logGarbage

log loggarbage all

log logtexture off 关闭logtexture类log输出

20.SpawnActor后没有调用BeginPlay

调试发现是因为SpawnActor调用过早导致的,只有在UWorld的bBegunPlay被设置为true以后,spawnactor时,beginplay才会被调用

注意,尤其是在多人游戏客户端spawnactor时,clientgamestarted时,bBegunPlay不一定会被设置为true,跟网络和加载速度都有关

21.如何在log里输出指针的值

源码里有现成的

				UE_LOG(LogGarbage, Fatal, TEXT("Invalid object in GC: 0x%016llx, ReferencingObject: %s, ReferencingProperty: %s"),
					(int64)(PTRINT)Object,
					InReferencingObject ? *InReferencingObject->GetFullName() : TEXT("NULL"),
					InReferencingProperty ? *InReferencingProperty->GetFullName() : TEXT("NULL"));


22.如何查看一个对象在对象列表里的值

int32 Index = Object->InternalIndex;

GUObjectArray.ObjObjects.Objects[Index]

23.获取level began play到现在的时间

MyWorld->TimeSeconds;

24.BlendSpace播放动画出现动画不连贯问题如何解决

以BlendSpace处理移动为例,当Speed突然变为0时,当前动作会由移动突然变为idle,此时由于动画又移动突变为idle,当移动动作和idle动作差别比较大时,就会明显感觉

动画跳跃了一下,会显得很不连贯,BlendSpace中有个参数TargetWeightInterpolationSpeedPerSec可以解决这个问题,可以让这两帧动画平滑过渡。

25.如何避免滑步

移动动作一旦做好了,速度就确定了,这个速度是一个固定值,美术需要保证在这个速度下移动,不出现滑步(地面脚的移动速度要等于角色的移动速度),然后程序用这个速度设置角色的移动速度就能避免滑步了。

26.ue4 3D widget半透明问题

用widget component处理3D UI,发现半透明的图在场景里要么全透明,要不全不透明,没有中间状态,后来发现widget component有个属性BlendMode,默认是Masked,改成Transparent就好了

27.ue4实现转身

动作资源只有四个转身动作(左转90度,左转180度,右转90度,右转180度),如何实现较为平滑的转身呢?

目前采用的转身方案如下:

分情况讨论

1.当前Yaw和目标Yaw相差绝对值<45度,直接用插值方式旋转整个Actor(RInterp To)

2.当前Yaw和目标Yaw相差绝对值>=45度并且<=135度,播放旋转90度动作(具体向左向右根据差值的符号),然后再使用步骤1的方法

3.当前Yaw和目标Yaw相差绝对值>135度,播放旋转180度的动作(同上),然后再使用步骤1的方法

28.ue4实现跳跃

动作资源有三个(JumpUpAnim,JumpDownAnim,JumpLandAnim)

JumpUp为起跳时播放的动作,JumpDown为跳到最高点后下降播放的动作,JumpLand为落地播放的动作

ue4中Character内置了跳跃功能,所以只需在动画蓝图里实现跳跃相关的状态就可以了

具体需要JumpUp、JumpLoop、JumpEnd三个状态,假设AI只有在Walk状态会切换至JumpStart状态,那么Walk切换至JumpStart的条件为SpeedZ>0,JumpStart切换至JumpLoop的条件为SpeedZ<0,JumpLoop切换至JumpEnd条件为SpeedZ==0。JumpEnd切回Walk条件为Land动作播放完成,在动画蓝图中可用TimeRemaining结点来判断。

29.ue4实现自然的死亡

比较自然的死亡是使用物理模拟,但如果纯使用物理模拟,打击感就会比较弱,比较好的做法是做八个方向的死亡动作,每个死亡动作做到一半的时候开启物理模拟(死亡动作本身就只有一半),这种做法在大部分情况是没有问题的,但当死亡动作会穿透障碍物时,开启物理模拟,角色有可能会被弹得很远,这取决于角色跟障碍物的重叠程度。所以想到的解决方案是,检测角色跟障碍物碰撞的瞬间,开启物理模拟。怎么检测呢,一个方法是SkeletalMesh的BeginOverlap,但这种做法并没有检测到事件(就算可以检测,效率也比较低),还一个就是想到OnComonentHit事件,这个事件只有开启物理模拟后才会触发,所以也不能用。最后想到的方法是,在Mesh上加碰撞体,让碰撞体挂到Spine和Head关节上(具体挂哪个关节跟模型相关),然后检测碰撞体跟障碍物的碰撞事件,在事件处理中开启物理模拟,测试后效果很完美。

30.NavLinkProxy不起作用

自己实现了一个BTTask_MoveToActor行为树节点,在节点内部调用AIMoveTo方法实现移动到目标点,发现NavLinkProxy不起作用,但是在调用AIMoveTo之后Delay1到2秒,发现就起作用了,后来发现是由于每帧都在调用AIMoveTo引起的,改成只有在移动目标切换或当前移动速度为0时,才调用AIMoveTo就好了。

31.ReplicatedUsing如何获取被覆盖前的值

拿ShooterGame中的ShooterCharacter中的CurrentWeapon属性举例,

UPROPERTY(Transient, ReplicatedUsing=OnRep_CurrentWeapon)
class AShooterWeapon* CurrentWeapon;

UFUNCTION()
void OnRep_CurrentWeapon(class AShooterWeapon* LastWeapon);

OnRep函数可以带一个参数,也可以不带参数,如果带一个参数,此参数类型只能和被标记的属性一致,代表之前被覆盖的值

32.ue4中有提供角度标准化的方法吗(即把角度标准化到(-180,180]范围内)

有的,在Rotator.h中

	/**
	 * Clamps an angle to the range of (-180, 180].
	 *
	 * @param Angle The Angle to clamp.
	 * @return The clamped angle.
	 */
	static float NormalizeAxis( float Angle );

33.Actor位置不同步问题

正常情况下,Actor在勾选了Replicates和ReplicateMovement后,在服务器修改Actor的位置,会自动同步到客户端,

但需要注意,当Actor被隐藏后,Actor的位置是不会同步到客户端的

34.ue4蓝图中如何调用基类Event(比如BeginPlay)

如上图所示,4.21版本,搜索方法找不到基类方法,在该事件上右键,点击Add call to parent function即可

35.多人联网游戏时,客户端如何获取当前服务器时间(4.21版)

GameStateBase中,GetServerWorldTimeSeconds方法,如下图:

36.关闭和打开头发丝渲染

r.HairStrands.Strands 0

r.HairStrands.Strands 0

37.关闭和打开阴影

r.ShadowQuality 0

r.ShadowQuality 10

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ue4 常见问题解答 的相关文章

  • Docker 镜像备份与迁移

    1 容器保存为镜像 docker commit pinyougou nginx mynginx pinyougou nginx 是容器名称 mynginx 是新的镜像名称 2 镜像导出 docker save o dockerdemo ta
  • android T 前台Service

    获取android 13 用户控制 用户在长时间运行的应用程序上获得更多透明度和控制权 xff1a 前台服务仍然需要包含通知 xff0c 并且应用程序必须请求权限才能显示通知 FGS 通知现在可以被用户关闭而不影响 FGS用户可以在任务管理
  • android 8.0+后台Service限制

    后台Service限制 背景 每次在后台运行时 xff0c 应用都会消耗一部分有限的设备资源 xff0c 例如 RAM 这可能会影响用户体验 xff0c 如果用户正在使用占用大量资源的应用 xff08 例如玩游戏或观看视频 xff09 xf
  • CMake入门(一)Ubuntu下使用和Window下使用

    引用一段知乎上关于 xff1a CMake 如何入门 xff1f 生态如此 xff0c 长久来看 xff0c 绕不开 就像Github 看了下 xff1a B站上的一个资源 cmake构建c 43 43 项目快速入门2 1 在Windows
  • 安装ubuntu成功后不能重启(nomodeset)躺坑记录acpi int3400:00:Unsupported event

    针对这篇文章的补充 xff1a 安装ubuntu成功后不能重启 xff08 nomodeset xff09 legalhighhigh的博客 CSDN博客 如果找不到 34 Boot Options ed boot 61 initrd 61
  • npm install 出现错误 unable to access ‘https://github.com/adobe-webplatform/eve.git/‘:

    前言 xff1a 输入命令 npm install registry 61 https registry npm taobao org xff0c 出现错误 unable to access 39 https github com adob
  • Kubernetes初识

    一 Kubernetes是什么 xff1f xff08 一 xff09 读音 了解一个新事物 xff0c 最先学会都是怎么读 xff0c 不然以后会一直读错下去 xff0c 到时候说出去可能就会被人嘲笑 Kubernetes xff0c 读
  • Linux操作系统基本代码

    1 xff08 ls xff09 list 列出目录的所有项 ls 查看当前目录 xff08 ls l 文件路径 xff09 以详细模式查看 xff08 ls xff5e xff09 展示主目录文件 xff08 ls xff09 展示当前目
  • C语言 const、static、volatile等关键字的作用

    目录 前言 const static volatile extern 总结 前言 C语言里面有许多关键字 xff0c 本文结合我自己的了解简单讲讲几个常用关键字的作用 const 问 xff1a const有什么用 xff1f 答 xff1
  • 函数调用,中断以及进程切换,的现场保护的区别

    注意以下过程描述了两种armv7指令集的内核的中断表现 xff08 cortex A7和cortex m3 xff09 xff0c 但是cortex A7和cortex m3表现很不一样 xff0c 因为Cortex m3只有用户级和特权级
  • Cortex-M3 PendSV 中断 系统调用 说明

    参考 Cortex M3权威指南中文版 PendSV异常是和系统调用有些类似 xff0c cpu 需要手动将往NVIC 的PendSV 悬起寄存器中写1 xff0c 然后产生中断 xff0c 系统调用 xff08 SVC xff09 是co
  • 微积分的直观理解

    在微积分中 xff0c 我们进行定积分计算的时候一般是用牛顿莱布尼兹公式 xff0c 不定积分计算也类似 xff0c 都需要寻找原函数F x xff0c 但是如果想直观的理解微积分 xff0c 我们需要顺着公式的反方向进行理解 xff0c
  • Makefile中调用make命令,-C和-f选项的区别

    C选项 Makefile中 C是递归调用子目录中的Makefile xff0c C选项后跟目录 xff0c 表示到子目录下执行子目录的Makefile xff0c 顶层Makefile中的export的变量还有make默认的变量是可以传递给
  • 卡尔曼滤波

    标准卡尔曼滤波推导相关 预测 predict 更新 update 注意 xff0c 以下对于时间的下标 xff0c 有的时候用t有的时候用k xff0c 它们其实是一样的 xff0c 因为参考不同的资料 xff0c 所以写的比较乱 其中是隐
  • EM算法原理

    Notion The all in one workspace for your notes tasks wikis and databases
  • Android ko module compile 简介

    Notion The all in one workspace for your notes tasks wikis and databases
  • volatile c语言关键字 / cache / 内存一致性

    Notion The all in one workspace for your notes tasks wikis and databases
  • Qt中的QWidget::move函数

    QWidget move函数 原型 xff1a void move int x int y void move const QPoint amp 其中move的原点是父窗口的左上角 xff0c 如果没有父窗口 xff0c 则桌面即为父窗口
  • 欧拉角和万向节死锁

    一 什么是欧拉角 欧拉角就是物体绕坐标系三个坐标轴 xff08 x xff0c y xff0c z轴 xff09 的旋转角度 xff0c 在这里坐标系可以是世界坐标系 xff0c 也可以是物体坐标系 xff0c 旋转顺序也是任意的 xff0
  • 【freeRTOS内存管理策略详解】

    内存管理对应用程序和操作系统来说都非常重要 现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关 FreeRTOS操作系统将内核与内存管理分开实现 xff0c 操作系统内核仅规定了必要的内存管理函数原型 xff0c 而不关心这些内存管理函数

随机推荐

  • NGFF、M.2、PCIe、NVMe概念区分以及PCIEx1 x4 x8 x16区别

    对于NGFF M 2 PCIe NVMe等概念的说明 解决方案 NGFF Next Generation Form Factor xff0c 顾名思义 xff0c 是物理外形 Form Factor 的标准 与 NGFF 并列的是 2 5
  • 二重积分和雅可比行列式

    我们以二重积分为例进行说明 xff0c 首先说结论 xff1a 一 结论 若x 61 x u v y 61 y u v 存在偏导数 xff0c 则二阶雅可比行列式为 61 61 dxdy 61 J2 dudv J2的绝对值 且 其中积分区域
  • 雅可比行列式和雅可比矩阵

    接触雅可比行列式是在二重积分的变量变换中 xff0c 参见我的另一篇文章https blog csdn net xiaoyink article details 88432372 下面我们来详细说明一下雅可比行列式和雅可比矩阵 雅可比矩阵
  • jlink-v8 固件修复

    一 先说 jlink v8 v9 v10区别 v8基本价格在40左右 xff0c 芯片是atml的 xff0c 但是很多反应是掉固件和提示盗版问题 v9现在主流 xff0c 盗版价100左右 xff0c 主控芯片stm32 做的比较成熟 x
  • kubernetes学习-快速上手速查手册

    目录 使用k3s快速搭建k8s安装k8s dashboard使用Helm部署K8S资源k8s核心命令一切推倒重来资源创建方式NamespacePodDeploymentServiceIngress解决官网Ingress安装不了问题使用方式
  • 作为一个4年程序员至少需要掌握的专业技能

    一名3年工作经验的程序员应该具备的技能 xff0c 在机缘巧合之中 xff0c 看了这篇博客 感觉自己真的是很差 xff0c 一直想着会写if else 就已经是一名程序员了 xff0c 在工作之余也很少学习 于是 xff0c 自己的cod
  • C语言与C++的区别

    一 C 43 43 简介 本贾尼 斯特劳斯特鲁普 于1979年4月在贝尔实验室负责分析UNIX系统的内核的流量情况 于1979年10月开始着手开发一种新的编程语言 在C语言的基础上增加了面向对象机制 这就是C 43 43 的来历 在1983
  • 我的2011-当梦想照进现实

    我的2011年 xff0c 之所以是现在的样子 xff0c 始缘于我三年前的一个决定 离职考研 对于工作了两年的我来说 xff0c 离职考研是人生的一场博弈 我的2011年 xff0c 结束了研究生期间对三维骨骼动画渲染的相关研究 xff0
  • Dockerfile RUN 同时执行多条命令

    Dockerfile RUN 同时执行多条命令 Dokcerfile中的命令每执行一条即产生一个新的镜像 xff0c 当前命令总是在最新的镜像上执行 如下Dockerfile xff1a RUN span class hljs built
  • HC-SR04超声波模块使用记录

    文章目录 HC SR04超声波模块使用记录轮询测量方式一 模块使用中的问题二 应对方法三 注意 分时测量利用输入捕获测量利用输入捕获测量 HC SR04超声波模块使用记录 具体使用方法见HC SR04使用手册 xff0c 本文重点记录该模块
  • 【C语言冒泡排序、选择排序和快速排序】

    文章目录 前言一 冒泡排序二 选择排序三 快速排序四 代码设计与实现代码设计代码实现 调试结果冒泡排序改良 延伸思考总结 前言 本文简单介绍了C语言的冒泡排序 选择排序 快速排序 xff0c 结合本人的理解与使用做一下记录 一 冒泡排序 思
  • 平衡车制作---原理篇

    平衡车制作 原理篇 文章目录 平衡车制作 原理篇前言直立控制直观感受内部机理 速度控制方向控制总结 前言 本篇教程内容主要来自于 直立平衡车模参考设计方案 xff0c 且这里是从概念层面讲述的并没有具体的控制理论方面的内容 有了这些概念方面
  • FreeRTOS使用注意

    FreeRTOS使用注意 xff1a 中断中必须使用带FromISR结尾的API函数只有中断优先级处于FreeRTOS可管理的范围内时 xff0c 才能使用FreeRTOS提供的API函数中断中不要使用FreeRTOS提供的内存申请和释放函
  • 现代控制理论基础总结

    现代控制理论基础总结 xff08 线性部分 xff09 学习现代控制理论也有两个月的时间了 xff0c 里面涉及的基础内容和公式十分之多 xff0c 所以现在对各部分基础知识作一个总结 1 控制系统的状态表达式 在现代控制理论中 xff0c
  • 题库(关于c++的网站都盘了)大盘点(好多没盘到)

    1 keda ac 2 hydro ac 3 luogu com cn 4 cplusplus com 5 leetcode cn 6 https loj ac 7 noi cn 8 ybt ssoier cn 8088 9 learncp
  • 利用MapReduce进行二次排序--附例子

    首先先来明确几个概念 xff1a 1 分区 partition 1 xff09 分区 xff08 partition xff09 xff1a 默认采取散列值进行分区 xff0c 但此方法容易造成 数据倾斜 xff08 大部分数据分到同一个r
  • MapReduce之单表关联Join输出祖父母、孙子---(附例子)

    需求 xff1a 一个文件 xff0c 有子女和对应的父母 xff0c 要求输出 祖父母 孙子 xff0c 文件如下 xff1a 单表关联 结果 xff1a child parent grand child Tom Lucy Alice T
  • 如何把 ubuntu 16.04.7 命令行界面下的系统语言更改为中文?

    如果你的 ubuntu 16 04 7 系统在命令行下的默认语言是英文 xff0c 比如下面这样 xff1a 怎么更改才能让某些输出单词显示成中文呢 xff1f 可以修改 etc default locale 这个文件 xff0c 先看一下
  • 小程序云开发实现订阅消息

    链接 简书博主示例 xff1a https www jianshu com p d90f22dac001 官方文档 xff1a 官方文档1 文档2 云调用 使用方法demo 假如这是一个点餐系统 xff0c 想让顾客下单以后 xff0c 派
  • ue4 常见问题解答

    1 如何让客户端自动连接服务器 span style color 0000aa MyGame span span style color 000066 span span style color 000066 exe span span s