Playmaker v1.9.9 SetProperty Bug On Android Device

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

playmaker 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 类的完成源码可以从这里下载

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注