对《分享一下自己用c++写的小地图》一文的补充

在写完上一篇文章后,发现了一个问题:

那就是编写的插件无法实时预览。

在学习了Slate之后,我找到了方法:

重写SynchronizeProperties函数

头文件中添加:

#if WITH_EDITOR
    UFUNCTION()
    virtual void SynchronizeProperties() override;
#endif

因为只需要在编辑器中运行,所以加上了#if WITH_EDITOR

cpp文件中添加:

#if WITH_EDITOR
void UMiniMap::SynchronizeProperties()
{
    Super::SynchronizeProperties();
    WidgetSize = 400;
    MapTextureSize = 512;
    //构建组件
    MainMap = NewObject<UImage>(this, TEXT("MainMap"));
    PlayerCursor = NewObject<UImage>(this, TEXT("PlayerCursor"));
    Frame = NewObject<UImage>(this, TEXT("Frame"));
    //往Widget容器中加入组件
    RootPanel = Cast<UCanvasPanel>(WidgetTree->RootWidget);
    if (RootPanel)
    {
        RootPanel->AddChild(MainMap);
        RootPanel->AddChild(PlayerCursor);
        RootPanel->AddChild(Frame);
    }
    UMaterialInstance *MainMapMaterialInstance = LoadObject<UMaterialInstance>(NULL, TEXT("/Game/UI/Images/MiniMapMaterial_Instance"), NULL, LOAD_None, NULL);
    if (MainMapMaterialInstance)
    {
        MainMapMaterial = UKismetMaterialLibrary::CreateDynamicMaterialInstance(GetWorld(), MainMapMaterialInstance);
        if (MainMapMaterial->Parent->GetMaterial()->MaterialDomain == MD_UI)
        {
            UWidgetLayoutLibrary::SlotAsCanvasSlot(MainMap)->SetSize(FVector2D(WidgetSize, WidgetSize));
            MainMap->SetBrushFromMaterial(MainMapMaterial);
            MainMapMaterial->SetScalarParameterValue(FName(TEXT("MiniMapScaleRatio")), (float)WidgetSize / MapTextureSize);
        }
    }
    UTexture2D* PlayerCursorTexture = LoadObject<UTexture2D>(NULL, TEXT("/Game/UI/Images/PlayerCursor"), NULL, LOAD_None, NULL);
    if (PlayerCursorTexture)
    {
        UWidgetLayoutLibrary::SlotAsCanvasSlot(PlayerCursor)->SetSize(FVector2D(PlayerCursorTexture->GetSizeX(), PlayerCursorTexture->GetSizeY()));
        PlayerCursorSize = PlayerCursorTexture->GetSizeX();
        UWidgetLayoutLibrary::SlotAsCanvasSlot(PlayerCursor)->SetPosition(FVector2D(-PlayerCursorSize / 2 + WidgetSize / 2, -PlayerCursorSize / 2 + WidgetSize / 2));
        PlayerCursor->SetBrushFromTexture(PlayerCursorTexture);
    }
    if (SetImageBurshFromMaterial(TEXT("/Game/UI/Images/FrameMaterial"), Frame, FVector2D(WidgetSize, WidgetSize)))
    {
        UWidgetLayoutLibrary::SlotAsCanvasSlot(Frame)->SetSize(FVector2D(WidgetSize, WidgetSize));
    }
    //后面可以考虑加入别的按钮以及边框
}
#endif

不过这样还有有一点小问题,在新建的蓝图(继承这个类的蓝图)中狂点,引擎会直接崩掉,目前找不到解决方案,引擎里都是用Slate的,论坛和AnswerHUB也都没有相关资料,不过这个问题不影响使用,所以教程到此为止了。

时间: 2024-10-14 05:11:32

对《分享一下自己用c++写的小地图》一文的补充的相关文章

分享一位国外大牛写的不规则物体像素级碰撞检测算法及详解

最近在做一个有关投篮的小游戏,需要用到像素级碰撞检测,as3自带的hitTestObject显然无法满足需要.网上搜寻了一下,在9ria挖坟挖到两篇好文章: 分享一个超高效的不规则物体碰撞检测的类~~ [Lii]超高效的不规则物体碰撞检测<效率优化> 第一篇文章介绍了一位国外大牛写的不规则物体像素级碰撞检测算法,原理是用bitmap绘制两对象不透明区域,利用混合模式计算出两对象的相交区域. 第二篇文章则在该算法的基础上进行了效率的优化,原理是判断出两对象发生hitTestObject碰撞后,将

