本篇文章是我学习UE4的笔记
学习地址如下:
http://www.sikiedu.com/my/course/518
参考地址如下:
因本人才疏学浅,如有错误之处,还请见谅
文章目录
前提
组件的定义:是可以添加到Actor上的一项功能,组件无法独立存在,将其添加到Actor后,该Actor便可以访问并使用该组件所提供的功能.
例如:聚光灯组件(Spot Light Component)允许你的Actor像聚光灯一样发光,旋转移动组件(Rotating Movement Component)能使你的Actor四处旋转,音频组件(Audio Component)将使你的Actor能够播放声音
组件时继承与Uobject的
组件一定要一个根组件:一定可以为这个进行一个transform的标识,和设置一个白色的小球(实际是没有颜色的.)
开始操作
在上一篇UE4的学习Actor的文章后,我们接着那个组件,建良成一个static Mesh 然后
在static Mesh上添加了一个cube属性
选择跟组件只需有上下拉动就行
整个Actor的位置都是以跟组件为中心的.
那要如何在C++中实现相同的效果呢?
C++创建静态网格组件
还是找个原来的蓝图类,然后点开.
在VS里面,写代码:
MyActor.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"));
}
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AMyActor::Tick(float DeltaTime)
{
//通过Super调用了父类里面的方法
Super::Tick(DeltaTime);
}
MyActor.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就是刚刚设置的那个组件,我们这里设置了一个这个组件的指针.
protected:
//开始的重写函数
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
//每一帧调用的函数
virtual void Tick(float DeltaTime) override;
};
然后再回到那个Actor.创建一个蓝图类,就会发现.
就是这样的.已经被我们加了一个组件.通过C++代码.
如果这篇文章对你有张帮助的话,可以用你高贵的小手给我点一个免费的赞吗
相信我,你也能变成光.
如果你有任何建议,或者是发现了我的错误,欢迎评论留言指出.