C++写了一个类MyChar,并派生了一个蓝图子类BP_MyCharacter。

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "MyCharacter.generated.h"using namespace UP;
using namespace UF;UCLASS()
class CPPTEST_API AMyCharacter : public ACharacter
{GENERATED_BODY()public:// Sets default values for this character's propertiesAMyCharacter();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public: // Called every framevirtual void Tick(float DeltaTime) override;// Called to bind functionality to inputvirtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;UPROPERTY(VisibleAnywhere)class UCameraComponent* fpsCamera;};// Fill out your copyright notice in the Description page of Project Settings.#include "MyCharacter.h"
#include <Camera/CameraComponent.h>// Sets default values
AMyCharacter::AMyCharacter()
{// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;fpsCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FpsCamera"));//fpsCamera->SetupAttachment(RootComponent);//fpsCamera->SetRelativeLocation(FVector(0, 110, 0));}// Called when the game starts or when spawned
void AMyCharacter::BeginPlay()
{Super::BeginPlay();auto info = FString::Printf(TEXT("-11mychar,inst:%d"), this);GEngine->AddOnScreenDebugMessage(-1, 21, FColor::Red, info);}// Called every frame
void AMyCharacter::Tick(float DeltaTime)
{Super::Tick(DeltaTime);}// Called to bind functionality to input
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{Super::SetupPlayerInputComponent(PlayerInputComponent);}

实验一,做如下操作:

1,修改蓝图中的fpsCamra的位置,任意,如世界空间位置(0,0,200)

2,注释掉构造函数中的fpsCamera的创建代码,并编译。这时fpsCamera在蓝图中消失了。

AMyCharacter::AMyCharacter()
{// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;//fpsCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FpsCamera"));//fpsCamera->SetupAttachment(RootComponent);//fpsCamera->SetRelativeLocation(FVector(0, 110, 0));}

3,恢复构造函数中的fpsCamera的创建代码,并编译,这时fpsCamera在蓝图中又出现了。但位置被重置为世界空间的(0,0,0)。原因是2,3两步相当于先删除了相机组件再新加了一个相机组件,所有数据都是默认的了。但如果步2不删除相机组件,而仅修改相机位置,编译后发现蓝图中相机位置是没有任何改变的,原因是构造函数执行时先执行父类构造再执行蓝图子类构造,这样C++构造函数中的位置修被蓝图中的位置修改覆盖掉了。

这时候资源浏览器中BP_MyCharacter并没有带星号,也就是说UE编译器没有监视到蓝图的数据发生了改变。

AMyCharacter::AMyCharacter()
{// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;fpsCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FpsCamera"));//fpsCamera->SetupAttachment(RootComponent);//fpsCamera->SetRelativeLocation(FVector(0, 110, 0));}

4,关闭UE4,不主动保存蓝图。重新打开UE4,打开BP_MyCharacter,发现fpsCamera的位置是世界空间的(0,0,200)。而如果关闭UE4之前,主动保存一下蓝图,再打开UE4,打开蓝图,发现fpsCamera的位置是世界空间的(0,0,0)

总结,此问题的关键三要素是:父类内存,子类内存,磁盘数据。

UE4 C++与蓝图的继承问题相关推荐

  1. UE4 编辑器下修改蓝图类继承的父类 ReparentBlueprint C++

    一.添加代码,修改蓝图类继承的父类 .cpp #include "Kismet2/BlueprintEditorUtils.h" #include "Kismet2/Ki ...

  2. ue4 曲线图实现 蓝图_UE4虚幻引擎蓝图制作自动开关门(超详细图文教程

    原标题:UE4虚幻引擎蓝图制作自动开关门(超详细图文教程 自己花费了一天多的时间来编写和整理这篇图文教程,相信看了后能轻松学会使用蓝图制作会自动开关的单开门的,大家可以举一反三,尝试使用蓝图制做双开关 ...

  3. ue4 曲线图实现 蓝图_UE4蓝图解析(一)

    简介 蓝图是一类特殊的asset,可以使用直观.基于节点的方式创建逻辑,或者设置一些变量数据.策划可以创建自定义的Actor.Event.函数等等,快速的做Gameplay迭代,不需要写任何代码. 蓝 ...

  4. 【UNREAL ENGINE 游戏开发】开篇之UE4的BLUEPRINT(蓝图)与C++(新童鞋必看)

    本站文章均为  李华明Himi  原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接:  http://www.himigame.com/unreal-engine-game/ ...

  5. UE4学习-使用蓝图进行一个关卡的设计

    文章目录 添加关卡 几何体 添加几何体 几何体挤压 减去几何体 添加光源 给几何体贴材质.贴纹理 场景管理 成品 Unreal Engine 4 简称UE4,后续文中都使用简称. 本文知识来源:UE4 ...

  6. [UE4] 内容浏览器不显示继承自 None 的类

    一开始我是新建一个继承 Character 的类,然后会提示我热更新出错,需要重新编译 报错提示为 Output Log 内容浏览器 可以显示出新建的类 MyCharacter 但是当我新建一个继承 ...

  7. UE4 Sequence在蓝图中播放和结束

    1. 在UE4蓝图中,播放一段sequence步骤 在场景中选择要播放的sequence 在蓝图里面添加引用 添加Play节点 连接Play的目标和要播放的sequence,系统会自动生成一个sequ ...

  8. UE4 什么是蓝图,如何用来快速创建原型?

    首先,蓝图是 虚幻引擎可视化的脚本系统.使用蓝图就是在视觉编码. 1.我们通过关卡蓝图(Level Blueprint)给大家演示一下蓝图编程实际的运行效果,位置如下图: 2.使用 Begin pla ...

  9. [UE4]虚幻4蓝图实现类似永劫无间的钩锁系统

    [UE4]虚幻4引擎实现类似永劫无间的钩锁系统 基于UE4实现类似永劫无间的钩锁系统,主要介绍一下思路,抛砖引玉,欢迎交流! 项目展示https://www.bilibili.com/video/BV ...

最新文章

  1. c语言判断2 1000素数,2是不是素数(C语言判断一个数为素数)
  2. 一文带你快速读懂.NET CLI
  3. 修改Static控件的字体颜色
  4. tomcat的class加载的优先顺序
  5. 眼下发展最迅猛的十家网络安全公司
  6. 电气通用规范_与通用电气的对话使我了解到有关开放式组织的知识
  7. RTT内核对象——对象理解
  8. python与财务工作总结_Python小结1
  9. Java 单例模式详解(转)
  10. HTML5期末大作业:体育主题网站设计——足球(9页) HTML+CSS+JavaScrip校园篮球网页作业成品 学校篮足球网页制作模板 学生简单体育运动网站设计成品
  11. 苹果删文件后无服务器,iOS13描述文件可以删除吗?iPhone删除描述文件图文教程...
  12. io.fabric8.docker-maven-plugin插件使用
  13. 163vip.com登陆TOM邮箱,定位商务人士的专属邮箱!
  14. switch default多次触发
  15. 把maven的setting配置文件改为需要jdk版本
  16. java正序输出整数_java实现:将一个数逆序输出
  17. 微信小程序从后台拿数据并成功展示到前台——demo
  18. 2020牛客暑期多校训练营(第一场)A B-Suffix Array(后缀数组,思维)
  19. 腾讯前端组件android,前端之Android入门(2):程序目录及UI简介 - 腾讯ISUX
  20. 认识整机托管和虚拟主机

热门文章

  1. mybatis 参数
  2. 《系统集成项目管理工程师》必背100个知识点-80项目变更管理在软件项目管理中的主要活动内容...
  3. Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度)
  4. VS中怎样打开MSDN帮助文档
  5. Vue实现访问百度音乐API实现播放音乐功能
  6. 企业架构(六)——TOGAF总论及架构开发方法(ADM)概述
  7. flutter弹起键盘页面布局超限问题
  8. 计算机文化英文15版答案,15信高《计算机文化基础》期中考试题答案
  9. c语言十六进制的输出与站位,运算符与格式输出输入4
  10. 启帆工业机器人综合收入如何_发那科工业机器人ROBOGUIDE如何更方便的查看机器人报警日志...