Unreal5 第三人称射击游戏 射击功能实现1

news2024/11/26 2:23:23

状态机的缓存

状态机缓存功能相当于我们只需要实现一次,可以在多个地方引用,也可以在别的状态机里面使用,而不是在里面再重新写一遍相应的功能。
我们可以在基础状态机的链接拉出一条线,搜索“缓存”
在这里插入图片描述
第一个就是新保存的缓存姿势,选中改个名称,这就是默认的基础姿势。
在这里插入图片描述
这样,我们就可以在其它状态机里面使用当前基础动画状态机产生的结果。
接着,创建一个新的状态机,用于实现特定的功能
在这里插入图片描述
在内部创建一个默认状态
在这里插入图片描述

在状态内部使用缓存姿势
在这里插入图片描述
这样,还是实现了之前的功能,但是,我们可以在功能状态机中,叠加其它的动画,实现更多情况下需要播放的动画。

持枪基础状态

先创建一个混合空间1D,这个用于存储在持枪状态下的基础姿势
在这里插入图片描述
在基础状态机里面,现在已经使用布尔混合了默认站立和蹲伏状态,我们再创建一个变量用于判断是否切换持枪状态,并将刚才制作的混合空间动画拖入
在这里插入图片描述
下面,我们要在角色蓝图里面实现武器装备的功能,现在还需要一个事件去触发武器装备功能,那就在增强输入里面创建一个装备武器功能,创建一个输入操作。
在这里插入图片描述
在这里插入图片描述
将刚才的按键增加到上下文,使用数字1键触发。在角色蓝图中,找到事件
在这里插入图片描述
在事件触发时,对动画蓝图的变量进行切换
在这里插入图片描述
运行测试,会发现,点数字1,可以对持枪状态和默认idle状态实现切换。

装备武器动画实现

在功能状态机里面,创建一个新节点,可以实现达到要求,可以切换到装备武器的动画状态
在这里插入图片描述
创建一个变量,是否需要装备武器,然后功能状态机中的基础切换到装备武器状态的切换条件设置它
在这里插入图片描述
回到默认的状态则是判断装备武器动画是否播放完毕,我们可以获取相关剩余动画时间,单位是秒
在这里插入图片描述
在装备武器动画剩余时间小于0.1的时候,我们设置回到默认状态
在这里插入图片描述
记得给装备武器状态添加动画
在这里插入图片描述
记得,装备武器动画只需要播放一次,不要开启循环动画
在这里插入图片描述
为了实现装备武器和收回武器的功能,我们还需要修改播放速率,1就是默认的装备武器,如果速率改为-1,将会回放动画,实现回收武器的效果
在这里插入图片描述
修改速率肯定无法在动画状态里面修改,我们需要将其公开为引脚,在角色蓝图内实现对速率的修改
在这里插入图片描述
动画前面会出现播放速率的引脚
在这里插入图片描述
我们可以使用一个变量去控制引脚的值,或者直接将其设置成提升变量。
在这里插入图片描述
这样,在角色蓝图内,即可根据角色装备武器还是收回武器,设置相应的动画。
在角色蓝图中,设置是否持有武器逻辑后面,添加对速率的修改
在这里插入图片描述
接着,在后面,设置装备武器变量
在这里插入图片描述
装备和收回都直接设置此变量,因为它们的区别只是播放速率的区别。
我们设置完成后,需要将这个值修改成不可装备武器,防止默认状态一直向装备武器状态切换。
在这里插入图片描述
测试发现,播放装备武器动画和默认状态切换有些生硬,那我们可以适当延长一些过渡时间
在这里插入图片描述
还有一个问题,就是我们在移动时,进行装备武器,会发现还是处于站立状态播放装备武器,需要我们实现按骨骼分层混合实现。
在这里插入图片描述
以默认缓存的动画为基础动画进行混合
在这里插入图片描述
要找到需要混合骨骼位置,因为装备武器动画主要是上半身,那么,我们需要找到上半身的根节点
在骨骼查看界面,可以查看所有骨骼
在这里插入图片描述
选中spine_01后,显示下面的所有骨骼
在这里插入图片描述
thigh_l是左腿
在这里插入图片描述
thigh_r是右腿
在这里插入图片描述
现在我们知道到了,上半身的根骨骼是spine_01,那么从这个骨骼开始混合。
复制名称
在这里插入图片描述
设置节点属性,在层设置上面增加一个数组,将骨骼名称添加进去,混合深度是混合到第几层,默认值0是所有层级。由于骨骼自身混合,所以在自身空间混合而不是在世界空间。
在这里插入图片描述
这样便实现了在移动中装备武器动作的实现。

