UE4使用一些简单的控制符.实现移动组件的效果

本篇文章是我学习UE4的笔记

学习地址如下:

http://www.sikiedu.com/my/course/518

参考地址如下:

官方文档

因本人才疏学浅,如有错误之处,还请见谅

文章目录
第一步第二步一些别的限定词的作用代码如下:.h.cpp
新的.h新的.cpp代码如下:

第一步

我们还是要打开代码

修改我们设置的蓝图类的代码

.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class SIKI_PROJECT_API AMyActor : public AActor
{
GENERATED_BODY()

public:
// Sets default values for this actor's properties
AMyActor();

//Visble就是设置可见的.
UPROPERTY(VisibleAnywhere,Category="My Actor Components")
UStaticMeshComponent* StaticMesh;
//US就是刚刚设置的那个组件,我们这里设置了一个这个组件的指针.
//Instance就是实例的意思,Only就是只允许.就是只允许在实例上
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector")
FVector InitLocation;

protected:
//开始的重写函数
// Called when the game starts or when spawned
virtual void BeginPlay() override;

public:
// Called every frame
//每一帧调用的函数
virtual void Tick(float DeltaTime) override;

};

.cpp

// Fill out your copyright notice in the Description page of Project Settings.

#include "MyActor.h"

// Sets default values
AMyActor::AMyActor()
{
//Tick是不是每帧都调用
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
//创建了一个对象来调用我们设置的指针.
//Create的那个函数是一个模板函数和vector差不多
StaticMesh
= CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyStaticMesh"));
InitLocation = FVector(0.0f);
}

// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
//Fvector就是一个空间的向量.如果你想仔细查看的话,就按下F12就OK了
///0.0f就是吧这个0.0分别复制给x,y,z
// 这样的话,不管开始的地方,在哪里.开始游戏之后,都会回到0.0f
SetActorLocation(InitLocation);
}

// Called every frame
void AMyActor::Tick(float DeltaTime)
{
//通过Super调用了父类里面的方法
Super::Tick(DeltaTime);

}

第二步

UE4使用一些简单的控制符.实现移动组件的效果

我们找到蓝图列创建的实例.

实例上,是有我们创建的分类的属性的.

但是我们打开蓝图类就没有.

因为我们设置的关键字就只在实例上生效.

一些别的限定词的作用

EditDefaultsOnly 就是只能在编辑页面,就是材质的编辑页面里面.设置.实例不行

VisibleInstanceOnly 只能设置可视化

代码如下:
.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class SIKI_PROJECT_API AMyActor : public AActor
{
GENERATED_BODY()

public:
// Sets default values for this actor's properties
AMyActor();

//Visble就是设置可见的.
UPROPERTY(VisibleAnywhere,Category="My Actor Components")
UStaticMeshComponent* StaticMesh;
//US就是刚刚设置的那个组件,我们这里设置了一个这个组件的指针.
//Instance就是实例的意思,Only就是只允许.就是只允许在实例上
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector")
FVector InitLocation;

UPROPERTY(VisibleInstanceOnly, Category = "My Actor Properties | Vector")
FVector PlacedLocation; //就是一个放置的地方

UPROPERTY(EditDefaultsOnly,Category="My Actor Properties|Vector ")
bool bGotoInitLocation; //是否要去我们设置的位置

protected:
//开始的重写函数
// Called when the game starts or when spawned
virtual void BeginPlay() override;

public:
// Called every frame
//每一帧调用的函数
virtual void Tick(float DeltaTime) override;

};

.cpp

// Fill out your copyright notice in the Description page of Project Settings.

#include "MyActor.h"

// Sets default values
AMyActor::AMyActor()
{
//Tick是不是每帧都调用
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
//创建了一个对象来调用我们设置的指针.
//Create的那个函数是一个模板函数和vector差不多
StaticMesh
= CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyStaticMesh"));
InitLocation = FVector(0.0f);
PlacedLocation = FVector(0.0f);
bGotoInitLocation = false; //默认让这个小球不改变位置
}

// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
//Fvector就是一个空间的向量.如果你想仔细查看的话,就按下F12就OK了
///0.0f就是吧这个0.0分别复制给x,y,z
// 这样的话,不管开始的地方,在哪里.开始游戏之后,都会回到0.0f
//获取到PlaceLocation里面.就是保存下一开始的值.
PlacedLocation = GetActorLocation();
if (bGotoInitLocation)
{
//只有当bGotoInitLocation为真的时候,我们才改变InitLocation
//的位置.
SetActorLocation(InitLocation);
}
}

// Called every frame
void AMyActor::Tick(float DeltaTime)
{
//通过Super调用了父类里面的方法
Super::Tick(DeltaTime);

}

然后再VS里面的设置

UE4使用一些简单的控制符.实现移动组件的效果

这个就是那个逻辑的语句.

然后我们在加几个控制符.

今天学的比昨天明白了一点.简单的总结一下控制符.

VisibleAnywhere 字面意思,就是不管在实例还是在原型中都可以看到这个属性
EditInstanceOnly 字面意思, Instance 实例 Edit编辑.
就是只能在实例中编辑.
VisibleInstanceOnly 只能在实例中可以看到这个属性
VisibleDefaultsOnly 只能在原型中看到这个属性
EditAnywhere 最常用的属性,就是不管在实例还是在原型中,都可以修改这个属性.

