XLUA --隨機數問題

首先看一下C#中的方法

[Hotfix]
public class HotFixMgr
{
    private int m_Num;

    private void GetSeed()
    {
    m_Num=Random.Range(1,100)
    }
}

這裏定義了一個整型的數:m_num,從1~100裏給它取一個隨機數賦值。

如果想在Xlua中重寫這個方法GetSeed。上代碼示範

xlua.private_accessible(CS.HotFixMgr)
xlua.hotfix(CS.HotFixMgr,'GetSeed',function(self)
local c=CS.UnityEngine.Random.Range(1,100)
self.m_Num=c
--self.Num=CS.UnityEngine.Mathf.Floor(c)
print(c)

這裏涉及到Unity中Random.Range的重載,它有兩個方法

因爲C#中分爲float類型和int類型,當你輸入參數時它會自動選擇調用哪個。而在lua中,只有Number類型,所以在調用CS.UnityEngine.Random.Range(1,100)時,獲取到的不再是一個整數,而是一個浮點數。所以這時把一個浮點類型的數賦值給整形類型的變量,就會發生錯誤。所以這裏打印出來的m_Num始終爲0,而c是一個小數。在C#中把浮點型給整型直接賦值會報錯。而在lua中不會報錯。

解決的辦法也在上述代碼中寫出來了,調用Mathf中的Floor向下取整,因爲lua中沒有強制類型轉換,所以只能通過這樣來實現。當然上述方法可以用別的方式實現,這裏只是分析爲何會出現賦值錯誤的問題。

 

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