C++和蓝图
概述
蓝图可以继承C++类,从而使得程序员可以在代码中创建新的游戏性类,而关卡设计人员可以使用蓝图来继承该类并对其进行修改。
有很多种修饰符可以改变C++类和蓝图系统间交互方式,其中某些修饰符会在本示例中突出介绍。
类设置
在类设置的第一部分中,使用C++类向导
创建一个名称为LightSwitchBoth 的类。
LightSwitchBoth类中的大部分代码设置都和 仅使用C++的LightSwitch示例
类似。尽管您可以让一个蓝图继承LightSwitchCodeOnly类,
但蓝图图表并不能访问该类中创建的组件、属性及函数。该示例将使用 UPROPERTY() 和 UFUNCTION() 修饰符,这两个修饰符使得LightSwitchBoth作为继承它的蓝图的模板。
您会发现首先参考下 仅使用C++的LightSwitch示例
是有用的,这样您可以看下如何设置头文件及源文件
来创建LightSwitchComponent、SphereComponent、DesiredBrightness属性及OnOverlap函数。
这个头文件是从 仅使用C++的LightSwitch示例
改编而来,添加了以下功能:PointLightComponent和SphereComponent是BlueprintReadOnly(仅蓝图可读的),并且将显示在 我的蓝图 选卡中的 Switch Components(切换组件) 类目中。
OnOverlap现在是一个BlueprintNativeEvent,将会显示在 我的蓝图 选卡中的 Switch Functions(切换函数) 类目中。
DesiredBrightness是BlueprintReadWrite(蓝图可读写的),将显示在 我的蓝图 选卡中的 Switch Properties(切换属性) 类目中。
DesiredBrightness现在是EditAnywhere(随处可编辑的),而不是VisibleAnywhere(随处可见的)。
UCLASS() 宏有个 Blueprintable 修饰符。在这个示例中,该修饰符不是必须的,因为LightSwitchBoth直接继承Actor,而Actor是Blueprintable(可蓝图化的),所以LightSwitchBoth会继承该修饰符。
加上 UPROPERTY() 和 UFUNCTION() 宏中的额外修饰符,LightSwitchBoth类的头文件如下所示:
LightSwitchBoth.h
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "LightSwitchBoth.generated.h"
/**
*
*/
UCLASS()
class ALightSwitchBoth : public AActor
{
GENERATED_UCLASS_BODY()
/** point light component */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Switch Components