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);
}
}
}
}