【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转化出现问题了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值