public void doit_AsyncLoad(bool doLoadAvatar,/*PlayerXR playerXR, */
                               Action <GameObject> OnSuccess,
                               Action <GameObject> OnError)
    {
        WskRequest request;

        request = new WskRequest();
        //request.playerXR = playerXR;
        request.OnSuccess = OnSuccess;
        request.OnError   = OnError;

        //test
        string assetBundleName = "environment/forest1.avatar1";

        string themePath;

        themePath = "western";
        //themePath = "spaceshipTheme";
        themePath = "spaceship1";

        // avatar
        if (doLoadAvatar)
        {
            //assetBundleName = "western/avatar";
            assetBundleName = themePath + "/avatar";
        }

        //scene
        //assetBundleName = "western/rooms";
        //table
        //assetBundleName = "western/tables";


        if (!doLoadAvatar)
        {
            //if (Application.platform == RuntimePlatform.Android)
            //    assetBundleName = "Android/western/rooms";
            //else
            //{
            //    //if (Application.platform == RuntimePlatform.Windows)
            //    assetBundleName = "Windows/western/rooms";
            //}

            //assetBundleName = "western/rooms";
            assetBundleName = themePath + "/rooms";
        }

        string assetItem_PrefabName = "assets/polygonstarter/prefabs/characters/sm_bean_cop_01.prefab";

        InstantiateObject(request, assetItem_PrefabName, assetBundleName);
    }
    public void InstantiateObject(WskRequest wskRequest, string assetItem_PrefabName, string assetBundleName)
    {
        /*
         * (3) Environment selection & build script
         *
         *  3.1. Unity project configuration
         *  Create an empty Unity project. Assuming the game would have online features and we’ll
         *  have 3 environments (e.g. test, homologation and production, with different server URL’s),
         *  create a way to define which environment to connect. When hitting ‘Play’, the game must display
         *  which environment is selected.
         *
         */



        if (Application.platform == RuntimePlatform.WebGLPlayer)
        {
            url = basePath + "WebGL/" + assetBundleName;
        }
        else
        if (Application.platform == RuntimePlatform.Android)
        {
            url = basePath + "Android/" + assetBundleName;
        }
        else
        if (Application.platform == RuntimePlatform.WindowsPlayer ||
            Application.platform == RuntimePlatform.WindowsEditor)
        {
            // default - all other platforms

            url = basePath + "Windows/" + assetBundleName;
        }



        //TODO: 2 simultaneous AssetBundle request ==> only 1 async web request
        AssetBundleEx bundle_ex = null;

        for (int i = 0; i <= bundles.Count - 1; i++)
        {
            if (bundles[i].url == url)
            {
                bundle_ex = bundles[i];
            }
        }

        if (bundle_ex == null)
        {
            bundle_ex = new AssetBundleEx();
            if (bundle_ex.Requestlist == null)
            {
                bundle_ex.Requestlist = new List <WskRequest>();
            }
            bundle_ex.url = url;
            bundles.Add(bundle_ex);
        }

        //TODO: use correct assetname
        //string assetname = "avatar1";
        bundle_ex.assetItem_PrefabName = assetItem_PrefabName;


        bundle_ex.Requestlist.Add(wskRequest);
        Debug.Log("queue:" + bundle_ex.Requestlist.Count);



        if (bundle_ex.isReady_loadedOK)
        {
            //BundleReady_LoadedOK(bundle_ex);
        }
        else
        if (bundle_ex.loading)
        {
            // already loading, wait finish
        }
        else
        {
            // async request

            // start load and wait finish
            bundle_ex.loading = true;
            //StartCoroutine(RequestAssetBundleAsync(bundle_ex));
        }
    }