🔫CoopGame02-武器1

type
status
date
slug
summary
tags
category
icon
password

导入资产

  1. 下载源文件,密码:zmingu
  1. 导入CoopGame\Content\Weapons文件夹到项目Content目录

创建武器

创建武器类

  1. 创建武器C++类SWeapon,继承Actor的。
    1. 创建继承SWeapon武器类的蓝图类BP_SWeapon,并选择设置武器的骨骼网格体SK_Rifle.
      1. notion image

    为角色生成武器

    1. 在角色骨骼的hand_r右键添加名为WeaponSocket武器的骨骼插槽。
      1. notion image
    1. SCharacter编写代码将武器生成到玩家手上的名为WeaponSocket的插槽上。
      1. ***在角色蓝图类中设置要生成的武器类StarterWeaponClass的类默认值为BP_SWeapon

      调整武器位置

      1. 在人物骨骼的武器骨骼插槽WeaponSocket右键添加预览资产SK_Rifle,在右侧选择预览动画选Idle_Rifle_Hip
        1. notion image
      1. 调整插槽位置使武器位置正确。
        1. notion image

      武器开火

      1. 在武器类SWeapon中编写开火函数
        1. 在角色蓝图BP_SCharacter使用鼠标左键事件调用武器的开火函数,此时开火可见从玩家身上摄像机发出的射线。(右键搜索CurrentWeapon变量,从该变量调用Fire()函数)
          1. notion image
            notion image

        使开火产生伤害

        1. 武器类中添加伤害类型变量
          1. 伤害类型介绍:
            1. notion image
        1. 这里调一下角色身上的弹簧臂的位置,让待会更好观察并测试代码结果.
          1. notion image
        1. 在角色蓝图类BP_SCharacter,添加事件点状伤害并绘制调试球体,将网格体碰撞打开,
          1. 在场景中拖入BP_SCharacter测试射击结果。
          2. notion image
            notion image

        开火特效

        枪口特效和击中特效

        1. 导入武器特效资产,目录WeaponEffects,并编写SWeapon武器类。
          1. BP_SWeapon蓝图类设置特效的默认值如下,并测试。
            1. notion image
          1. 攻击地板,可以看到已经有了枪口特效和击中特效,其中我们会发现奇怪的问题,射线检测是从角色上发射出来的,这明显是不对,需要修改成从摄像机(也就是我们作为玩家看的方向)发射,在后面编写弹道特效的同时会进行修改.
            1. notion image

          弹道特效

          1. 先设置弹道特效粒子P_SmokeTrail的参数名为Target(光束粒子发射器)
            1. notion image
          1. 添加弹道特效
            1. 为武器BP_SWeapon蓝图类设置上弹道特效默认值.
              1. notion image
            1. 现在来改变一下射线发射的初始位置.
              1. 可以看到我们调用的GetActorEyesViewPoint()获取的位置是在角色上方加上BaseEyeHeight的值的位置,我们要修改成玩家摄像机位置.
                1. notion image
                  notion image
                  notion image
              2. 在角色类SCharacter中重写GetPawnViewLocation()函数
              1. 注释掉之前的调试射线

                武器准星

                1. 新建UI目录,新建控件蓝图,命名WBP_Crosshair.
                1. 拖入image图片,锚点设置为中心,其他设置如下.
                  1. notion image
                1. 在角色蓝图BP_SCharacter中的BeginPlayer事件编写逻辑,将控件添加到视口
                  1. notion image

                运行效果

                notion image
                 

                挑战:榴弹发射器

                1. 创建继承SWeapon的C++类SProjectileWeapon,重写Fire()函数
                1. SWeapon的Fire()函数修改为虚函数.
                  1. SProjectileWeapon类中重写Fire()函数,声明子弹类.
                    1. 创建蓝图类BP_GrenadeLauncher,继承SProjectileWeapon类,设置该蓝图类的网格体为Launcher
                    1. 重命名Launcher骨骼网格体的骨骼Launcher_Skeleton中的插槽名MuzzleFlashSocket改为MuzzleSocket
                    1. 创建子弹类蓝图BP_GrenadeProjectile继承Actor类,并添加发射物移动组件ProjectileMovement,设置初始和最大速度为2000,勾选应反弹
                      1. 添加球体网格,并作为根组件,缩放为0.25,勾选模拟物理
                      2. 在BeginPlay事件中编写特效和伤害代码
                        1. notion image
                    1. BP_GrenadeLauncher榴弹发射器类中中设置发射物类为BP_GrenadeProjectile
                      1. notion image
                    1. BP_SCharacter角色类中的类默认值中设置要生成的武器为榴弹发射器类BP_GrenadeLauncher
                      1. notion image
                    1. 测试结果
                      1. notion image
                    Prev
                    CoopGame01-创建玩家
                    Next
                    CoopGame03-武器2
                    Loading...