同样的 Unity 2021.3.46f1 项目,用 Playmaker 在 PC 版本运行正常,但导出 Android 版本就出现问题。尝试过:在 Player Settings > Other Settings 里关闭 Managed Stripping Level(或调低),但没有效果。后来一步一步尝试,不断地用Log打印出结果,最后发现问题出在:SetProperty 在某些时候不起作用。

这里的情况如图片所示:当点击某个按钮时,用SetProperty Action来隐藏一个当前页面,同时显示另外一个页面。PlayMaker 代码用反射的方式来实现 GameObject active属性的修改,这在Unity Editor中是可行的,然后到真机上(无论是Android设备,还是iOS设备)都有这个问题。解决办法:针对ObjectType为 UnityEngine.GameObject,属性为 active 的情形直接调用 GameObject类设置对象隐藏和显示的方法来实现。相关代码改动如下:
bool DoSetActive()
{
if ( targetProperty.TargetObject != null ) {
GameObject obj = targetProperty.TargetObject.Value as GameObject;
if ( obj != null && targetProperty.PropertyName == "active") {
bool bActive = targetProperty.BoolParameter.Value;
obj.SetActive(bActive);
return true;
}
}
return false;
}
public override void OnEnter()
{
if (DoSetActive())
{
;
} else {
targetProperty.SetValue();
}
if (!everyFrame)
{
Finish();
}
}
public override void OnUpdate()
{
if (DoSetActive()) {
return;
} else {
targetProperty.SetValue();
}
}
加入 DoSetActive()
来处理该类情况,其他情况则按原来逻辑执行!
打包真机测试,问题解决!
SetProperty.cs 类的完成源码可以从这里下载!