实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove...
本小节的教程需要完成前置教程:建议阅读《实例甜点 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...相关推荐
- 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren...
前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...
- Unreal Engine 4 系列教程 Part 8:粒子系统教程
原文:Unreal Engine 4 Particle Systems Tutorial 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程中,你将学习如何创建粒子特效并使用蓝图进 ...
- Unreal Engine 4 系列教程 Part 7:音频教程
原文:Unreal Engine 4 Audio Tutorial 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程中,你将学习如何以不同方法播放3D音效,并通过UI控制音频音量 ...
- Unreal Engine 4 系列教程 Part 1:入门
原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...
- Unreal Engine 4 系列教程 Part 9:AI教程
原文:Unreal Engine 4 Tutorial: Artificial Intelligence 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程中,你将学习如何使用行为 ...
- Unreal Engine 4 系列教程 Part 3:材质教程
原文:Unreal Engine 4 Materials Tutorial 作者:Tommy Tran 译者:Shuchang Liu 通过这篇教程,你将学会如何在材质编辑器里修改贴图,创建材质实例, ...
- Unreal Engine 4 系列教程 Part 5:制作简单游戏
原文:How to Create a Simple Game in Unreal Engine 4 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程中,你将学习制作一个第一人称动 ...
- Unreal Engine 4 系列教程 Part 2:蓝图教程
原文:Unreal Engine 4 Blueprints Tutorial 作者:Tommy Tran 译者:Shuchang Liu 在本篇教程里,你将学会如何用蓝图系统创建玩家角色,设置输入,并 ...
- Unreal Engine 4 初学者教程:开始
原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:kmyhy Unreal Engine 4 是一 ...
最新文章
- eclipse下3种安装插件的方式及缺点比较
- XGBoost缺失值引发的问题及其深度分析
- c++ template笔记(2)模板类
- unity集成openinstall流程
- html自定义工具条,为Autodesk Viewer添加自定义工具条的更好方法
- 非阻塞IO与异步IO
- kafka 丢弃数据_kafka 生产者和幂等
- 【C/C++开发】C++实现字符串替换的两种方法
- Win32 API串口编程
- C/C++ _strlwr_s 函数 – 字符串大写转小写- C语言零基础入门教程
- 腾讯云2019年全年营收超170亿元,腾讯健康码累计访问量达80亿次
- 六石管理学:问别人问题之前,先要明白自己的目的
- WearOS 工具箱
- 视频流调试过程(海康威视+Kurento)
- 工作十年的程序员,却拿着毕业三年的工资,再不开窍就真晚了!
- Ubuntu20.04 重装N卡驱动仍无法解决的问题的解决方法
- jQuery教程大纲
- cpu占用突然到百分百又降下去_cpu使用率忽高忽低
- CSS入门学习笔记+案例(1)
- 如何准备银行秋招春招?
热门文章
- 最流行无人系统ROS机器人平台——Autolabor Pro1
- goland 方法注释_godoc 介绍以及 Golang 注释规范
- SimpleAudioEngine音效的使用导致游戏出现卡顿记录
- 关于Diablo3的历史和现状思考
- 多商户商城系统开发功能有哪些?
- 001_redis设置存活时间
- 微信错误:errcode=40164,errmsg=invalid ip xxx.x.xxx.xxx, not in whitelist
- 佛学:科学的角度看佛学故事“旗动?风动?心动!”
- openstack虚拟机断电导致-硬盘损坏修复xfs
- 光量子计算机+GPU!NVIDIA、Rolls-Royce和Classiq宣布取得技术突破