换装功能实现

一般衣服都是已经绑定了相应的骨骼,我们需要做的是将其添加到模型节点下面,然后让骨骼运算影响它即可。
先选中衣服
在这里插入图片描述
在角色蓝图选中网格体,点击添加
在这里插入图片描述
这样添加骨骼网格体时,后面会带有相应选中衣服的名称
在这里插入图片描述
添加到骨骼网格体下面
在这里插入图片描述
这种状态只是将模型添加了上去,但是骨骼网格体还不会更新模型。
我们需要设置骨骼去更新它,在构件脚本中
在这里插入图片描述
添加设置引领姿势组件
在这里插入图片描述
让骨骼模型使用网格体的骨骼组件更新
在这里插入图片描述
如果你有多个模型添加
在这里插入图片描述
在这里插入图片描述
这样就实现了骨骼更新当前模型,如果你想创建不同的,那么只需要创建子类,然后修改节点相应的模型,就可实现换装功能。

插槽替换模型

除了衣服以外,还有一种就是我们需要替换各种各样的武器,比如刀剑,护盾等等,这种模型是不需要通过骨骼更新动画的,它只需要的是骨骼上的某一个位置,然后跟随着某根骨骼移动即可。比如,将剑放到手上,它只需要跟随着手的位置更新自己的位置即可。
要实现这个功能,我们需要在角色骨骼上面创建(插槽)。
在这里插入图片描述
为了方便设置插值的位置,我们还可以给插槽添加预览资产
在这里插入图片描述
为了更方便调整,我们还可以在右侧设置预览动画
在这里插入图片描述
然后将动画停在某一帧,来设置相应的位置
在这里插入图片描述
然后调节插槽的位置,实现它在相应的位置显示
在这里插入图片描述
在这里插入图片描述
最后一步,在角色蓝图内,网格体创建一个骨骼网格体子类,在插槽一栏中,父项套接字(这中文翻译的啥,应为为parent Socket)设置插槽的名称,最后将模型添加上去,就可以实现模型添加。
在这里插入图片描述
如何动态创建添加
我们使用节点从类生成Actor,可以把类实例化成一个实例
在这里插入图片描述
在类那里选择需要实例化的类,并创建一个变换(不创建会报错)
在这里插入图片描述
并将实例化的Actor添加到组件
在这里插入图片描述
父节点就是网格体,SocketName就是需要添加的骨骼节点的名称,我们不需要相对坐标,直接将Actor对齐到目标即可。
在这里插入图片描述
这就是我们手动实例化类进行逻辑添加的实现过程。项目运行起来,你会发现蓝图的实例被添加到了角色身上
在这里插入图片描述

武器蓝图制作

武器蓝图是我们需要创建的所有武器的基类,我们可以通过此类创建子类,来实现各种各样的武器。
首先创建一个Actor,作为所有武器的基类
在这里插入图片描述
然后基于这个基类,创建一个武器基类BP_Gun,然后基于武器基类再创建一个AKM的基类
在这里插入图片描述
这个节点创建好以后,我们将模型添加到蓝图里面,直接使用默认位置即可,因为我们在骨骼上面调试的时候,就是基于模型的默认值调整的位置。
在这里插入图片描述
然后根据上面的方式,可以将蓝图实例化然后按插槽的名称添加到角色身上。

实现角色从背后拿取武器

