MicroProger
@MicroProger
Работает - не трогай

Как принимать параметры ссылки в unity WebGL?

Мне нужно, чтобы мой скрипт unity WebGL принимал параметры ссылки. В итоге получаю такое сообщение. Делал по гайду https://pixeleuphoria.com/blog/index.php/2020/04/2...

663a9dafd21f2314278702.jpeg

Это сообщение в браузере...

Плагин, который я скопировал с гайда и вставил в папку Plugins
mergeInto(LibraryManager.library, 
{
	BrowserGetLinkHREF : function()
	{
		// https://css-tricks.com/snippets/javascript/get-url-and-url-parts-in-javascript/
		var search = window.location.href;
		var searchLen = lengthBytesUTF8(search) + 1;
		var buffer = _malloc(searchLen);
		stringToUTF8(search, buffer, searchLen);
		return  buffer;
	},
});

Сохранил в формате .jslib

Код, где происходит работа с параметрами
using System.Collections.Generic;

public class ParamParse
{
    [System.Runtime.InteropServices.DllImport("__Internal")]
    public static extern string BrowserGetLinkHREF();

    public static Dictionary<string,string> GetBrowserParameters()
    {

        Dictionary<string, string> ret = 
            new Dictionary<string, string>();

//#if UNITY_WEBGL && !UNITY_EDITOR

        // Use the .NET class Uri to parse the link and get the query portion for us
        System.Uri uri = new System.Uri(BrowserGetLinkHREF());
        string linkParams = uri.Query;

        if(linkParams.Length == 0)
            return ret;

        // If it contains the starting questionmark, strip it out
        if(linkParams[0] == '?')
            linkParams = linkParams.Substring(1);
        
        // Get the different parameters separated by '&''
        string [] sections = linkParams.Split(new char [] { '&' }, System.StringSplitOptions.RemoveEmptyEntries);
        foreach(string sec in sections)
        { 
            // Check to see if it's a variable assignment
            string [] split = sec.Split(new char[]{'=' }, System.StringSplitOptions.RemoveEmptyEntries);
            if(split.Length == 0)
                continue;

            // If it contains an '=' sign, assign its key-value in the dictionary
            if(split.Length == 2)
            {
                if(ret.ContainsKey(split[0]) == true)
                    ret[split[0]] = split[1];
                else
                    ret.Add(split[0], split[1]);
            }
            else
            {
                // If it doesn't contain a '=', just log it as a key, and an empty value
                if (ret.ContainsKey(sec) == true)
                    ret[sec] = "";
                else
                    ret.Add(sec, "");
            }

        }
//#endif
        return ret;
    }
}


А это вызов всего этого дела
Dictionary<string, string>  params_url = ParamParse.GetBrowserParameters();
        if(params_url.Count == 0)
        {
            id_string.text = "здесь id";
        }
        else
        {
            id_string.text = params_url["id"];
        }


Консоль unity
EntryPointNotFoundException: BrowserGetLinkHREF assembly:<unknown assembly> type:<unknown type> member:(null)
ParamParse.GetBrowserParameters () (at Assets/Scripts/ParamParse.cs:17)
MainMenu.Start () (at Assets/Scripts/MainMenu.cs:17)


Upd: возможно, есть более простое решение всего вопроса. Может для этого даже не стоит писать сторонние плагины и есть более простое решение. Можете помочь?
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы