Clone een programmeerblok uit een socket voor in een IF/Else of For loop.

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
 
public class CloneFromSocketForNested : MonoBehaviour
{
    [SerializeField]
    private GameObject clonePrefab;
    private XRGrabInteractable grabbable;
 
    private GameObject parentTarget;
    [SerializeField]
    private string parentTag;
 
    private GameObject parentExists;
 
    private AudioSource audioSource;
 
    void Start()
    {
        grabbable = GetComponent<XRGrabInteractable>();
        grabbable.selectExited.AddListener(CloneInteractable);
        grabbable.selectEntered.AddListener(OnSocketEntered);
        parentTarget = GameObject.FindGameObjectWithTag(parentTag);
        audioSource = GameObject.FindGameObjectWithTag("Player").GetComponent<AudioSource>();
 
    }
 
    private void CloneInteractable(SelectExitEventArgs args)
    {
        XRSocketInteractor socketInteractor = args.interactorObject as XRSocketInteractor;
 
        if (socketInteractor != null)
        {
            GameObject gameObjectClone = Instantiate(clonePrefab, socketInteractor.transform.position, socketInteractor.transform.rotation);
            audioSource.Play();
        }
 
 
        grabbable.selectExited.RemoveListener(CloneInteractable);
    }
 
 
    private void OnSocketEntered(SelectEnterEventArgs args)
    {
        XRSocketInteractor socketInteractor = args.interactorObject as XRSocketInteractor;
 
        if (socketInteractor != null)
        {
            string socketTag = socketInteractor.gameObject.tag;
            if (socketTag == "Code Block")
            {
                audioSource.Play();
                //see if a gameobject with the name of the socketparenttag exists in the parentTarget
                foreach (Transform child in parentTarget.transform)
                {
                    //debugging
                    Debug.Log("Child name: " + child.name);
                    Debug.Log("Socket parent tag: " + socketInteractor.transform.parent.tag);
                    if(child.name == socketInteractor.transform.parent.tag)
                    {
                        //if it does, set the parent of the grabbable to the parentTarget
                        parentExists = child.gameObject;
                    }
                }
                if (parentExists != null)
                {
                    grabbable.transform.SetParent(parentExists.transform, true);
                }
                else
                {
                    string socketParentTag = socketInteractor.transform.parent.tag;
                    GameObject emptyObject = new GameObject(socketParentTag);
                    grabbable.transform.SetParent(emptyObject.transform, true);
                    emptyObject.transform.SetParent(parentTarget.transform, true);
                }
                int socketIndex = socketInteractor.transform.GetSiblingIndex();
                grabbable.transform.SetSiblingIndex(socketIndex);
            }
        }
    }
}