要实现让角色把背后的武器拿到手中,我们需要在播放从背后拿武器的时候,发送一个动画通知,在角色蓝图中,实现武器的插槽切换,也就是从背后的插槽切换到手上的插槽。
那么,首先我们要实现动画通知。那么创建蓝图动画通知AnimNotify
在这里插入图片描述
然后创建一个名字为
在这里插入图片描述
我们这里要对默认的函数进行重载,实现内部逻辑。
在这里插入图片描述
函数给我们提供了三个参数,触发事件的网格体组件,动画,通知事件参考类型
在这里插入图片描述
我们可以通过网格体组件获取到它的所有者
在这里插入图片描述
然后将类型转换为我们的角色蓝图类型,并可以获取到对应的动画蓝图
在这里插入图片描述
我们根据当前动画蓝图的状态,设置是将装备放到手上还是放到背上,通过将Actor添加到组件节点添加到相应的位置。
在这里插入图片描述
在动画里面,找到对应帧位置,右键添加通知
在这里插入图片描述
当手伸到后面的帧上面,添加通知状态
在这里插入图片描述

蹲伏状态拿武器

先创建一个混合动画,蹲伏状态拿着武器的默认idle状态,以及移动时的状态的混合
在这里插入图片描述
然后再基础状态机的基础状态里面,将持有武器蹲伏按布尔混合一下即可
在这里插入图片描述
在跳跃状态里面,也对是否持枪进行一下判断
在这里插入图片描述
在坠落里面,我们也需要根据持枪状态修改坠落的效果,让其保持持枪状态,而不是双手抬起
在这里插入图片描述

状态判断的修改

在触发跳跃和武器切换的时候,我们会进行状态的判断,防止出现抽搐的情况。我直接将其抽离成了一个函数
在这里插入图片描述
可以进行重复调用,而且还保证了节点的简洁。
在这里插入图片描述
应用的时候还是正常使用即可,修改一下状态。

修改地面摩擦力

为了实现移动时正常摩擦力,没有移动输入时,则降低摩擦力,增加惯性。
在这里插入图片描述
使用了增强输入就是好,就事件开始和结束事件,我们直接使用这两个链接即可。

瞄准功能的实现

瞄准功能是在持有武器时,提高命中的准确率。
通过增强输入,鼠标右键触发事件,然后判断当前是否处于持枪状态
在这里插入图片描述
然后判断当前是否可以切换到瞄准状态,然后退出后切换会null状态
在这里插入图片描述
使用时间轴的0-1切换使用插值,去修改弹簧臂的长度,来实现镜头的伸缩
在这里插入图片描述
运行发现,瞄准状态下,我们还可以看到角色的正面,原因在于,角色朝向是根据移动方向确定的,而不是根据相机的朝向确定的。所以,在瞄准状态时,我们需要将角色朝向修改为根据相机朝向移动,取消根据移动方向确定。
在这里插入图片描述
在这里插入图片描述
创建两个自定义事件,第一个是切换到瞄准状态动作,第二个是退出瞄准状态
在这里插入图片描述
获取两个设置事件的方式
在这里插入图片描述
角色朝向朝向运动方向需要在角色移动组件里面获得
在这里插入图片描述

射击瞄准状态下移动处理

