
开发场景:
- 玩家(C++开发的)
- 武器(C++)
- 射线检测函数
蓝图:
C++:
效果:
制作流程:
- 添加开火按键映射:
- 新建一个继承ACharacter的C++:
用蓝图继承刚刚新建的C++
然后设置好游戏模式
我 这是是 用了一个枚举,其实你直接调用这个方法就行了,不需要加switch,直接FireWeaponPrimary();
这里只看服务端的
这是一个玩家摄像头
这是玩家武器
按键后上面的函数调用会到这里来,注意看函数名字
这个是服务器的方法实现在这里:
然后我们只看射线检测:
- CameraLocation:这个是按下键后的第一时间的摄像机位置
- EndLocation:这个是射线的尾,计算方式:摄像头的向前向量 * 一个距离 + 摄像头的位置
这就是射线所发出的线的位置,两点一线 - ETraceTypeQuery::TraceTypeQuery1 : 就是一个碰撞通道
- false: 碰撞的检测方式
- IgnoreArray :一个碰撞的东西添加进去之后,就会被忽略 ,就是这里面的东西不参加射线检测的意思
- EDrawDebugTrace::Persistent :这个就是Debug的射线 在游戏中画出来,有4个类型(只介绍使用的这个),一直保持,就是开q之后出来的射线检测不会消失
- HitResult :这个东西就是击中的返回集,比如说击中玩家,打印玩家的名字
- true :这个是是否要忽略自己(和前面那个集合添加的效果一样,这个为true前面那个就 可以不用添加this了)
- FLinearColor::Red :射线颜色
- FLinearColor::Green: 射线击中后变成颜色
- 3.f :因为我们Debug选的是持久,使用这个3.f设置在这里没有影响(如果想要有影响可以把前面的持久改了)
- bool HitSuccess:这个是返回值,当为true的时候就是有目标被击中
记住设置碰撞 Visibility 为阻挡就可以被射线检测到
本项目是跟B站的一个UP主做的“TurBo强”
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)