Сбой UWP при переходе с XAML на D3D в Unity3D
Я пытаюсь позвонить из XAML в код D3D, скомпилированный в Unity для устройства HoloLens. Для этого я стараюсь следовать инструкциям этого поста.
- Я скомпилировал проект Unity в версии Unity2017.2.f03 в XAML с выбором Смешанной реальности (поддерживается виртуальная реальность)
- Я добавил свой XAML в App.cs. Поэтому для этого вместо вызова MainPage я вызываю Myown XAML Page для выполнения каких-либо задач.
private void InitializeUnity(string args)
{
if UNITY_WP_8_1 || UNITY_UWP
ApplicationView.GetForCurrentView().SuppressSystemOverlays = true;
endif
if UNITY_WP_8_1
StatusBar.GetForCurrentView().HideAsync();
endif
appCallbacks.SetAppArguments(args);
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null && !appCallbacks.IsInitialized())
{
rootFrame = new Frame();
Window.Current.Content = rootFrame;
if !UNITY_HOLOGRAPHIC
// Diego commented this line and discommented
Window.Current.Activate();
endif
// rootFrame.Navigate(typeof(MainPage));
//**Here is where I update my code**
//**Here is where I update my code**
//**Here is where I update my code**
rootFrame.Navigate(typeof(MyOwnPage));
}
Window.Current.Activate();
}`
На странице Myown, когда я заканчиваю свои дела, я пытаюсь вызвать Unity3D, поэтому я использую функции, предложенные в блоге.
private async Task CreateNewHoloWindowAsync()
{
try
{
var appViewId = MainAppViewId = ApplicationView.GetForCurrentView().Id;
var _newCoreAppView = CoreApplication.CreateNewView();
await _newCoreAppView.Dispatcher
.RunAsync(CoreDispatcherPriority.Low,
async () =>
{
var frame = new Frame();
Window.Current.Content = frame;
frame.Navigate(typeof(MainPage));
_newCoreAppView.CoreWindow.Activated += WindowActivated;
_newCoreAppView.CoreWindow.Activate();
var res = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
ApplicationView.GetForCurrentView().Id,
ViewSizePreference.Default, appViewId,
ViewSizePreference.Default);
_newCoreAppView.CoreWindow.Activated += WindowActivated;
_newCoreAppView.CoreWindow.Activate();
});
}
catch (Exception ex)
{
var dialog = new MessageDialog(ex.Message);
await dialog.ShowAsync();
}
}
private void WindowActivated(object sender, WindowActivatedEventArgs e)
{
try
{
if (e.WindowActivationState == CoreWindowActivationState.CodeActivated
|| e.WindowActivationState == CoreWindowActivationState.PointerActivated)
{
AppCallbacks.Instance.SetInitialViewActive();
// Only need to mark initial activation once so unregister ourself
CoreWindow coreWindowSender = sender as CoreWindow;
coreWindowSender.Activated -= WindowActivated;
}
}
catch (Exception ex)
{
var dialog = new MessageDialog(ex.Message);
dialog.ShowAsync();
}
}
Кажется, все идет хорошо, но когда скомпилированный код Unity d3d запускается в новом окне, он неожиданно завершает работу с исключением: -2147483645 (0x80000003). Больше информации нет. Я думаю, что мне не хватает некоторого кода с обратными вызовами, но у меня нет такого опыта в UWP. Какой-нибудь код, который может мне помочь?