现在在瞄准状态下,如果人往后走,我们还是会播放向前移动的动画,这样是不合理的。所以,我们需要实现脚的移动按照朝向进行侧移或者后已来兼容八个方向的移动。为了实现360度的移动,我们需要计算移动方向和朝向之间的夹角,在动画蓝图中,内置了一个计算方向的节点,可以根据角色的速度和朝向,获取到一个范围在[-180,180]的角度,我们可以根据这个数值去修改瞄准时移动需要播放的动画。
在这里插入图片描述
传入角色的速度和角色朝向,我们可以将计算得到的移动方向角度存储为变量,方便在状态机中使用。
在这里插入图片描述
注意,大家要多写注释,可以清楚知道变量是什么作用
在这里插入图片描述
下面,要制作混合动画,创建一个混合空间,用于处理瞄准状态下的移动的角度和速度的动画,我们需要设置两个值,一个是速度,和默认的速度值使用一个,另一个就是角度,用于实现前后左右八个方向移动时,脚能够播放正确的动画。
在这里插入图片描述
轴向就变为横轴就是移动角度,纵轴就是移动速度,我们需要将每种速度每种角度的动画都添加进去,idle状态也就是速度为0的使用一个动画即可,其它三种速度对应的动画,需要每种角度的都需要添加上。为什么只做到行走,现实生活中,瞄准射击状态下是无法射击的,如果要进入跑步状态,那么,我们切换到持枪行走状态即可。
在这里插入图片描述
随着连的节点越来越多,为了方便后面的调整,我将基本状态,持枪状态和瞄准状态制作了三个状态机,每个状态机里面设置可以跳跃。
在这里插入图片描述
在瞄准动作状态机里面,坠落和跳跃都用持枪状态的动画。在基本的移动状态中,将我们制作的瞄准状态混合动画添加进去,设置上我们之前制作的方向和角色默认速度。
在这里插入图片描述
可以看到,动画蓝图切换到瞄准状态动画需要一个布尔变量isAim,这个需要在角色蓝图里面设置。角色蓝图中,之前我们设置橘色切换瞄准状态那里,增加对动画蓝图的属性的设置。
在这里插入图片描述
进入场景测试,会发现实现了角色八方向的移动,以及根据速度行走的效果。但是你会发现想走还是使用的默认的速度,所以,我们还需要限制一下瞄准状态的移动速度。
在速度判断那里,增加了额外的通过布尔选择节点,如果在瞄准状态,移动速度就是行走速度。
在这里插入图片描述
最后在瞄准状态切换时间轴更新结束后,重新调用速度判断,更新速度。这样表现还有一些速度的惯性,比如瞄准状态切换会默认状态时,它会在动画切换完以后才恢复正常速度。
在这里插入图片描述

使用反向动力学解决无法双手握枪的问题

在头部瞄准偏移时,我们会发现左手会握不住枪,这是因为枪需要的是两个骨骼绑定,但是我们只能绑定一个,在播放动画时,会出现偏差。
在这里插入图片描述
这主要是我们在动画蓝图里面混合的瞄准偏移动画导致的
在这里插入图片描述
首先把它移动到瞄准偏移制作的动画前面,让其不再影响瞄准姿势,分别在idle和持枪状态添加。这样我们在转向完成后,使用FABRIK解决这个问题。
在这里插入图片描述
接下来我们使用前后延伸反向运动学(Forward And Backward Reaching Inverse Kinematics,简称 FABRIK)来解决双手握枪一个手握不住的问题。
在需要处理的位置,就是头部转向后面,创建一个FABRIK来处理
在这里插入图片描述
在FABRIK右侧的细节属性栏,有一个结束效果器,相当于设置它的执行范围,到哪里的骨骼结束,我们不需要公开引脚,取消公开为引脚,然后再细节栏设置
在这里插入图片描述
结束效果内需要添加执行器目标,这个就相当于需要跟随的目标,解算器就是左手,需要填入解算的骨骼
在这里插入图片描述
设置完成,选择编译,进入调试模式,选中持有武器状态
在这里插入图片描述

会发现两只手绑定到了一块
在这里插入图片描述
选中FABRIK以后,会发现我们有调试位置的箭头,拖拽到合适的位置,即可实现两个位置的绑定。
在这里插入图片描述
进入运行模式,会发现,这个问题被完美的解决了,两个节点位置偏移固定了
在这里插入图片描述

射击状态下的瞄准偏移

还是老样子,以正常状态为基础姿势
在这里插入图片描述
设置完成后打开里面一个查看
在这里插入图片描述
这样就是设置成功了。
接下来要创建一个瞄准偏移,之前我们创建过基础状态下的瞄准偏移,来实现了跟随相机,现在创建的是持枪瞄准状态下的瞄准偏移
在这里插入图片描述
左边的属性和之前一样
在这里插入图片描述
设置好动画以后,设置预览动画,就可以查看效果了
在这里插入图片描述
然后将射击状态的瞄准偏移添加进来,并复制刚才的FABRIK节点过来,解决双手偏移的问题
在这里插入图片描述

