2015-04-14 2 views
0

Я импортирую проект union3D для Windows Phone 8. и добавляю несколько строк кода, которые взаимодействуют с кодом C# с обработчиком изменения события Object (SphereScript) в единстве3D.System.Runtime.InteropServices.SEHException в UnityEngine.dll

var sphereScript = UnityEngine.Object.FindObjectOfType<SphereScript>(); 
sphereScript.SphereStateChanged += sphereScript_SphereStateChanged; 
sphereScript_SphereStateChanged(sphereScript.IsSphereMoving); 

Проект компилируется нормально без ошибок, но когда он работает на телефоне он дает ошибку на линии

UnityEngine.Object.FindObjectOfType<SphereScript>(); 

исключение типа «System.Runtime.InteropServices.SEHException» произошло в UnityEngine.DLL, но не был обработан в коде пользователя. Я не знаю, почему эта ошибка возникает. но в первый раз, когда я начал проект, он попросил меня найти имя файла UnityEngineObject.cs. Где я могу найти этот файл или как я могу решить проблему. Благодарю.

Url для полного кода http://docs.unity3d.com/Manual/wp8-unity-interaction.html

+0

Вы можете добавить трассировку стека заброшенное исключение? –

+0

System.Runtime.InteropServices.SEHException не был обработан кодом пользователя HResult = -2147467259 Сообщение = Внешний компонент выбрал исключение. Источник = UnityEngine ErrorCode = -2147467259 StackTrace:. в UnityEngine.Internal $ Calli.Invoke38 (Int32 arg0, метод IntPtr) в UnityEngine.Object.FindObjectsOfType (Тип) в UnityEngine.Object.FindObjectOfType (Тип) в UnityEngine.Object.FindObjectOfType [T]() в UnityXamlInteractionExample.MainPage.Unity_Loaded() InnerException: –

ответ

0

в Unity 5x я была равна проблема. Так попробуйте это:

В сценарии SphereScript.cs:

переписывают это:

public event Action<bool> SphereStateChanged; 

к этому:

public static event Action<bool> SphereStateChanged = delegate { }; 

рядом, в Visual Studio после сборки проекта ООН -комментировать эти части кода:

UnityApp.SetLoadedCallback(() => { Dispatcher.BeginInvoke(Unity_Loaded); }); 

private void Unity_Loaded() { } 

Теперь вставьте в частной ничтожной Unity_Loaded() это:

ShareScript.SphereStateChanged += SphereStateChanged; 

и, наконец, добавить следующее:

void SphereStateChanged(bool currentSpehreState) 
{ 
    Dispatcher.BeginInvoke(() => 
    { 
     SphereStateTextBlock.Text = currentSpehreState ? "Spehre is moving" : "Sphere is stopped"; 
    }); 
} 

удачи, до свидания :)

Смежные вопросы