ue4总结五

1,调用蹲下动作时候枪拿偏了怎么办?


在状态机中该动画里调整该骨骼的位置


这样就调好了


2,自己在调用play Animation时之后动作就出不来了,但是不用play Animation使用状态机就播放流畅。

比如我在行走时加入换弹动作,发现行走就不播了腿是直的,放到状态机中才能流畅播放,两个动作如果同时的话会卡住一个的


3,动画偏移:

右键创建动画---->动画偏移,选择骨架。

要实现这样必须用动画偏移


在x,y轴分别选择鼠标移动的范围,additive settings是在站立的基础上添加偏移动画


在动画蓝图中设置两个变量




4,事件调度器:

作用:创建一个事件调度器,输入值为血量,在playcharacter中将血量传给事件调度器,在PlayerWidget中通过bind event(绑定事件)自定义一个事件拿到血量值,调用progress bar显示。

步骤一:创建事件调度器


步骤二:在playerCharacter中将血量值传到事件调度器中


步骤三:在GamePlayerWidget的图表里面,拿到事件调度器,自定义事件拿到血量,传给progress bar来显示




5,对于人物躲掩体的制作流程:

创建staticmesh为掩体,下面放了2个boxCollider,每个boxCollider下面放了1个Arrow箭头指向掩体内侧,可以看到一侧有三个方块,中间方块是boxCover1,两侧方块为EndCover1Left和EndCoverRight

           

创建一个接口蓝图CoverInterface,里面写一个函数IsCoverAvaliable,输入值为一个bool值isCoverAvaliable(是否有掩体)和一个rotation名为CoverRotation(躲掩体的箭头方向)

在掩体蓝图中将是否接触到碰撞体传给接口,同理接触到两侧方块为EndCover1Left和EndCoverRight的EndoverLap事件触发End of Cover事件


在PlayerCharacter中绑定该接口,调用该接口事件


对于蹲下动作的逻辑是这样的,在playerController按下蹲下键就触发Take Cover事件,在PlayerCharacter中的Take cover中先判断是否正在蹲下isTakingCover的值,如果为真说明正在蹲下再触发蹲下按键就起来,把is TakingCover设为false。如果isTakingCover为假,说明当前没有蹲下,按了蹲下键,判断是否接触到蹲下的碰撞体Cover Avaliable为真还是假,如果为真说明能蹲下,把is TakingCover为true,否则为false


在状态机中起身动作结束触发事件


点击触发new notify名为StopTakingCover,在动画蓝图中触发该事件


bug:人物蹲下可以旋转,解决办法:在playercharacter中设置不让controller绕z轴旋转

  

6,人物要跑动也能换枪需要分层骨骼混合动画,做法


将跑步放到基础pose上,换弹动作放到Blend Poses0混合动作上,在属性中添加骨骼,这里指定的骨骼spine_01为上半身应用到跑步动作上

就可以实现跑动时换弹了


7,状态机中让另一个状态动画播放完自动跳转回当前状态就用time Remaining,播放动画还剩百分之40时间就跳转回来


8,在敌人躲掩体射击的时候还能朝向自己开枪做法:


在敌人动画蓝图中



拿到pitch和yaw值,在射击动画时加入偏移动画即可。

9,在函数中不能调用delay,只能在事件图表中调用。

10,为什么将敌人拖动到游戏中可以巡逻但是游戏spawn一个就不能动?

在敌人饿character中改成这样,spawn也就能动了


11,人物进入坦克如何从人物切换成坦克?

将人物和枪visibility和collision为false,然后得到人物的controller把inPawn连成坦克即可

当然,也可以在后面把人物绑到坦克上


12,对于只是相交不碰撞的做法,只是no Physics Collision但是触发overLap效果


13,UI中progress bar的percent最大为1.0不是100

14,对于UI中事件调度器的绑定事件,如果坦克在游戏一开始没有生成而是快结束才生成,那么绑定事件就不能再UI中因为那样一开始拿不到坦克。

做法:在坦克中调用事件调度器,且绑定它,然后拿到当前的UI,调用触发界面的自定义事件


15,在动画状态机中,如何预览每个状态的跳转动画效果?

在状态机中动画编辑预览器中,在编辑预览中勾选不同的值会预览到进入不同的跳转条件下的状态机的不同动作

如果角色不为空则...逻辑如下


16,在调试运行的时候按F9如果是红色的,说明能运行到这里


如果是黄色的说明根本没有走到这条语句


17,如果游戏里面报错了还要强制运行,有时候会不走一些写过的语句,必须把错弄掉才能正常运行


18,在HUD widget中要把界面的变量在属性中勾上才能在图表中调用变量


19,人物的死亡模拟,


在enemyCharacter中将人物mesh的碰撞改成query and physics,代码这样写

在后面再接一个add impulse at Location当打人物的手或头触发不同的死亡动作,bone name是敌人受到伤害的骨头。在take Damage接口中传入,


impulse是个向量,在子弹中将trace start和end取得向量乘以一个很大的数。传给take damage接口传给impulse


20,开关门,开门时lerp函数计算开门的左门的移动起点和终点插值位置,用时间轴来当alpha,

21,对于子弹显示,两种枪都继承一个基类,显示的时候在父类调用事件调度器刷新子弹,遇到的bug是第一把枪的子弹数可以显示,一旦换枪后第二把枪的子弹数就刷新不了

解决方法:在gamePlayWidget找到子弹的属性,找到text,绑定函数

直接拿到枪基类的子弹数显示,则第二把枪的子弹也可以正常显示了


猜你喜欢

转载自blog.csdn.net/zhangxiaofan666/article/details/79209992