UE4 C++与蓝图的继承问题
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++与蓝图的继承问题相关推荐
- UE4 编辑器下修改蓝图类继承的父类 ReparentBlueprint C++
一.添加代码,修改蓝图类继承的父类 .cpp #include "Kismet2/BlueprintEditorUtils.h" #include "Kismet2/Ki ...
- ue4 曲线图实现 蓝图_UE4虚幻引擎蓝图制作自动开关门(超详细图文教程
原标题:UE4虚幻引擎蓝图制作自动开关门(超详细图文教程 自己花费了一天多的时间来编写和整理这篇图文教程,相信看了后能轻松学会使用蓝图制作会自动开关的单开门的,大家可以举一反三,尝试使用蓝图制做双开关 ...
- ue4 曲线图实现 蓝图_UE4蓝图解析(一)
简介 蓝图是一类特殊的asset,可以使用直观.基于节点的方式创建逻辑,或者设置一些变量数据.策划可以创建自定义的Actor.Event.函数等等,快速的做Gameplay迭代,不需要写任何代码. 蓝 ...
- 【UNREAL ENGINE 游戏开发】开篇之UE4的BLUEPRINT(蓝图)与C++(新童鞋必看)
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/unreal-engine-game/ ...
- UE4学习-使用蓝图进行一个关卡的设计
文章目录 添加关卡 几何体 添加几何体 几何体挤压 减去几何体 添加光源 给几何体贴材质.贴纹理 场景管理 成品 Unreal Engine 4 简称UE4,后续文中都使用简称. 本文知识来源:UE4 ...
- [UE4] 内容浏览器不显示继承自 None 的类
一开始我是新建一个继承 Character 的类,然后会提示我热更新出错,需要重新编译 报错提示为 Output Log 内容浏览器 可以显示出新建的类 MyCharacter 但是当我新建一个继承 ...
- UE4 Sequence在蓝图中播放和结束
1. 在UE4蓝图中,播放一段sequence步骤 在场景中选择要播放的sequence 在蓝图里面添加引用 添加Play节点 连接Play的目标和要播放的sequence,系统会自动生成一个sequ ...
- UE4 什么是蓝图,如何用来快速创建原型?
首先,蓝图是 虚幻引擎可视化的脚本系统.使用蓝图就是在视觉编码. 1.我们通过关卡蓝图(Level Blueprint)给大家演示一下蓝图编程实际的运行效果,位置如下图: 2.使用 Begin pla ...
- [UE4]虚幻4蓝图实现类似永劫无间的钩锁系统
[UE4]虚幻4引擎实现类似永劫无间的钩锁系统 基于UE4实现类似永劫无间的钩锁系统,主要介绍一下思路,抛砖引玉,欢迎交流! 项目展示https://www.bilibili.com/video/BV ...
最新文章
- c语言判断2 1000素数,2是不是素数(C语言判断一个数为素数)
- 一文带你快速读懂.NET CLI
- 修改Static控件的字体颜色
- tomcat的class加载的优先顺序
- 眼下发展最迅猛的十家网络安全公司
- 电气通用规范_与通用电气的对话使我了解到有关开放式组织的知识
- RTT内核对象——对象理解
- python与财务工作总结_Python小结1
- Java 单例模式详解(转)
- HTML5期末大作业:体育主题网站设计——足球(9页) HTML+CSS+JavaScrip校园篮球网页作业成品 学校篮足球网页制作模板 学生简单体育运动网站设计成品
- 苹果删文件后无服务器,iOS13描述文件可以删除吗?iPhone删除描述文件图文教程...
- io.fabric8.docker-maven-plugin插件使用
- 163vip.com登陆TOM邮箱,定位商务人士的专属邮箱!
- switch default多次触发
- 把maven的setting配置文件改为需要jdk版本
- java正序输出整数_java实现:将一个数逆序输出
- 微信小程序从后台拿数据并成功展示到前台——demo
- 2020牛客暑期多校训练营(第一场)A B-Suffix Array(后缀数组,思维)
- 腾讯前端组件android,前端之Android入门(2):程序目录及UI简介 - 腾讯ISUX
- 认识整机托管和虚拟主机
热门文章
- mybatis 参数
- 《系统集成项目管理工程师》必背100个知识点-80项目变更管理在软件项目管理中的主要活动内容...
- Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度)
- VS中怎样打开MSDN帮助文档
- Vue实现访问百度音乐API实现播放音乐功能
- 企业架构(六)——TOGAF总论及架构开发方法(ADM)概述
- flutter弹起键盘页面布局超限问题
- 计算机文化英文15版答案,15信高《计算机文化基础》期中考试题答案
- c语言十六进制的输出与站位,运算符与格式输出输入4
- 启帆工业机器人综合收入如何_发那科工业机器人ROBOGUIDE如何更方便的查看机器人报警日志...