如何优雅的写一篇安利文-以Sugar ORM为例

前言 我最近喜欢把写的十分优美的技术文章叫做安利文.首先,文章必须是原创而非软广:其次,阅读之后不仅能快速吸纳技术要点并入门开发,还能感同身受的体会作者热情洋溢的赞美和急于分享心得体验的心情,让人感觉相见恨晚,醍醐灌顶. 安利文基于技术文章但又高于技术文章,同是经验总结,但却因为作者认真的揣摩每一个标点.断句而变得优雅.一篇满是主观感受的文章却不嚼之乏味,作者用心的指出每一个需要注意的技术亮点在文字中如蛟龙戏水,让阅读者大呼过瘾.因此,我觉得能原创分享一篇技术文章精神已经难能可贵,但若能锦上添花

Docz 用 MDX 写 React UI 组件文档

Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组件库.较早的 Twitter 的 Bootstrap 虽然只能称为 UI 库,但也大大提升了开发效率.后面 MVVM 大行其道 ,前端终于可以把 HTML.CSS.JS 放在一起开发包含 UI .交互真正意义上的组件了,现在有基于 React 的 Material-UI.国内阿里金服基于 React

分享一个很早之前写的小工具DtSpyPlus

几年前写的一个获取windows窗体基本信息和屏幕取色的小工具 ,一直在用. 下载地址 http://files.cnblogs.com/dint/SpyPlus.zip

【原创】问题定位分享(16)spark写数据到hive外部表报错ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat

spark 2.1.1 spark在写数据到hive外部表(底层数据在hbase中)时会报错 Caused by: java.lang.ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat at org.apache.spark.sql.hive.SparkHiveWrit

【转】分享一份C语言写的简历

个人观点:文章想法很棒,作者的编码风格也很赞,可以从中学到不少东西.转载的文章是我都用心看过的,而且希望后续再可以回过头看的文章,努力让自己的能力越来越强,加油 这里黑客新闻吗?作者用代码更新了自己的简历,是不是很接地气,特符合程序员的逼格.这是一份可读可执行的C语言源文件,也是作者编码风格的体现. #include <stdio.h> #include <time.h> typedef struct { union { char * company; char * school;

关于微信二次分享,描述变链接的解决方法(一)----文档说明

http://www.cnblogs.com/joshua317/p/4761948.html 前言: 最近工作中遇到了使用微信二次分享的时候,标题被截短,描述也变成了链接,图片也没有,运营人员半夜还在嚷嚷,无奈只好硬着头皮去百度,去google,但是悲催的是没有详细的解决方法,最终只能自己去研究,还好最终搞出来了,决定分享一下,帮助需要的人.博文,分两篇,第一篇主要是微信的官方文档说明,第二篇主要是代码部分: 一.微信JS-SDK说明文档 1.概述 微信JS-SDK是微信公众平台面向网页开发者

如何写好产品需求文档?

常常有人问我怎么写prd,在深受市面上流行的功能需求模板“残害”之后,我现在一般不会向别人推荐任何所谓的“模板”. 需求文档是产品需求的表达方式,而其中需要描述什么内容取决于产品经理想要描述什么,即产品经理的需求.如果产品经理的需求是明确的,而且产品经理脑中有物,那么需求文档自然而然就出来了.最可怕的是产品经理自己都不知道自己要描述的是什么内容,这个时候即使有模板,写出来的东西也是一团糟. 互联网产品以用户为中心,所以prd也应该站在用户的角度来描述,如果不知道自己要写什么,在写文档之前产品经理

【10000+文章汇总】技巧都在这里了,你也能写出1w+好文!

自 #我要10000+# 计划启动以来,已经有多位作者参与其中,我们通过文章专属推广渠道,取得了惊人的效果!单篇文章的阅读量,最高达到55倍的阅读量增长.从默默无闻,到有人喜欢,获得关注的同时,打造个人影响力. 现在让我们来看看,这些 10000+ 好文,都有哪些~ 标题 阅读量 青铜到王者,快速提升你 MySQL 数据库的段位! 82340 MySQL十大经典错误案例(附解决方案) 70894 [揭秘]数据库面试葵花宝典,让你面试一次过 35681 开发人员学Linux,大型系统开发经验谈 1