射击状态蹲伏动画

和基础瞄准状态一样,它也需要两个坐标轴,主要是为了解决蹲伏状态下瞄准移动时,脚要往正确的方向移动的问题。
首先创建一个混合空间,两个轴的值和基础瞄准状态的一样即可
在这里插入图片描述
拖的时候,推荐大家直接按着Shift键,这样它会更好的粘在分格的位置
设置完成动画后,记得按着ctrl查看一下动画是否有问题
在这里插入图片描述
然后使用按布尔混合姿势,根据是否蹲伏修改动画
在这里插入图片描述

射击动画的实现

射击功能的触发使用鼠标左键,在增强输入里面,增加一个输入
在这里插入图片描述
在这里插入图片描述
然后再角色蓝图中,调用射击事件时,首先判断是否能够切换到射击状态,然后再根据当前是否已经处于瞄准状态,如果没有则先切换到瞄准状态,然后后续再进行射击逻辑。
在这里插入图片描述
AIm Shoot Judgement是我封装的一个宏,宏的好处是可以自己定义执行链接,所以可以阻断后续的执行。之前我以为函数也可以的,最后测试发现是不行的,所以封装了宏。宏的缺点就是只能在蓝图内部使用。
在这里插入图片描述
判断里面条件是,需要角色已经装备了武器,并且在默认状态或者瞄准射击状态时,可以向后运行。
在射击完成后,我们还需要回到其它状态,能够回到的状态有两个,一个是基础持枪状态,另一个就是瞄准状态。所以我们还需要有一个变量进行判断,就是当前是否处于瞄准状态,这个值只有瞄准事件触发时设置。如果不是瞄准状态,使用定时器去去触发函数回到瞄准状态。
在这里插入图片描述
而这个是否处于瞄准状态的变量,只有瞄准事件触发
在这里插入图片描述

定时器的创建有多种方式
在这里插入图片描述
我们现在使用的是以函数名定义的定时器,需要保证写的名字和定义的函数或自定义事件的名称相同才可。
在这里插入图片描述
我们还可以通过函数名清除定时器
在这里插入图片描述
到这里,射击事件的前提处理已经处理完成,射击时在瞄准状态,以及退出时是否回到瞄准状态
在这里插入图片描述
这样制作完成后,我发现我的切换逻辑还是有些问题,就是左键点击,会直接射击,在射击时,按住鼠标右键,会拉近镜头,然后再松开,不管你是不是在射击,都会直接退出瞄准状态以及射击状态。
所以,我要思考如何解决这个问题,增加了一个变量,在射击时将其设置成true,退出时设置成false
在这里插入图片描述
然后再瞄准退出时进行判断,如果当前处于射击状态下,只恢复弹簧臂,而不是退出瞄准动画。
在这里插入图片描述
到此为止,算是真正的处理完成了瞄准和射击的状态的切换逻辑。

射击的后坐力动画添加

实现后坐力的动画,我们不能够直接播放动画去实现,这样的话,还需要制作和射击相匹配的移动以及蹲伏等相关的动画,逻辑太复杂,所以我们直接使用附加动画去实现相应的动画。
附加动画的制作,需要在动画里面设置附加设置,这个设置在之前也做过,只是用作于多方向切换。
在这里,我们使用站立的射击动画,附加到站立的默认姿势上面,附加动画,会把相同的部分剔除掉,然后播放不同的部分去实现
在这里插入图片描述
制作完成附加动画以后,需要寻找一个地方进行附加,在动画蓝图的功能状态机中,在基础状态进行附加,首先对动画进行按布尔混合,如果不是射击还是运行原来,如果是射击状态,那么就需要附加动画去附加。
我们需要添加附加动画,然后使用应用网格体空间additive动画,对默认动画影响
在这里插入图片描述
将原来的动画附加上射击动画
在这里插入图片描述
新创建一个变量,是否射击,这个在角色蓝图中进行设置,然后根据此变量是否附加
在这里插入图片描述
接着在角色蓝图中,创建一个自定义事件,用于触发射击事件
在这里插入图片描述
自定义事件触发将动画蓝图的变量设置为true
在这里插入图片描述

