1 // Fill out your copyright notice in the Description page of Project Settings. 2 3 #include "MyPawn.h" 4 #include "Runtime/Engine/Classes/Components/BoxComponent.h"// UBoxComponent 引用 5 #include "Runtime/Engine/Classes/Components/SphereComponent.h"// USphereComponent 引用 6 #include "Runtime/CoreUObject/Public/UObject/ConstructorHelpers.h" // ConstructorHelpers 引用 7 // Sets default values 8 AMyPawn::AMyPawn() 9 { 10 // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. 11 PrimaryActorTick.bCanEverTick = true; 12 13 //CreateDefaultSubobject ue4所有组件都是通过这个函数创建的 14 //<USphereComponent>与<UBoxComponent> 告诉CreateDefaultSubobject要返回对象的类型是什么 15 //虚幻4所有对象都有CreateDefaultSubobject方法 16 17 //UBoxComponent *BoxComponent = CreateDefaultSubobject<UBoxComponent>(TEXT("RootComponent2"));//创建一个正方体组件 RootCompont 是蓝图里面显示的名称 名称随意 18 USphereComponent* SphereComponent = this->CreateDefaultSubobject<USphereComponent>(TEXT("RootComponent"));//创建一个圆球组件 RootCompont 是蓝图里面显示的名称 名称随意 19 /*this这里可以省略*/ 20 RootComponent = SphereComponent;//将物体组件添加到 根组件 也可使用正方形 物体组件z轴与地平线一致 21 SphereComponent->InitSphereRadius(40.f);// 实际物理 碰撞半径 22 23 UStaticMeshComponent* SphereVisual = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("VisualRepresentation"));//无视觉效果 24 SphereVisual->SetupAttachment(RootComponent);//添加附件到RootComponent 无视觉效果 25 26 //UStaticMeshComponent* SphereVisual2 = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("VisualRepresentation"));//这里创建静态网格组件会报错 一个pwan只能创建一个静态网格组件 27 28 //这里可以用过在ue4 赋值引用得到地址 不是物理路径 29 //FObjectFinder是ConstructorHelpers的内部类 30 static ConstructorHelpers::FObjectFinder<UStaticMesh> SphereVisualAssetWzh(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));//打开素材库 31 32 if (SphereVisualAssetWzh.Succeeded())//判断素材库是否打开 33 { 34 SphereVisual->SetStaticMesh(SphereVisualAssetWzh.Object);//设置素材 这里有视觉效果 35 //SetRelativeLocation方法 传入一个向量类型的参数 ,SphereComponent x y与根组件位置相同但是 SphereComponent的z轴大小等于根组件的 z轴坐标+半径 所以需要减掉根组件半径 只能改变静态网格组件相对于根组件的位置 不能改变根组件位置 36 SphereVisual->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f-40.f));//设置位置0,0,0为初始位置 初始位置为放置位置 z轴与地平线一致 在根组件没有赋予形状时 37 SphereVisual->SetWorldScale3D(FVector(0.8f));//SetWorldScale3D 设置组件在世界空间中的变换倍数。 倍数以原来模型大小为基准 38 } 39 40 } 41 42 // Called when the game starts or when spawned 43 void AMyPawn::BeginPlay() 44 { 45 Super::BeginPlay(); 46 47 } 48 49 // Called every frame 50 void AMyPawn::Tick(float DeltaTime) 51 { 52 Super::Tick(DeltaTime); 53 } 54 55 // Called to bind functionality to input 56 void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) 57 { 58 Super::SetupPlayerInputComponent(PlayerInputComponent); 59 60 }
spherecomponent(拥有物理碰撞) 结合 staticmeshcomponent(视觉效果)是后面实现物理碰撞的关键