Неопределенные ошибки ссылок при использовании IL2CPP в Unity - PullRequest
0 голосов
/ 11 октября 2019

после переключения Unity Scripting на IL2CPP, моя сборка Android получает много неопределенных ошибок ссылок. Многие из них ссылаются на IOS ARKit. Могу ли я использовать операторы #if! UNITY_IOS, чтобы удалить их из моей сборки Android? и где я могу поместить эти операторы #if?

ошибки обнаруживаются в Bulk_Assembly-CSharp_8.cpp .. я пытался вставить в него операторы @if для конкретной сборки платформы, но, похоже, ничего не изменилось

if! UNITY_IOS

public class ARFaceAnchor 
{
    private UnityARFaceAnchorData faceAnchorData;
    private static Dictionary<string, float> blendshapesDictionary;

    public ARFaceAnchor (UnityARFaceAnchorData ufad)
    {
        faceAnchorData = ufad;
        if (blendshapesDictionary == null) {
            blendshapesDictionary = new Dictionary<string, float> ();
        }
    }


    public string identifierStr { get { return faceAnchorData.identifierStr; } }

    public Matrix4x4 transform { 
        get { 
            Matrix4x4 matrix = new Matrix4x4 ();
            matrix.SetColumn (0, faceAnchorData.transform.column0);
            matrix.SetColumn (1, faceAnchorData.transform.column1);
            matrix.SetColumn (2, faceAnchorData.transform.column2);
            matrix.SetColumn (3, faceAnchorData.transform.column3);
            return matrix;
        }
    }


    public ARFaceGeometry faceGeometry { get { return new ARFaceGeometry (faceAnchorData.faceGeometry); } }

    public Dictionary<string, float> blendShapes { get { return GetBlendShapesFromNative(faceAnchorData.blendShapes); } }

    delegate void DictionaryVisitorHandler(IntPtr keyPtr, float value);

    [DllImport("__Internal")]
    private static extern void GetBlendShapesInfo(IntPtr ptrDic, DictionaryVisitorHandler handler);

    Dictionary<string, float> GetBlendShapesFromNative(IntPtr blendShapesPtr)
    {
        blendshapesDictionary.Clear ();
        GetBlendShapesInfo (blendShapesPtr, AddElementToManagedDictionary);
        return blendshapesDictionary;
    }

    [MonoPInvokeCallback(typeof(DictionaryVisitorHandler))]
    static void AddElementToManagedDictionary(IntPtr keyPtr, float value)
    {
        string key = Marshal.PtrToStringAuto(keyPtr);
        blendshapesDictionary.Add(key, value);
    }
}

endif

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Спасибо, Даррен,

Должно быть, я все понял неправильно. поэтому

если! UNITY_ANDROID означает, если НЕ Android?

0 голосов
/ 11 октября 2019

Если вы хотите удалить из сборки Android, используйте

#if !UNITY_ANDROID
       // your code here
#endif

Будет более полезно, если вы сможете опубликовать сообщение об ошибке, относящееся к какой строке.

...