虚幻4 ue4 学习笔记pwan篇 1.1c spherecomponent 结合 staticmeshcomponent

时间:2020-12-16 20:34:54
 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(视觉效果)是后面实现物理碰撞的关键