7097人加入学习
(30人评价)
Unreal入门第一季 - 虚幻C++基础训练

制作完成于2019.8.27,基于Unreal 4.22

价格 免费

502

1.在头文件中声明一个摄像机组件:

public:

UPROPERTY(VisibleAnywhere,Category="My Pawn Components")

//class告诉编译器不要对下面的声明提示报错,后面会进行声明

class UCameraComponent* MyCamera;

2.在源文件中包含头文件:

#include "Camera/UCameraComponent.h"

3.在源文件中初始化:

MyCamera=CreateDefaultSubobject<UCameraComponent>(TEXT("MyCamera"));

MyCamera->SetupAttachment(this->GetRootComponent());

MyCamera->SetRelativeLocation(FVector(-300.0f,0.0f,300.0f));

MyCamera->SetRelativeRotation(FRotator(-45.0f,0.0f,0.0f));

4.创建蓝图类BP_MyPawn继承自定义C++类MyPawn

5.在蓝图类中添加网格体模型并赋予材质

[展开全文]

501

1.创建新的类MyPawn继承自Pawn

2.在头文件中声明一个静态网格组件成员变量:

public:

UPROPERTY(Visible,Category="My Pawn Property")

UStaticMeshComponent MyStaticMesh;

3.在源文件中包含头文件:

#include "Components/UStaticMeshComponent.h"

4.在源文件中初始化:

RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));

MyStaticMesh=CreateDefaultSubobject<UStaticMeshComponent >(TEXT("MyStaticMesh"));

MyStaticMesh->SetupAttachment(this->GetRootComponent());

[展开全文]

413

1.在世界大纲中选中Floor2,在details中collision下的collision presets下选择custom

2.可以在下面的碰撞配置表中进行相应的设置来选择对相应物体是否忽略或者启用碰撞

3.在源文件中修改代码:

FHitResult HitResult;

AddActorLocalOffset(TickLocationOffset,true,&HitResult);

UE_LOG(LogTemp,Warning,TEXT("X:%f,Y:%f,Z:%f"),HitResult.Location.X,HitResult.Location.Y,HitResult.Location.Z);

4.编译测试

[展开全文]

412

1.在不开启物理模拟的情况下也可以进行碰撞阻挡

2. 注释源文件中的添加力和力矩的代码:

//AddForce();

//AddTorque();

3.在Tick()函数中修改:

//将bSweep修改为true,扫描即将移动的路径上是否有可以发生碰撞

AddActorLocalOffset(TickLocationOffset,true);

3.编译测试

 

[展开全文]

411

1.在头文件中定义:

public:

UPROPERTY(EditInstanceOnly,Category="My Actor Propertys|Physics")

//声明一个力,用于物体移动

FVector InitForce;

UPROPERTY(EditInstanceOnly,Category="My Actor Propertys|Physics")

//声明一个力矩,用于物体旋转

FVector InitTorque;

UPROPERTY(EditInstanceOnly,Category="My Actor Propertys|Physics")

//声明bool变量,用于对物体施加力或力矩时是否忽略物体质量的影响

bool bAccelChange;

2.在源文件中初始化:

InitForce=FVector(0.0f);

InitTorque=FVector(0.0f);

bAccelChange=false;

3.在源文件中包含头文件:

//可以通过复制UStaticMesh到官方文档中进行查找

#include "Components/StaticMeshComponent.h"

3.在BeginPlay函数中添加:

//物体生成时,施加一次力和力矩

MyStaticMesh->AddForce(InitForce);

MyStaticMesh->AddTorque(InitForce);

4.修改BeginPlay函数:

//修改了bAccelChange为true,忽略物体质量的影响

MyStaticMesh->AddForce(InitForce,"NAME_None",bAccelChange);

MyStaticMesh->AddTorque(InitForce,"NAME_None",bAccelChange);

 

[展开全文]

410

1.启用物理模拟,在Details中的Physics下勾选Simulate Physics

2.取消重力,在Details中的Physics下不勾选Enable Gravity,重力取消,物体不会下落但是其物理模拟现象仍然存在,比如发生碰撞仍会移动和旋转

3.按键盘上的~调出控制台,输入show Collision,显示碰撞体

[展开全文]

409

1.在level中选中BP_MyActor,双击进入网格体编辑器,为网格体模型添加一个凸包的简单碰撞,collision菜单->auto convex collision

[展开全文]

408

1.不要将UStaticMesh * MyStaticMesh的UPROPERTY()设置为EditAnywhere,不然会有意想不到的效果

2.在FVector TickLocationOffset变量的UPROPERTY()中添加:

meta=(ClampMin=-5.0f,ClampMax=5.0f,UIMin=-5.0f,UIMax=5.0f)

[展开全文]

407

1.在头文件中声明3个变量:

public:

UPROPERTY(VisibleDefaultsOnly,Category="My Actor Propertys|Vector")

FVector WorldOrigin;

UPROPERTY(EditAnywhere,Category="My Actor Propertys|Vector")

FVector TickOffsetLocation;

UPROPERTY(EditAnywhere,Category="My Actor Propertys|Vector")

bool bMove;

2.在源文件中初始化

WorldOrigin = FVector (0.0f);

TickOffsetLocation = FVector (0.0f);

bMove = false;

3.修改Tick函数:

if(bMove ){

 AddActorRelativeOffset(TickOffsetLocation );

}

[展开全文]

406

1.在MyActor头文件中声明两个成员变量:

public:

UPROPERTY(VisibleInstanceOnly,Category="My Actor Propertys|Vector")

FVector PlacedLocation;

