【Unity】XLua巨坑汇总

目录

一、拓展方法未生效问题

二、xLua中获取transform的localEulerAngles异常问题


一、拓展方法未生效问题

最近在使用GameFramework框架,并且接入了xlua,在xlua的一开始Init.lua 我使用如下代码获取了一个全局类声明 

GameEntry = CS.StarForce.GameEntry    注意:Init.lua是游戏启动Lua时最先执行的lua文件用于require其他lua文件的

接着我在各种UI使用它,遇到了无论我怎么检查都已经引入所有类型到Lua了(即LuaCallCSharp列表里),在我使用如下代码报错。

GameEntry.Sound:IsMuted("Music")

C#侧 ,这个方法是一个SoundExtension静态类的扩展方法!

我也试过使用如下代码进行尝试,出现一毛一样的报错!

GameEntry.Sound.IsMuted("Music")

解决方法 改为 CS.StarForce.GameEntry.GameEntry.Sound:IsMuted("Music") 即可,原因可能是我获取到的GameEntry的相关拓展方法还未生效。


更新时间:2021年1月12日

二、xLua中获取transform的localEulerAngles异常问题

localEulerAngles可能和C#侧的localEulerAngles不一样!
localEulerAngles可能和C#侧的localEulerAngles不一样!
localEulerAngles可能和C#侧的localEulerAngles不一样!

C#侧 ( PS:path 是 CinemachineSmoothPath , Cinemachine插件的一个辅助自定义路径点的类,tr是一个路径点四元数,它会根据路径长度来获取自定义路径的当前点并返回当前点的旋转四元数)

var tr = path.EvaluateOrientationAtUnit(p, CinemachineSmoothPath.PositionUnits.Distance).eulerAngles;                        
if (trans.localEulerAngles.y < tr.y - 1.5f || trans.localEulerAngles.y > tr.y + 1.5f)
{
    trans.rotation = Quaternion.RotateTowards(trans.rotation, Quaternion.Euler(0, tr.y, 0), 10 * Time.deltaTime);                            
}

lua侧(PS:trans.localEulerAngles.y 我直接改为 trans.eulerAngles 就是正常的数据得出正常的效果)

local tr = self.path:EvaluateOrientationAtUnit(self.p, CS.Cinemachine.CinemachineSmoothPath.PositionUnits.Distance).eulerAngles
if trans.eulerAngles.y < tr.y - 1.5 or trans.eulerAngles.y > tr.y + 1.5 then
    trans.rotation = CS.UnityEngine.Quaternion.RotateTowards(trans.rotation, CS.UnityEngine.Quaternion.Euler(0, tr.y, 0), 10 * Time.deltaTime)
    return
end

因此解决方法就是改为使用eulerAngles才正确,关于如何获取正确的localEulerAngles,目前还未深入研究(待研),可能也不会出现这种问题,比如xlua版本不同可能也不同,我认为应该是xlua自身的wrap转化出现问题了

猜你喜欢

转载自blog.csdn.net/qq_39574690/article/details/109733841