레벨 에디터에서 복사하면 인스턴스의 참조가 이상해짐

Describe the issue briefly

해당 인스턴스들의 부모를 복사했을때만 그런건지는 잘 모르겠는데(그럴 확률이 높아보여요) 그렇게 복사하면 자녀들의 인스턴스들의 참조가 복사되지 않고 원본 애들이랑 동일한것 같습니다. 텔레포터를 이런 구조로 담아서 만들고 있었는데:
[Model]

[Part1]

[Part2]

이 [Model]을 레벨 애디터에서 복사(Ctrl + D)해서 다른곳에서도 재사용하려고 했지만 인게임에서 테스트해보니 Part1.Touched에서 닿은 캐릭터의 위치를 Part2로 이동하게 했는데 첫번째 원본/원조 Model의 Part1로만 이동됩니다.

여러 실험을 해본뒤 알아낸거: 런타임에서 해당 각 파트들에 :Clone()을 한번 더 하고 원본은 삭제하는 방식으로 임시방편으로 고칠 수 있었습니다.

코드: (여기서 :Clone()하는 솔루션을 제거하면 버그를 보실 수 있습니다.)

local teleports = workspace:WaitForChild(“Teleports”)
for _, model in next, teleports:GetChildren() do
if model:IsA(“Model”) then
local parts = (model:GetChildren() :: any) :: { BasePart }
local part1 = parts[1]:Clone()
part1.Parent = teleports
local part2 = parts[2]:Clone()
part2.Parent = teleports
parts[1]:Destroy()
parts[2]:Destroy()
part1.Touched:Connect(function(hit)
local char = hit.Parent
if not char then
return
end
local human = char:FindFirstChildOfClass(“Humanoid”)
if not human then
return
end
local hrp = char:FindFirstChild(“HumanoidRootPart”)
if not hrp or not hrp:IsA(“BasePart”) or hrp:GetAttribute(“TeleportDebounce”) then
return
end
hrp:SetAttribute(“TeleportDebounce”, true)
task.wait(0.1)
hrp.CFrame = part2.CFrame
task.wait(1)
hrp:SetAttribute(“TeleportDebounce”, false)
end)
part2.Touched:Connect(function(hit)
local char = hit.Parent
if not char then
return
end
local human = char:FindFirstChildOfClass(“Humanoid”)
if not human then
return
end
local hrp = char:FindFirstChild(“HumanoidRootPart”)
if not hrp or not hrp:IsA(“BasePart”) or hrp:GetAttribute(“TeleportDebounce”) then
return
end
hrp:SetAttribute(“TeleportDebounce”, true)
task.wait(0.1)
hrp.CFrame = part1.CFrame
task.wait(1)
hrp:SetAttribute(“TeleportDebounce”, false)
end)
end
end

Environment

Studio, Windows 11 64bit

Expected Result

(예상)부모 인스턴스가 복사되도 자녀 인스턴스들도 Recursive하게 참조가 복사되어야함(부모 인스턴스의 참조만 복제된걸로 추정), 참조가 제대로 복사되어야함

Issue Frequency

100% (Always)

Workaround Solution

신기하게도 런타임 스크립트상에서 :Clone()을 또 해주면 임시 해결 가능

This issue has been resolved through guide.