问题描述

今天build过程中,在build过程中出现:

Cannot build player while editor is importing assets or compling scripts.

并且在build完成后,控制台报错如下:

Library\PackageCache\com.microsoft.mixedreality.toolkit.foundation@f2323a9b7aec\Providers\WindowsMixedReality\XRSDK\WindowsMixedRealityDeviceManager.cs(404,128): error CS0104: 'Handedness' is an ambiguous reference between 'Microsoft.MixedReality.Input.Handedness' and 'Microsoft.MixedReality.Toolkit.Utilities.Handedness'

问题分析

可以看到在build过程中出现Cannot build player while editor is importing assets or compling scripts. 可得,由两种情况:一是:editor is importing assets ;另一种是compling scripts 出现错误 

editor is importing assets

这种一般都比较好解决,出现原因是: 引用UnityEditor的文件必须放到Editor文件夹中(好像只要有就行)

解决办法:

创建一个Editor文件夹,把用到UnityEditor及其API的脚本放到Editor文件夹下面

compling scripts 出现错误

我这里的原因是:

Handedness是一个模糊的引用,存在两个可能的选择:Microsoft.MixedReality.Input.HandednessMicrosoft.MixedReality.Toolkit.Utilities.Handedness

出错的一行如下:

WindowsMixedRealityXRSDKGGVHand detectedController = new WindowsMixedRealityXRSDKGGVHand(TrackingState.NotTracked, Handedness.None, inputSource);

但其实查阅官网发现:

WindowsMixedRealityXRSDKGGVHand有四个参数:

Parameters
trackingState TrackingState
controllerHandedness Handedness
inputSource IMixedRealityInputSource
interactions MixedRealityInteractionMapping[]

然后点到Handedness其实发现它的命名空间为:Microsoft.MixedReality.Toolkit.Utilities,因此,要想要解决报错,只需要进行进一步的限定即可:

WindowsMixedRealityXRSDKGGVHand detectedController = new WindowsMixedRealityXRSDKGGVHand(TrackingState.NotTracked, Microsoft.MixedReality.Toolkit.Utilities.Handedness.None, inputSource);

Microsoft.MixedReality.Input.Handedness是没有None属性的,因此build时会同样报错,这里很坑!