UPROPERTY(EditDefaultsOnly,Category="My Actor Propertys|Vector")

//声明bool变量时,变量名必须以小写b开头(UE4要求)

bool bGotoInitLocation;

2.在MyActor源文件中进行初始化

PlacedLocation=FVector(0.0f);

bGotoInitLocation=false;

3.修改BeginPlay函数:

PlacedLocation=GetActorLocation();

if(bGotoInitLocation){

SetActorLocation(InitLocation);

}

 

[展开全文]

405

1.在level中将BP_MyActor拖拽到任意位置

2.在MyActor.cpp中的BeginPlay函数下添加:

SetActorLocation(FVector(0.0f));

3.启动引擎,观察BP_MyActor的位置

4.在MyActor.h中添加一个成员变量声明:

public:

//将成员变量添加到UE的反射和垃圾回收机制中

UPROPERTY(EditInstanceOnly,Category="My Actor Propertys|Vector")

//声明一个初始位置变量

FVector InitLocation;

5.在MyActor.cpp中的构造函数中对InitLocation进行初始化:

InitLocation = FVector(0.0f);

6.修改BeginPlay函数:

SetActorLocation(InitLocation);

7.编译后观察Details中和BP_MyActor模板中,EditInstanceOnly是如何起作用的

8.修改Details中的InitLocation中的值并启动引擎测试

 

 

[展开全文]

404

1.在资源区下载model.zip素材文件

2.导入model.zip中的素材文件

3.xyz模型拖入level中,位置归零

4.BP_MyActor拖入level中,位置归零并应用iconSphere网格体模型

5.视口中导航到合适的位置,世界大纲中选中PlayerStart,右键选择对齐物体到视口(snap object to viewport)

 

[展开全文]

403

1.在自定义C++类MyActor中的MyActor.h头文件中添加组件声明

pulic:

//将成员变量添加到UE反射与垃圾回收机制中去

UPROPERTY(VisibleAnywhere,Category="My Actor Components")

//声明了一个UStaticMeshComponent类型的指针

UStaticMeshComponent * MyStaticMesh ;

2.在MyActor.cpp源文件的构造函数中对UStaticMeshComponent * MyStaticMesh进行初始化: 

MyStaticMesh=CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyStaticMesh"));

[展开全文]

402

1.BP_MyActor蓝图类中会默认一个DefaultSceneRoot根组件用于标识transform

2.在BP_MyActor蓝图类中通过Add Component添加一个StaticMesh组件,并应用一个Cube BasicShape

3.拖拽3个BP_MyActor到Level中生成3个实例,并赋予3个不同材质

4.更改BP_MyActor的StaticMesh组件形状Sphere BasicShape

5.更改BP_MyActor的StaticMesh组件材质

[展开全文]

401

1.创建新的自定义C++类MyActor继承于Actor

Tips:

派生自Actor的类带有A前缀,如AController

派生自Object的类带有U前缀,如UComponent

Enums的前缀是E,如EFortificationType

Interface的前缀通常是I,如IAbilitySystemInterface

Template的前缀是T,如TArray

派生自SWidget的类(Slate UI)带有前缀S,如SButton

其他类的前缀为字母F,如FVector

2.创建新的蓝图类BP_MyActor继承于MyActor

 

 

 

[展开全文]

//在Editor中限制最大值,最小时

UPROPERTY(EditDefaultsOnly, Category = "My Actor Propertys | Vector", meta = (ClampMin = -5.0f, ClampMax = 5.0f, UIMin = -5.0f, UIMax = 5.0f)

 

UCLASS()

class STATICMESHSAMPLE_API AMyActor : public AActor

{

GENERATED_BODY()

 

public:

// Sets default values for this actor's properties

AMyActor();

 

    UPROPERTY(VisibleAnyWhere, Category = "My Actor Components")

    UStaticMeshComponent *StaticMesh;

    

    //大多数属性都有 Edit 和 Visible, 但是 VisiableAnyWhere 不推荐使用 Edit 属性

    UPROPERTY(EditInstanceOnly, Category = "My Actor Propertys | Vector")

    FVector InitLocation;

    

    UPROPERTY(VisibleInstanceOnly, Category = "My Actor Propertys | Vector")

    FVector PacedLocation;

    

    UPROPERTY(EditDefaultsOnly, Category = "My Actor Propertys | Vector")

    bool bGotoInitLocation;

    

    UPROPERTY(VisibleDefaultsOnly, Category = "My Actor Propertys | Vector")

    FVector WorldOrigin;

 

    UPROPERTY(EditAnywhere, Category = "My Actor Propertys | Vector", meta = (ClampMin = -5.0f, ClampMax = 5.0f, UIMin = -5.0f, UIMax = 5.0f))

    FVector TickLocationOffset;

 

    UPROPERTY(EditAnywhere, Category = "My Actor Propertys | Vector")

    bool ShouldMove;

protected:

// Called when the game starts or when spawned

virtual void BeginPlay() override;

 

public:

// Called every frame

virtual void Tick(float DeltaTime) override;

 

};

[展开全文]

选中物体后

快捷键 W 移动

E旋转

R缩放

[展开全文]

AppData\Local\UnrealEngine(材质缓存,对应版本号)

 

[展开全文]

Content-Starter Content

Show in Explorer打开工程目录

uproject:

open跳过启动器

launch game通过命令行运行游戏

Switch 切换引擎版本(向下兼容)

[展开全文]

1. cast 投射/转换 可以将子类3的父类指针投射为子类一的指针,然后调用

 

 

重要!

[展开全文]

授课教师

SiKi学院讲师

课程特色

视频(49)
下载资料(1)