在使用Unity引擎开发的过程中总会遇到各种各样的问题,有些问题很坑,只有遇到的才懂,为了避免以后自己再被同一块石头绊倒,特意在此做个整理,希望能给大家节省一些时间,有同样遇到坑的小伙伴也可以把问题或解决方法写在楼下,以供其他小伙伴参考。趟过的坑会持续整理。
C#的坑
JsonUtility转数组BUG
现象:
string json = "[1, 2, 3]";
int[] array = JsonUtility.FromJson<int[]>(json); // 报错
解决:
https://segmentfault.com/a/11...
UGUI的坑
ContentSizeFitter自适应宽高的BUG
现象:
自适应宽高的UI嵌套多了以后 子节点改变宽高 UI无法正确适应
比如嵌套多级的下拉列表 子节点展开后会挤在一起 折叠后会空出一块 父节点不会自适应
解决:
手动调用自适应方法:LayoutRebuilder.ForceRebuildLayoutImmediate(rectTrans)
// UGUI的自适应 嵌套多了有BUG 手动调用一下
private void ResizeContent() {
Transform content = this.content;
while (content != null) {
ContentSizeFitter fitter = content.GetComponent<ContentSizeFitter>();
if (fitter != null) {
RectTransform rectTrans = content.GetComponent<RectTransform>();
LayoutRebuilder.ForceRebuildLayoutImmediate(rectTrans);
}
content = content.parent;
}
}
Android的坑
IL2CPP发布失败
现象:
Failed running:C:.../il2cpp.exe --convert-to-cpp
Exception:C:.../il2cpp.exe did not run property!
解决:
升级Unity版本(虽然没从根本上解决问题 但是升级一个小版本就发布成功了 版本的嫌疑最大)
IOS的坑
IOS上Animator动画系统不好使了
现象:
IOS系统上 所有Animator的动画全不播放了 其他Tween动画和粒子动画正常 Animaton的播放不了 资源是AssetBundle动态加载的
解决:
发布设置中的StripEngineCode = false
原因:
StripEngineCode启用该选项时 会剥离无用的代码 导致该问题
官方说明:
https://docs.unity3d.com/Scri...
说明翻译:
如果启用了该功能,那么在IL2CPP构建中,将删除Unity引擎代码库中未使用的模块和类。这将导致更小的二进制大小。建议使用此设置,然而,如果您怀疑这会导致项目出现问题,您也许想禁用它。注意,为IL2CPP脚本后端托管程序集的字节代码剥离是始终启用的。
SLua的坑
Vector2不能被除
现象:
touch.deltaPosition / 2 会导致代码报错 程序无法运行 因为slua不支持Vector2的除法 Vector3的支持 这个坑我也是醉了 做触点识别的时候趟出来的坑
解决:
x、y 分别除
RenderTexture 宽高不能用浮点数赋值
现象:
renderTexture.width = width
RenderTexture.Create failed: width & height must be larger than 0
解决:
renderTexture.width = math.floor(width) -- 转成整数
Vector3在lua里是引用类型 不是值类型
现象:计算抛物线弹道时,在C#计算时轨迹正确,转成lua时轨迹就错误了
利用方法传进去的参数是Vector3类型 方法内计算Vector3后 外面的参数值也变了
-- 计算抛物线物体在下一帧的位置
function this.getParabolaNextPosition(position, velocity, gravity, time)
-- velocity在lua里是引用类型了 不能随便修改
velocity.y = velocity.y + gravity * time
return position + velocity * time
end
解决:
function this.getParabolaNextPosition(position, velocity, gravity, time)
-- 拷贝Vector3的值
local v = Vector3(velocity.x, velocity.y, velocity.z)
v.y = v.y + gravity * time
return position + v * time
end
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。