public static UnifiedObject InstantiateObject(Node parent, UnifiedObject templateObject, Vector3 position, Transform baseTransformation, Transform auxTransformation, bool accurateObjectDisposal, double startingDistance, double endingDistance, double blockLength, double trackPosition)
    {
        StaticObject instantiatedObject = (StaticObject)templateObject.Clone();

        MeshInstance instantiatedMesh = instantiatedObject.ObjectMeshInstance;

        Transform finalTrans = baseTransformation * auxTransformation;

        instantiatedMesh.GlobalTransform = new Transform(finalTrans.basis, Vector3.Zero);

        parent.AddChild(instantiatedMesh);

        instantiatedMesh.GlobalTranslate(position);

        return(instantiatedObject);

        // UnifiedObject retObject = null;
        // if (templateObject is StaticObject)
        // {
        //     retObject = new StaticObject();
        //     retObject.gameObject = instantiatedMesh;
        // }
        // else if (templateObject is AnimatedObjectCollection)
        // {
        // }

        // return retObject;
    }