1)如何计算弧线弹道的落地位置
2)Unity 2021 IL2CPP下使用Protobuf-net序列化报异常
3)编译问题,用Mono可以,但用IL2CPP就报错
4)Wwise的Bank在安卓上LoadBank之后,播放没有声音
这是第393篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
Physics
Q:请教一个问题,现在我有一个可以打出弧线弹道的迫击炮,可以放到场景里任何位置,怎么能算出可以打到的区域和打不到的区域?要考虑场景内建筑物的遮挡问题。
然后,旋转一周的话以多少角度来计算呢?
A1:碰撞不只有地面的碰撞,所以高度图也不能解决。自己模拟弹道轨迹计算,然后进行分段逐个探测就好。要真说GPU来解决,可能更多是基于视觉表现上的,而且会把问题变得更加复杂,只是提升下数量非常多的时候的性能。
可以参考Niagara,使用深度图、SDF、或者新一代GPU的物理探测方案来做支持。
感谢听风辨雨@UWA问答社区提供了回答
A2:笨方法就是先旋转一周一层循环,再从0到90度仰角再一层循环,每个发射角用抛物线公式计算虚拟炮弹的运动轨迹,轨迹连线,中间有物理的射线检测判断有没有障碍,最后生成大量的抛物线的落点画出来。
感觉上SphereCast比射线检测更好,这个用Compute Shader算应该很合适。但是建筑物碰撞部分怎么在CS里面处理?是不是把建筑物的碰撞先预处理成体素还不确定。
感谢jump晃悠@UWA问答社区提供了回答
A3:微积分基础思想就能解决,小范围内以直代曲,也就是分段SphereCast即可。如果要更精确,就不要用均匀分段,而是根据曲率不同分段长度不同,曲率就是抛物线函数的二次导数。
另外,每个角度算一个曲线就好,一般不需要提前把所有可能都算出来。
感谢偶尔不帅@UWA问答社区提供了回答
Script
Q:请问有遇到这个问题的嘛,在安卓上序列化报以下异常:
NotSupportedException: D:/Unity2021/Unity 2021.3.4f1/Editor/Data/il2cpp/libil2cpp/icalls/mscorlib/System.Reflection/RuntimeParameterInfo.cpp(23) : Unsupported internal call for IL2CPP:RuntimeParameterInfo::GetTypeModifiers - "This icall is not supported by il2cpp."
A:.NET功能可能不受IL2CPP支持,试着升级一下Unity或者绕过你要实现的功能。
感谢萧小俊@UWA问答社区提供了回答
Script
Q:请教个问题,使用IL2Cpp就报错,用Mono编译就可以过。
A:IL2CPP里代码太多也会这样,如果开了Script Debugging关掉试试。若还没解决,那把这里调高看看(如下图),让代码少一点。
不过调高了有可能有别的报错,如果Strip了需要用到的东西,还得自己加到link.xml里。
感谢deviljz@UWA问答社区提供了回答
Audio
Q:请教个问题,Wwise的Bank在安卓上LoadBank之后,播放没有声音,请问有人遇到过吗?
A:连Wwise的Profiler,看下是Bank加载失败了,还是播放失败了,或者根本就没有Listener,都有可能的,Profiler都会告诉你。
感谢断弦的旋律@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com