TeleportTo関数を使用して複数の小道具をシャッフル移動させたいときに生じる問題についてです
下記のコード(レベル上の小道具の配列と、同じ小道具配列をシャッフル関数で別の並び順にしたものを組み合わせてTeleportTo関数を使用する)を実行し、小道具をシャッフルすると、ログ表示のように位置情報の重複が生じてしまい、複数の小道具が同じ位置になってしまいます。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Random }
using { /Verse.org/Verse }
#ゲーム開始時、レベル上のカードアクタをシャッフル移動するクラス
prop_teleport := class(creative_device):
#UEFNレベル上のアクタを格納する配列
@editable
var Props: []creative_prop = array{}
OnBegin<override>()<suspends>:void=
Sleep(3.0)
#カードアクタの配列変数Propをシャッフルし、ランダムに並べ替える新しい配列Cards
var Positions :[]creative_prop = array{}
set Positions = Shuffle(Props)
for(Index := 0..Positions.Length-1):
if (Position := Positions[Index]):
Transform := Position.GetTransform()
PositionX := Transform.Translation.X
PositionY := Transform.Translation.Y
PositionZ := Transform.Translation.Z
Rotation := Transform.Rotation
NewPosition := vector3{X := PositionX, Y :=PositionY, Z :=PositionZ}
Print("Index: {Index}")
Print("Teleport NewPosition: {NewPosition}")
TereportProp(Index, PositionX, PositionY, PositionZ, Rotation)
TereportProp(Index:int, PositionX:float, PositionY:float, PositionZ:float, Rotation:rotation): void=
NewRotation := Rotation.ApplyYaw(0.0)
NewPosition := vector3{X := PositionX, Y :=PositionY, Z :=PositionZ}
if (Props[Index].TeleportTo[NewPosition, NewRotation]):
Print("Teleport NewPosition: {NewPosition}")
ところが、下記のように、↑のプログラムのうち「 if (Props[Index].TeleportTo[NewPosition, NewRotation]):」の部分(つまり小道具の配列を使用したTeleportTo関数の箇所)を削除して再度実行すると位置情報の重複は生じなくなります。
片方の配列にもう片方の配列の出力が影響されるというのがプログラムとして理解できないところですが、これはVerse言語のバグか、あるいは作成した上記プログラムに何か欠けているところがありますでしょうか?