一.相关蓝图的练习,在我之前的文章中射击子弹案例-CSDN博客
本篇使用C++实现
1.创建C++类 MyBullet,在MyBullet.h中包含相关头文件
- #include "CoreMinimal.h"
- #include "GameFramework/Actor.h"
- #include "Components/StaticMeshComponent.h" //模型组件
- //#include "Components/CapsuleComponent.h" //球形碰撞组件的头文件
- #include "GameFramework/ProjectileMovementComponent.h" //射击组件
- #include
//球形碰撞组件的头文件 - #include "MyBullet.generated.h"
2.声明属性变量,子弹模型,子弹碰撞体,子弹发射器
- public:
- UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category = "MyComponent")
- UStaticMeshComponent* BulletMesh; //static 组件
- UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category = "MyComponent")
- USphereComponent* MySphere; //碰撞组件
- UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category = "MyComponent")
- UProjectileMovementComponent* FireGunProjectile; //
3.将组件实例化
- BulletMesh = CreateDefaultSubobject
(TEXT("BulletComponent")); //实例化StaticMesh组件 - //RootComponent =
- FireGunProjectile = CreateDefaultSubobject
(TEXT("FireGunProjectileComponent")); //实例化ProjectileMovement组件 - MySphere = CreateDefaultSubobject
(TEXT("SphereCollision")); //
4.通过寻找静态模型,设置静态模型的实例。设置根组件,设置父子级,只要Projectile在根组件后面就能,让物体跟随,就有发射根组件的效果。
再设置参数,调整效果。发射的初始速度,最大速度,重力等。
- MySphere = CreateDefaultSubobject
(TEXT("SphereCollision")); // - static ConstructorHelpers::FObjectFinder
TmpStaticMesh(TEXT("/Script/Engine.StaticMesh'/Engine/BasicShapes/Sphere.Sphere'")); //静态加载资源 重要 - BulletMesh->SetStaticMesh(TmpStaticMesh.Object); //.Object重要
-
- RootComponent = BulletMesh;
-
- //FireGunProjectile->setupattack
- MySphere->SetupAttachment(RootComponent);
- MySphere->InitSphereRadius(67);
- FireGunProjectile->SetUpdatedComponent(RootComponent);//
- FireGunProjectile->InitialSpeed = 1200.0f;//初始速度
- FireGunProjectile->MaxSpeed = 24000.0f; //最大速度
- FireGunProjectile->bRotationFollowsVelocity = false; //旋转跟随重力
- FireGunProjectile->bIsHomingProjectile = true; //跟随组件
- FireGunProjectile->ProjectileGravityScale = 0.02; //设置重力
5.生成蓝图类放到场景中,这样就能实现单发的子弹效果