Unity熱更學習--Lua指令碼使用C#中的事件、委託和協程

畅知發表於2024-05-25

[14]lua呼叫使用C#中的事件和委託

C#指令碼:繼續在Student類中宣告

 //宣告委託和事件
public UnityAction dele;
public event UnityAction eventAction;

public void DoDele()
{
    if (dele != null)
        dele();
}

public void DoEvent()
{
    if (eventAction != null)
        eventAction();
}

public void ClearEvent()
{
    eventAction = null;
}

lua中進行呼叫:

--使用委託
function testFun() 
    print("我在委託中執行 testFun")
end

--第一次委託新增函式時候要直接賦值
student.dele = testFun

student.dele = student.dele + function()  
    print("我是匿名函式哈哈哈")
end

--不可以直接執行委託 student。dele() 
student:DoDele()

--取出函式
student.dele = student.dele - testFun
print("減去TestFun函式")
student:DoDele()

--清空委託中的函式
student.dele = nil

--使用事件
function testFun1()
    print("我在事件中執行 testFun1")
end

function testFun2()
    print("我在事件中執行 testFun2")
end

student.eventAction = student.eventAction + testFun2
student.eventAction = student.eventAction + testFun1

--觸發事件
student:DoEvent()

--從事件中移除函式
student.eventAction = student.eventAction - testFun2
print("再次觸發事件")
student:DoEvent()

--不可以直接移除事件
print("事件清除")
student:ClearEvent()

[15]lua呼叫使用Unity中的協程

----使用C#中的協程
--宣告一個協程型別
local Timer = nil

function Counter() 
    local t = 0
    while true do
        print(t)
        WaitForSeconds(1)
        t = t + 1
        if t > 60 then
            StopTimer()
            break
        end
    end
end
--開啟計時器
function StartTimer()
    Timer = StartCoroutine(Counter)
end
--停止協程
function StopTimer()
    StopCoroutine(Timer)
    Timer = nil
end
--呼叫函式開啟計時器
StartTimer()

注意在lua呼叫入口進行LuaCoroutine註冊

image-20240525162235614

相關文章