Unity3D的Plattform依赖编译什么时候起作用?
When does Unity3D's Plattform dependent compilation work?
我有一个来自我的项目的小代码片段。它在脚本中用于拖放菜单。脚本附加到每个项目,可拖动。
public void OnDrag(PointerEventData eventData){
if (isPlantLocked())
return;
#if UNITY_EDITOR
transform.position = Input.mousePosition;
#endif
#if UNITY_ANDROID
transform.position = Input.touches[0].position;
#endif
}
我遇到异常(我拖动项目的每一帧),Input.touches.Length 为零,但此代码区域只能用于 android,并且在移动版本上一切正常.
现在我的问题是如何摆脱异常以及平台依赖项何时起作用?
如果您查看 "Build Settings" window,有一个 "Switch Platform" 按钮可以调整您当前的运行时平台并触发相应指令的编译,即使在编辑。这意味着 UNITY_ANDROID
和 UNITY_EDITOR
都可以同时为 true
,因为 UNITY_EDITOR
意味着您在 Unity 应用程序本身中是 运行。
由于您正在检查输入类型并且第一个输入类型用于鼠标,您可能希望将 UNITY_EDITOR
替换为 UNITY_STANDALONE
,然后确保在编辑器中进行测试时,您设置了正确的当前平台。
另一种选择(如果您永远不会发布独立版本并且它仅用于非 PC 平台则更好)是首先检查 UNITY_EDITOR
然后 #else if
其他选项:
#if UNITY_EDITOR
transform.position = Input.mousePosition;
#elif UNITY_ANDROID
transform.position = Input.touches[0].position;
#endif
这样您可以更轻松地更换当前的平台设置。
当您在 Editor 中,并且在构建设置中选择了 Android 平台时,这两个代码将工作。
如果您不想在 Editor 中执行特定的 Android 代码,您可以执行以下操作:
public void OnDrag(PointerEventData eventData){
if (isPlantLocked())
return;
#if UNITY_EDITOR
transform.position = Input.mousePosition;
#endif
#if UNITY_ANDROID && !UNITY_EDITOR
transform.position = Input.touches[0].position;
#endif}
您还可以阅读更多相关内容 here。
我有一个来自我的项目的小代码片段。它在脚本中用于拖放菜单。脚本附加到每个项目,可拖动。
public void OnDrag(PointerEventData eventData){
if (isPlantLocked())
return;
#if UNITY_EDITOR
transform.position = Input.mousePosition;
#endif
#if UNITY_ANDROID
transform.position = Input.touches[0].position;
#endif
}
我遇到异常(我拖动项目的每一帧),Input.touches.Length 为零,但此代码区域只能用于 android,并且在移动版本上一切正常.
现在我的问题是如何摆脱异常以及平台依赖项何时起作用?
如果您查看 "Build Settings" window,有一个 "Switch Platform" 按钮可以调整您当前的运行时平台并触发相应指令的编译,即使在编辑。这意味着 UNITY_ANDROID
和 UNITY_EDITOR
都可以同时为 true
,因为 UNITY_EDITOR
意味着您在 Unity 应用程序本身中是 运行。
由于您正在检查输入类型并且第一个输入类型用于鼠标,您可能希望将 UNITY_EDITOR
替换为 UNITY_STANDALONE
,然后确保在编辑器中进行测试时,您设置了正确的当前平台。
另一种选择(如果您永远不会发布独立版本并且它仅用于非 PC 平台则更好)是首先检查 UNITY_EDITOR
然后 #else if
其他选项:
#if UNITY_EDITOR
transform.position = Input.mousePosition;
#elif UNITY_ANDROID
transform.position = Input.touches[0].position;
#endif
这样您可以更轻松地更换当前的平台设置。
当您在 Editor 中,并且在构建设置中选择了 Android 平台时,这两个代码将工作。
如果您不想在 Editor 中执行特定的 Android 代码,您可以执行以下操作:
public void OnDrag(PointerEventData eventData){
if (isPlantLocked())
return;
#if UNITY_EDITOR
transform.position = Input.mousePosition;
#endif
#if UNITY_ANDROID && !UNITY_EDITOR
transform.position = Input.touches[0].position;
#endif}
您还可以阅读更多相关内容 here。