根据当前是否瞄准进行处理,如果已经处于瞄准状态,可以直接射击,没有处于瞄准状态,那需要先切换到瞄准状态,然后设置一个延迟0.4秒的定时器,进行触发射击。
在这里插入图片描述
停止射击时,我们需要取消射击动画,关闭相关动画。并且还要清除掉开始射击函数定时器,防止停止射击以后,还会触发定时器的问题。
在这里插入图片描述
有了这个变量,我们角色蓝图里面其实就不需要单独设置一个变量, 只需要使用动画蓝图的是否射击变量判断即可
在这里插入图片描述
现在,我们完成了角色射击动画制作和动作的切换逻辑,分为聚焦射击和默认射击,下面是射击的所有代码
在这里插入图片描述
下一篇,开始制作真实的射击效果。

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

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

相关文章

Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二)

提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二) 冯一川注:GLSL其实也是不断迭代的,比如像3.3版本中,基本数据类型浮点型只支持float型,而GLSL4.0版本开始就…

chatgpt赋能python:Python单位换算—让编程更精确的工具

Python单位换算—让编程更精确的工具 作为一名10年经验的Python工程师,我深深认识到在各种计算机领域的重要性。它可以帮助我们进行大量数据的计算和转换,其中的单位换算是其中一个重要的子领域。 单位换算对编程的重要性 无论是在科学研究还是工业生…

序贯最小二乘平差 VS 卡尔曼滤波

文章目录 Part.I IntroductionPart.II 概念比较Chap.I 序贯最小二乘平差Chap.II 卡尔曼滤波Chap.III 比较 Reference Part.I Introduction 序贯最小二乘平差和卡尔曼滤波有些相似,但是还是有一些区别: 序贯最小二乘平差用来处理静态数据,也…

层次多尺度注意力用于语义分割

层次多尺度注意力用于语义分割 HIERARCHICAL MULTI-SCALE ATTENTION FOR SEMANTIC SEGMENTATION https://arxiv.org/pdf/2005.10821.pdf 摘要 多尺度推断通常用于提高语义分割的结果。多个图像尺度通过网络传递,然后使用平均或最大池化方法将结果组合起来。在本文…

活用Excel高级筛选解决实际问题

一朋友遇到一个难题:一个电子行业文档,数据中有一项为输出电压,有固定值比如24V、48V等;也有范围值比如10V-60V或者40V-50V,数据不规则,且数量庞大。需要对数据进行分析,筛选出有效数据&#xf…

Spring Bean生命周期之(1)BeanDefinition

文章目录 1 BeanDefinition1.1 Spring Bean 读取解析配置信息1.1.1 XML 配置的处理主要使用的事例1.1.2 注解 BeanDefinition 解析示例 1.2 spring bean 注册阶段1.3 Spring BeanDefinition 合并阶段1.3.1 BeanDefinition 合并示例1.3.2 源码分析 1 BeanDefinition 在spring b…

机器学习——线性回归篇

基本概念 什么是回归预测?什么是分类预测? 模型输入变量预测结果应用回归预测实值离散一个连续值域上的任意值预测值的分布情况分类预测实值离散两个或多个分类值将输入变量分类到不同类别 思考一个问题:分类问题是否可以转变为回归问题&am…

百度商业AI技术创新大赛启动-63万元奖金!

随着生成式AI在全球范围的热议,AIGC前沿技术也在快速迭代,正如百度CEO李彦宏所说“人工智能发生了方向性改变,从辨别式AI走向生成式AI,生成式AI会带来极大的效率提升”。而这一领域的发展,将推动AI产品应用深化&#x…

两个震子如何调整发送信号时间差来调整波束

