本小节的教程需要完成前置教程:建议阅读《实例甜点 Unreal Engine 4迷你教程(5)》,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程。

第一步:Empty的工程(C++ Basic Code);

第二步:新建MyActor类;

第三步:新建一个叫做sand的Actor类:

Tips:我在调试过程中遇到很恶心的事情,就是修改了代码之后发现没有用,这可能是热加载失败的表现,请重新打开UE4(VS不用重启)。

第四步:

Sand文件不用修改,只需要修改MyActor的文件如下:

▼代码开始
// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "sand.h"
#include "MyActor.generated.h"UCLASS()
class EMPTY_API AMyActor : public AActor
{GENERATED_BODY()public:    // Sets default values for this actor's properties
    AMyActor();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:    // Called every framevirtual void Tick(float DeltaTime) override;UPROPERTY()TArray<Asand* > arr;//【注意最好有UPROPERTY()标注】
    };
▲代码结束▼代码开始
// Fill out your copyright notice in the Description page of Project Settings.

#include "MyActor.h"// Sets default values
AMyActor::AMyActor()
{// 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;}// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{Super::BeginPlay();for (auto i = 0; i < 4; i++){Asand* newSand = GetWorld()->SpawnActor<Asand>(Asand::StaticClass());//【SpawnActor的方法】arr.Add(newSand);//【Add的方法】UE_LOG(LogTemp, Warning, TEXT("%s"), *FString("[log by wenjie] i ve added a sand tinto arr"));//【打印的方法】
    }}// Called every frame
void AMyActor::Tick(float DeltaTime)
{Super::Tick(DeltaTime);static int32 Timer = 0;if (Timer++ == 20){UE_LOG(LogTemp, Warning, TEXT("%s"), *FString("[log by wenjie] Time==20"));
/*
不正确的方法:for (auto i : arr){//【不建议的remove方法】arr.Remove(i);UE_LOG(LogTemp, Warning, TEXT("%s"), *FString("[log by wenjie] removed one instance"));}上面的remove的方法不十分优雅:
在执行过程中报如下错误【可能死机也可能不死机】:
LogOutputDevice:Error: === Handled ensure: ===
LogOutputDevice:Error: Ensure condition failed: Lhs.CurrentNum == Lhs.InitialNum [File:D:\UE4.16.3\UE_4.16\Engine\Source\Runtime\Core\Public\Containers/Array.h] [Line: 197]
LogOutputDevice:Error: Array has changed during ranged-for iteration!以下提供恰当的remove方法:
//参考资料:
//https://forums.unrealengine.com/showthread.php?69383-A-Little-Tip-Remove-elements-from-an-array-in-one-pass-with-a-reverse-for-loop
*/for (auto i = arr.Num() - 1; i >= 0; i--){arr.RemoveAt(i);UE_LOG(LogTemp, Warning, TEXT("%s"), *FString("[log by wenjie] removed one instance"));}}
}▲代码结束

补充说明:不是说remove(实例引用)不对,而是不应该把它和foreachloop搭配,正确的做法是倒序移除。

你看,完全没有红色的报错:

——小江村儿的文杰 zouwj5@qq.com 2017年8月7日21:50:52

转载于:https://www.cnblogs.com/JackSamuel/p/7323481.html

实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove...相关推荐

  1. 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren...

    前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...

  2. Unreal Engine 4 系列教程 Part 8:粒子系统教程

    原文:Unreal Engine 4 Particle Systems Tutorial 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程中,你将学习如何创建粒子特效并使用蓝图进 ...

  3. Unreal Engine 4 系列教程 Part 7:音频教程

    原文:Unreal Engine 4 Audio Tutorial 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程中,你将学习如何以不同方法播放3D音效,并通过UI控制音频音量 ...

  4. Unreal Engine 4 系列教程 Part 1:入门

    原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...

  5. Unreal Engine 4 系列教程 Part 9:AI教程

    原文:Unreal Engine 4 Tutorial: Artificial Intelligence 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程中,你将学习如何使用行为 ...

  6. Unreal Engine 4 系列教程 Part 3:材质教程

    原文:Unreal Engine 4 Materials Tutorial 作者:Tommy Tran 译者:Shuchang Liu 通过这篇教程,你将学会如何在材质编辑器里修改贴图,创建材质实例, ...

  7. Unreal Engine 4 系列教程 Part 5:制作简单游戏

    原文:How to Create a Simple Game in Unreal Engine 4 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程中,你将学习制作一个第一人称动 ...

  8. Unreal Engine 4 系列教程 Part 2:蓝图教程

    原文:Unreal Engine 4 Blueprints Tutorial 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程里,你将学会如何用蓝图系统创建玩家角色,设置输入,并 ...

  9. Unreal Engine 4 初学者教程:开始

    原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:kmyhy Unreal Engine 4 是一 ...

最新文章

  1. [日志]保证让你一天不困的方法
  2. 浏览器中的标签切换事件
  3. blur失焦方法会触发两次_中央空调维修过程中,晶闸管和电容器的检测方法
  4. mysql基本操作(重点)
  5. Python 调用pyaudio库录制以及播放wav音频文件
  6. 2022 年是 Linux 桌面年吗?
  7. 网站排障分析常用的命令
  8. leaflet加载离线OSM(OpenStreetMap)
  9. CPU设计学习-流水线
  10. jquery验证框架validate的使用
  11. Gartner最新洞见:数据分析将是改变“游戏规则”的技术、企业的中台需要可组装的架构
  12. 剑指offer-从尾到头打印链表
  13. linux执行jmeter脚本解决响应数据为空
  14. javascript绘制静态或者动态的图表、关系表、流程图-JointJS
  15. IE开发利器-IE10中的F12开发者工具
  16. 《跟我学Shiro》——张开涛(链接)
  17. 浪曦全部视频【截至4月14日】
  18. PLSQL官网下载地址
  19. FreeSSL + ACME自动化续期域名SSL证书(支持泛域名)
  20. 熊猫的python小课怎么样_02_Python简单爬虫(熊猫直播LOL的up主,谁最强!)

热门文章

  1. jdk-7u75-windows-x64 jdk-7u75-windows-i586
  2. 剑网3手游微信52服务器灵霄峡,剑网3指尖江湖灵霄峡怎么打 剑网3手游灵霄峡成就副本打法及阵容推荐攻略...
  3. LCD段码屏液晶屏针脚尺寸多长?
  4. js正则匹配身份证号码
  5. YouTube投降了,删除了垂直视频中的黑条
  6. windows服务器审计日志存放位置,windows服务器审计日志存放位置
  7. 微信小程序中的绝对路径和相对路径
  8. python汉字无法显示图片_完美解决matplotlib画图中文显示问题
  9. SIGAI机器学习算法地图
  10. C#之程序调试方法总结