//Visble就是设置可见的.
UPROPERTY(VisibleAnywhere,Category="My Actor Components")
UStaticMeshComponent* StaticMesh;
//US就是刚刚设置的那个组件,我们这里设置了一个这个组件的指针.
//Instance就是实例的意思,Only就是只允许.就是只允许在实例上
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector")
FVector InitLocation;

UPROPERTY(VisibleInstanceOnly, Category = "My Actor Properties | Vector")
FVector PlacedLocation; //就是一个放置的地方

UPROPERTY(EditDefaultsOnly,Category="My Actor Properties|Vector ")
bool bGotoInitLocation; //是否要去我们设置的位置

UPROPERTY(VisibleDefaultsOnly, Category = "My Actor Properties|Vector ")
FVector WorldOrigin; //就是用来做参考的世界原点坐标系

//EditAnywhere 就是不管在实例还是原型都可以修改
UPROPERTY(EditAnywhere, Category = "My Actor Properties|Vector ")
FVector TickLocationOffset;

UPROPERTY(EditAnywhere, Category = "My Actor Properties|Vector ")
bool bShouldMove;

然后我们设置不移动.设置一个TickLoationOffset 的值.

在点击开始,组件就会自己动起来乐.

完整的代码如下:

新的.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class SIKI_PROJECT_API AMyActor : public AActor
{
GENERATED_BODY()

public:
// Sets default values for this actor's properties
AMyActor();

//Visble就是设置可见的.
UPROPERTY(VisibleAnywhere,Category="My Actor Components")
UStaticMeshComponent* StaticMesh;
//US就是刚刚设置的那个组件,我们这里设置了一个这个组件的指针.
//Instance就是实例的意思,Only就是只允许.就是只允许在实例上
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector")
FVector InitLocation;

UPROPERTY(VisibleInstanceOnly, Category = "My Actor Properties | Vector")
FVector PlacedLocation; //就是一个放置的地方

UPROPERTY(EditDefaultsOnly,Category="My Actor Properties|Vector ")
bool bGotoInitLocation; //是否要去我们设置的位置

UPROPERTY(VisibleDefaultsOnly, Category = "My Actor Properties|Vector ")
FVector WorldOrigin; //就是用来做参考的世界原点坐标系

//EditAnywhere 就是不管在实例还是原型都可以修改
UPROPERTY(EditAnywhere, Category = "My Actor Properties|Vector ")
FVector TickLocationOffset;

UPROPERTY(EditAnywhere, Category = "My Actor Properties|Vector ")
bool bShouldMove;
protected:
//开始的重写函数
// Called when the game starts or when spawned
virtual void BeginPlay() override;

public:
// Called every frame
//每一帧调用的函数
virtual void Tick(float DeltaTime) override;

};

新的.cpp

// Fill out your copyright notice in the Description page of Project Settings.

#include "MyActor.h"

// Sets default values
AMyActor::AMyActor()
{
//Tick是不是每帧都调用
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
//创建了一个对象来调用我们设置的指针.
//Create的那个函数是一个模板函数和vector差不多
StaticMesh
= CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyStaticMesh"));
InitLocation = FVector(0.0f);
PlacedLocation = FVector(0.0f);
bGotoInitLocation = false; //默认让这个小球不改变位置
WorldOrigin = FVector(0.0f);
TickLocationOffset = FVector(0.0f);
bShouldMove = false;
}

// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
//Fvector就是一个空间的向量.如果你想仔细查看的话,就按下F12就OK了
///0.0f就是吧这个0.0分别复制给x,y,z
// 这样的话,不管开始的地方,在哪里.开始游戏之后,都会回到0.0f
//获取到PlaceLocation里面.就是保存下一开始的值.
PlacedLocation = GetActorLocation();
if (bGotoInitLocation)
{
//只有当bGotoInitLocation为真的时候,我们才改变InitLocation
//的位置.
SetActorLocation(InitLocation);
}
}

// Called every frame
void AMyActor::Tick(float DeltaTime)
{
//通过Super调用了父类里面的方法
Super::Tick(DeltaTime);
if (bShouldMove) {
AddActorLocalOffset(TickLocationOffset);
}
}

还有一点.就是指针是不可以乱编辑的.

这点懂的都懂(好吧,我并不懂)-只是直到指针不可以乱编辑

然后就是.我们还可以手动的给TickLocationOffset限制范围.

代码如下:

//EditAnywhere 就是不管在实例还是原型都可以修改
//ClampMax就是手动输入最大值的意思.ClampMax就是手动输入最小值的意思.
//UI MAx和Min 就是通过UI改变的最大最小值.
UPROPERTY(EditAnywhere, Category = "My Actor Properties|Vector ",
meta=(ClampMin=-5.0f,ClampMax=5.0f,UIMin=-5.0f,UIMax=5.0f))
FVector TickLocationOffset;

UE4使用一些简单的控制符.实现移动组件的效果

如果这篇文章对你有张帮助的话,可以用你高贵的小手给我点一个免费的赞吗

相信我,你也能变成光.

UE4使用一些简单的控制符.实现移动组件的效果

如果你有任何建议,或者是发现了我的错误,欢迎评论留言指出.

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

UE4使用一些简单的控制符.实现移动组件的效果

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » UE4使用一些简单的控制符.实现移动组件的效果
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