[19] C++网络通信开发

news/2024/9/24 1:26:18

Day1

 通过引入路径找到类型

根据角色进入方向开门(向量运算、几何概念、点乘)

  1. 向量的减法: OtherActor->GetActorLocation() - GetActorLocation() 这一部分是计算两个位置向量之间的差向量,即门的位置向量减去角色的位置向量,得到了一个从门指向角色的向量。

  2. 向量的归一化: V1.GetSafeNormal() 这一部分是将差向量归一化,即将向量的长度调整为1,这样做的目的是为了得到一个表示方向的单位向量,而不关心具体的长度。

  3. 点乘运算: FVector::DotProduct(GetActorRightVector(), V1) 这一部分是计算门的右侧向量与角色进入方向向量的点乘。点乘的结果可以用来判断两个向量之间的夹角关系,从而确定进入角色的位置相对于门的位置是在门的左侧还是右侧。

  4. 几何概念: 根据点乘的结果,代码确定了门的开启方向。如果点乘结果大于0,则进入角色在门的右侧,门应该向着负方向开启;如果点乘结果小于0,则进入角色在门的左侧,门应该向着正方向开启。这涉及到了几何中向量的方向和夹角的关系。

曲线的应用

向量点乘 计算夹角
2个夹角余弦值

计算角色移动的方向(点乘)

  1. 获取移动方向: 使用GetVelocity()方法获取角色的移动速度向量,并使用GetSafeNormal()方法将其归一化,以获取移动方向。

  2. 计算移动方向与角色正方向的夹角: 使用点乘运算FVector::DotProduct()计算移动方向向量和角色正方向向量的点乘结果,从而得到它们之间的夹角的余弦值。

  3. 将余弦值转换为角度: 使用反余弦函数FMath::Acos()将余弦值转换为夹角的弧度值,并将其转换为角度制。

  4. 根据移动方向与角色右侧向量的点乘结果调整角度方向: 如果移动方向向量与角色右侧向量的点乘结果小于0,则将计算得到的角度方向乘以-1,以确保角度方向的正确性。

FVector MoveDir = MyCharacter->GetVelocity().GetSafeNormal();
//移动速度与角色正方向夹角
float DotValue = FVector::DotProduct(MoveDir, MyCharacter->GetBaseAimRotation().Vector());
//反余弦 注意反余弦的单位是弧度,需要将弧度转为角度
Direction = FMath::Acos(DotValue) * 180 / 3.14f;
if (FVector::DotProduct(MoveDir, MyCharacter->GetActorRightVector()) < 0)
{Direction *= -1;
}
bIronsight = MyCharacter->IsIronsight();
//加速度方向和正方向的夹角 = 余弦
//反余弦

判断角色是否向前奔跑(点乘)

bool ALGCharacterBase::IsSprinting()
{if (GetHoldWeapon()){return bSprint&& !bIsCrouched&& FVector::DotProduct(GetVelocity().GetSafeNormal(), GetActorForwardVector()) > .9f;}return bSprint && !bIsCrouched;
}
  • GetVelocity().GetSafeNormal():获取角色当前的速度向量,并将其归一化,以得到角色的移动方向。
  • GetActorForwardVector():获取角色当前正前方的向量。
  • FVector::DotProduct():计算移动方向向量和正前方向向量的点乘结果。

如果这个点乘结果大于0.9(在1附近),那么可以理解为角色的移动方向与正前方向相近。这种检查可能用于一些游戏中的特定功能或者行为,比如判断角色是否在直线上高速移动,或者在进行某些特殊动作时的判断。

节点

API

HUD取角色指针 : GetOwningPawn();

Tips

  • 改组件关编译器
  • 常量都应该暴露成参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31090.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

实例启动时拉起任务

在 GpuMall 平台使用该功能可以在实例启动的同时自动帮您拉起进程或者任务,该功能主要适用于以下场景:在 GpuMall 平台使用该功能可以在实例启动的同时自动帮您拉起进程或者任务,该功能主要适用于以下场景: 立即免费体验:https://gpumall.com/login?type=register&so…

vue2使用elementUI组件el-tooltip指定元素进行提示信息(图标显示信息)

<el-table-column prop="operation" label="操作" border width="200px"><template slot-scope="scope"><div class="operation-icons"><!-- 查看按钮 --><el-tooltip content="查看"…

TCP TIME_WAIT状态优化

一般来讲,在高并发的场景中,出现TIME_WAIT连接是正常现象,一旦四次握手连接关闭之后,这些连接也就随之被系统回收了但是在实际高并发场景中,很有可能会出现这样的极端情况——大量的TIME_WAIT连接TIME_WAIT状态连接过多的危害TIME_WAIT 状态下,TCP连接占用的本地端口将一…

【Quant102】 经典技术指标 Pandas 实现(第一部分)

双均线策略假设你是个高级程序员和量化研究员,编写函数实现双均线策略。函数接受数据帧df,较短均线的列名称short_col和较长均线的列名称long_col,inplace参数控制是否原地更新df。买卖信号应保存在signal列中。最后返回df。def dual_moving_average_strategy(df, short_col…

2024 年 5 月 13 日 周一 晴 热(376 字)

正文感觉自己这两天摸鱼有些严重(笑。前两天有件事忘了写了。周六晚去吃饭和拍照的时候,看见有个女生坐在路边,红着眼睛跟谁打电话,语气里带一股哭腔。身上穿着校服,我想应该是高中生。身边没有人。我不知道什么事情能让人发火又哭泣,觉得有些奇怪,也不知道怎么宽慰这个…

基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真

1.算法运行效果图预览2.算法运行软件版本 MATLAB2013B3.算法理论概述基于高斯混合模型(Gaussian Mixture Model, GMM)的视频背景提取和人员跟踪算法是一种广泛应用的计算机视觉方法,主要用于分离视频序列中的静态背景和动态前景(比如人物运动)。高斯混合模型是一个概率密度函…

开发工具连接实例远程开发

远程开发主要基于将开发环境(包括代码编辑、编译、运行等)从本地机器转移到远程服务器上,这个过程涉及几个关键组件和概念远程开发主要基于将开发环境(包括代码编辑、编译、运行等)从本地机器转移到远程服务器上,这个过程涉及几个关键组件和概念: 立即免费体验:https:/…

m基于遗传优化的LDPC码OMS译码算法最优偏移参数计算和误码率matlab仿真

1.算法仿真效果 matlab2022a仿真结果如下:2.算法涉及理论知识概要低密度奇偶校验码(Low-Density Parity-Check Codes, LDPC codes)因其优秀的纠错能力和接近香农极限的性能而广泛应用于现代通信系统中。有序统计译码(Ordered Statistics Decoding, OSD)是一种基于概率译码准则…