ΔΦ 2π/λdsinθ 这个式子中 d是振子的距离不变 λ是波长可以根据频率知道...所以要控制θ 就要控制两个振子的相位差 也就是控制振子a与振子b的时间差就能控制θ 30mhz的带宽与相位偏差的影响 ΔΦ 2π/λdsinθ 频率900hmz 波长300/9000.333 频率930hmz 波长300/9300…

t-SNE(t-stochastic neighourhood embedding) 数据降维及可视化

文章目录 算法原理示例一示例二 算法原理 t-SNE 的基本思想是将高维数据映射到低维空间,同时保留数据间的局部结构。具体而言,给定一个高维数据集 X { x 1 , … , x n } \mathbf{X}\{\mathbf{x}_1,\dots,\mathbf{x}_n\} X{x1​,…,xn​},其…

macm1环境下IDEA项目切换jdk版本

macm1环境下IDEA项目切换jdk版本 本文目录 macm1环境下IDEA项目切换jdk版本背景需求下载对应版本jdk配置IDEA中指定项目的JDK版本配置 Project Structure配置 Settings 可能报错同时安装JDK8和JDK17并切换 背景需求 项目基于 springboot3.0.7Nacos2.2.3seata1.6.1 由spring官…

TensorFlow2安装备忘

系统配置 Ubuntu18.04 Anaconda4.9.2 Cuda10.0Cudnn7.6.5 CPU版本 执行pip install tensorflow默认安装的是CPU版本,并且安装后会有较多import依赖问题,部分记录如下,基本都属于"No module named xxxx"。 1.找不到wrapt 通过…

【23】SCI易中期刊推荐——神经网络科学及机器人学(中科院3区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

面试官:useEffect和useLayoutEffect有什么区别?

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ Effect数据结构 顾名思义&#xff0c;React底层在函数式组件的Fiber节点设计中带入了hooks链表的概念&#xff08;memorizedState&#xff09;&#xff0…

博弈论——巴什博弈(C++)

博弈论&#xff08;C&#xff09; 前言例题&#xff1a;拍卖会题目描述输入输出格式输入格式&#xff1a;输出格式&#xff1a; 输入输出样例输入样例#1&#xff1a;输出样例#1&#xff1a; 例题的解&#xff1a;巴什博奕&#xff08;Bash Game&#xff09;&#xff1a;代码&am…

CEPH部署

//存储类型 块存储 一对一&#xff0c;只能被一个主机挂载使用&#xff0c;数据以块为单位进行存储&#xff0c;典型代表&#xff1a;硬盘 文件存储 一对多&#xff0c;能被多个主机同时挂载使用&#xff0c;数据以文件的形式存储的&#xff08;元数据和实际数据是分开存储…

【30】核心易中期刊推荐——人工智能图像处理

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

javascript基础二十三:说说 JavaScript 中内存泄漏的几种情况

一、是什么 内存泄漏&#xff08;Memory leak&#xff09;是在计算机科学中&#xff0c;由于疏忽或错误造成程序未能释放已经不再使用的内存 并非指内存在物理上的消失&#xff0c;而是应用程序分配某段内存后&#xff0c;由于设计错误&#xff0c;导致在释放该段内存之前就失…

【数学建模】期末样题(2021年真题)

一、&#xff08;10分&#xff09;某乳制品厂计划生产A、B、C三种酸奶。已知生产单位重量的A需要加工设备3小时&#xff0c;原料甲1千克&#xff0c;原料乙0.2千克&#xff1b;生产单位重量的B需要加工设备5小时&#xff0c;原料甲1千克&#xff0c;原料乙0.3千克&#xff1b;生…

若依之权限处理

若依之权限处理 若依前后端不分离版本使用的是shiro进行权限控制&#xff0c;本文主要是对shiro在若依中的使用进行分析。 RBAC权限模型 RBAC是指基于角色的访问控制。其基本思想是&#xff0c;对系统的各种权限不是直接授予具体的用户&#xff0c;而是在用户集合与权限集合…