Add functionality to the c# script for unity below, I want it to be able to only add to a selection or select multiples when the shift key is held and the LEFT mouse button is pressed. Currently everything is ok with how it is so I just need ADDED functionality.

using UnityEngine;
using EPOOutline;
using System.Collections.Generic;

public class ObjectClickDetector : MonoBehaviour
{
	public Color32 SelectionColor;
	public List<GameObject> SelectionObjects = new List<GameObject>();

	void Update()
	{
		// Check if the left mouse button is pressed down
		if (Input.GetMouseButtonDown(1)) // 0 is for left-click
		{
			ShootRay(Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift));
		}
	}

	void FindMeshRenderers(Transform parentTransform)
	{
		// Get all MeshRenderer components in the child hierarchy of the parentTransform
		MeshRenderer[] meshRenderers = parentTransform.GetComponentsInChildren<MeshRenderer>(true);

		// Check if the GameObject already has an Outlinable component
		if (parentTransform.gameObject.GetComponent<Outlinable>() == null)
		{
			var outlinable = parentTransform.gameObject.AddComponent<Outlinable>();
			outlinable.RenderStyle = RenderStyle.Single;
			outlinable.OutlineParameters.Color = SelectionColor;

			// Add each MeshRenderer to the Outlinable
			foreach (MeshRenderer meshRenderer in meshRenderers)
			{
				outlinable.AddRenderer(meshRenderer);
			}

			// Add the GameObject to the selection list
			SelectionObjects.Add(parentTransform.gameObject);
			Debug.Log("Added to selection: " + parentTransform.gameObject.name);
		}
	}

	void DestroyOutlines(Transform parentTransform)
	{
		Outlinable outlinable = parentTransform.GetComponent<Outlinable>();
		if (outlinable != null)
		{
			Destroy(outlinable);
			SelectionObjects.Remove(parentTransform.gameObject);
			Debug.Log("Removed from selection: " + parentTransform.gameObject.name);
		}
	}

	void ShootRay(bool ShiftHeld)
	{
		// Get the main camera
		Camera mainCamera = Camera.main;

		if (mainCamera != null)
		{
			// Create a ray from the camera to the mouse position
			Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
			RaycastHit hit;

			// Perform the raycast
			if (Physics.Raycast(ray, out hit))
			{
				// Get the parent transform of the hit collider
				Transform currentTransform = hit.collider.transform;

				// Traverse the parent hierarchy
				while (currentTransform != null)
				{
					// Check if the parent name starts with "sim:"
					if (currentTransform.parent != null && currentTransform.parent.name.ToLower().StartsWith("sim:"))
					{
						Debug.Log("Found parent: " + currentTransform.name);

						if (ShiftHeld)
						{
							// If Shift is held, check if it's already in the selection
							if (SelectionObjects.Contains(currentTransform.gameObject))
							{
								// Deselecting the object
								DestroyOutlines(currentTransform);
							}
							else
							{
								// Adding the object to the selection
								FindMeshRenderers(currentTransform);
							}
						}
						else
						{
							// If Shift is not held, select or deselect the object directly
							if (!SelectionObjects.Contains(currentTransform.gameObject))
							{
								// Clear previous selections
								RemoveAllOutlines();
								// Select the new object
								FindMeshRenderers(currentTransform);
							}
							else
							{
								// If it's already selected and no Shift is held, deselect it
								DestroyOutlines(currentTransform);
							}
						}
						return; // Exit the method after handling the click
					}
					// Move to the parent transform
					currentTransform = currentTransform.parent;
				}

				Debug.Log("No parent found starting with 'sim:'");
			}
			else
			{
				// If no collider was hit, remove all outlines from selected objects
				Debug.Log("No collider was hit.");
				RemoveAllOutlines();
			}
		}
		else
		{
			Debug.LogError("Main Camera not found.");
		}
	}

	void RemoveAllOutlines()
	{
		// Remove outlines from all selected objects
		foreach (GameObject obj in new List<GameObject>(SelectionObjects)) // Create a copy to avoid modifying while iterating
		{
			DestroyOutlines(obj.transform);
		}
	}
}