bool SerializeKnownComponents(GameObject go, LevelObject lo, out bool skipChildren)
    {
        bool doKeep = false;

        skipChildren = false;

        /*
         * var sdo = go.GetComponent<SpawnDriftingObjects>();
         * if(sdo != null)
         * {
         *  var sh = new SerializerHelper();
         *  sh.Stream = new ByteStream();
         *  sh.Write(sdo);
         *
         *  var sb = new SimpleBuffer();
         *  sb.Stream = new MemoryStream(sh.Stream.Buffer, 0, sh.Stream.Position, true, true);
         *
         *  lo.properties[LevelObject.SPAWN_DRIFTING_OBJECTS] = sb;
         *  lo.properties[LevelObject.SPAWN_DRIFTING_OBJECTS_TEMPLATE] = GetPrefabID(go.name, sdo.ObjectToSpawn);
         *
         *  skipChildren = true;
         *  doKeep = true;
         * }
         */

        var mta = go.GetComponent <MeshTunnelAnimator>();

        if (mta != null)
        {
            var sh = new SerializerHelper();
            sh.Stream = new ByteStream();
            sh.Write(mta);

            var sb = new SimpleBuffer();
            sb.Stream = new MemoryStream(sh.Stream.Buffer, 0, sh.Stream.Position, true, true);
            lo.properties[LevelObject.MESH_TUNNEL_ANIMATOR] = sb;

            if (mta.OverrideMaterial != null)
            {
                lo.properties[LevelObject.MESH_TUNNEL_ANIMATOR_MATERIAL] = mapComp.ResolveMaterialToId(mta.OverrideMaterial);
            }

            lo.properties[LevelObject.MESH_TUNNEL_ANIMATOR_DISPLAYMESH] = GetPrefabID(mta.DisplayMesh.name, mta.DisplayMesh);

            doKeep = true;
        }

        var ps = go.GetComponent <ParticleSystem>();

        if (ps != null)
        {
            var sh = new SerializerHelper();
            sh.Stream = new ByteStream();
            sh.Write(ps);

            var sb = new SimpleBuffer();
            sb.Stream = new MemoryStream(sh.Stream.Buffer, 0, sh.Stream.Position, true, true);
            lo.properties[LevelObject.PARTICLE_SYSTEM] = sb;

            var psr = go.GetComponent <ParticleSystemRenderer>();
            lo.properties[LevelObject.PARTICLE_SYSTEM_MATERIAL] = mapComp.ResolveMaterialToId(psr.sharedMaterial);

            doKeep = true;
        }

        return(doKeep);
    }