xlua熱更例子

C#代碼:

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System;

public class Mains : MonoBehaviour {

    public void Start()
    {
        string id = "5845695";
        string birth = "19980608";
        string sex = "girl";
        
        StartCoroutine(GetDestiny(id, birth, sex, ()=> {
            Debug.Log("What Will Happens!");
        }));
    }

    IEnumerator GetDestiny(string _id, string _birth, string _sex, Action _action)
    {
        string url = "https://get_your_destiny/love";
        WWWForm form = new WWWForm();
        form.AddField("id", _id);
        form.AddField("birth", _birth);
        form.AddField("sex", _sex);
        UnityWebRequest request = UnityWebRequest.Post(url, form);
        request.timeout = 10;
        yield return request.SendWebRequest();

        string server_data = request.downloadHandler.text;
        if(request.error != null)
        {
            //repeat again
            StartCoroutine(GetDestiny(_id, _birth, _sex, _action));
        }
        else if(server_data == "lucky")
        {
            Debug.Log("I am SO lucky!");
        }
        else
        {
            if(_action != null)
            {
                _action();
            }
        }
    }
}

 

 

 

xlua重寫的方法

local util = require "util"


xlua.hotfix(CS.XluaManager, 'check_xlua_base', function(self)
	print('check_xlua_base')
end)

xlua.hotfix(CS.XluaManager, 'check_xlua_IEnumerator',function(self)
	return util.cs_generator(function()
		print('check_xlua_IEnumerator')
	end)
end)

xlua.hotfix(CS.XluaManager, 'check_xlua_bool', function(self,action)
	print('check_xlua_bool')
end)






xlua.hotfix(CS.login_gui, 'isMatchRealName', function(name)
	print("===============isMatchRealName");
	local reg = "^[\\u4e00-\\u9fa5\\uf900-\\ufa2d][\\u4e00-\\u9fa5\\uf900-\\ufa2d·]+$";
	local result = CS.System.Text.RegularExpressions.Regex.IsMatch(name, reg);
	return result;
end)







--"=============================================================實現上面C#方法=============================="

--"實現'Start'方法"
xlua.hotfix(CS.Mains, 'Start', function(self)
    
        local id = "5845695";
        local birth = "19980608";
        local sex = "girl";
        
        self:StartCoroutine(self:GetDestiny(id, birth, sex, function(self)
            CS.UnityEngine.Debug.Log("What Will Happens!");
        end));
end)

--"實現'GetDestiny'協程方法"
xlua.hotfix(CS.Mains, 'GetDestiny', function(self, _id, _birth, _sex, _action)

    local url = "https://get_your_destiny/love";

    //"把yield寫在這裏面"
    return util.cs_generator(function()

	local form = CS.UnityEngine.WWWForm();
	form:AddField("id", _id);
	form:AddField("birth", _birth);
	form:AddField("sex", _sex);
	local request = CS.UnityEngine.Networking.UnityWebRequest.Post(url, form);
	request.timeout = 10;

        --"此句實現yield"
	coroutine.yield(request:SendWebRequest());

	local serverData = request.downloadHandler.text;
	CS.UnityEngine.Debug.Log("========serverData: " .. serverData);
			
			
	if (request.error ~= nil) then
	    CS.UnityEngine.Debug.LogError("request error: " .. request.error)
            //repeat again
            self:StartCoroutine(self:GetDestiny(_id, _birth, _sex, _action));
        elseif(serverData == "lucky") then
            CS.UnityEngine.Debug.Log("I am SO lucky!");
        else
            if(_action ~= null) then
                _action();
            end
        end
    end)

end)

--"不直接重寫方法,而是在原有方法的基礎上,繼續執行語句"
util.hotfix_ex(CS.Mains, 'GetDestiny', function(self, _id, _birth, _sex, _action)
    --"先執行方法"
    self:StartCoroutine(self:GetDestiny(_id, _birth, _sex, _action));
    --"繼續執行語句"
    print("====================cctv");
end)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章