【发布时间】:2017-10-23 11:45:09
【问题描述】:
我在从结构的 TArray 中删除结构时遇到了一些困难。我的结构包含 AudioComponent 和 float。我使用的是 Array.RemoveAt(index),但我从中得到的只是删除了我的结构的一半,即 AudioComponent . 这是为什么?我的功能删除元素如下所示:
void RemoveArrayElement( UAudioComponent AudioComponent )
{
for( int i=0; i<Array.Num(); i++ )
{
if( AudioComponent == Array[i].AudioComponent )
{
Array.RemoveAt( i );
}
}
}
我想要实现的是完全删除索引,AudioComponent 与它的浮动。
【问题讨论】:
-
“删除我的结构的一半”是什么意思?我不明白你如何删除一个结构的一半或它如何表现出来(或者你如何看待它)
-
假设 Array[0]=Stuct(AudioComponent0,float0)。使用 Array.RemoveAt(0) 后,我得到的是 Array[0]=Stuct(some invalid value,float0)。
-
所以数组的大小没有改变,
Array中的剩余元素没有“向前移动”? -
您不应按值存储或复制 UObject。而是使用指针 (`UAudioComponent*) 和 UPOPERTY 来防止它们被垃圾收集器破坏。阅读更多:docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/…
-
看起来元素本身仍然存在,因为即使不再有 AudioComponent,结构的一个参数仍然有效且可访问。而且你的数组在之后没有改变它的大小
标签: c++ arrays unreal-engine4