Quantcast
Channel: 平板电脑
Viewing all articles
Browse latest Browse all 500

Codebeispiele für die Erkennung von System-GPU, Batteriebetrieb und Windows* 8 Bildschirmtastatur in Unity*

$
0
0

PDF herunterladen

Laden Sie das Intel® Toolkit aus dem Unity Asset Store* herunter

Dieser Artikel enthält ein paar Tipps, die wir während der Arbeit mit Spiele-Entwicklern gelernt haben. Der erste Tipp ist, wie Sie Windows einheitlichen Modus-Touch und Touch-Feedback-Visuals darstellen. Die zweite ist, wie Sie erkennen, welche Art von GPU installiert ist und in welchem ​​Modus sich die Batterie des Benutzergeräts ist, vorausgesetzt, das Gerät verfügt über eine Batterie. Der letzte ist, wie Sie die integrierte Bildschirmtastatur in Windows* 8 mit Unity* verwenden, wusammen mit, wie Sie erkennen, ob die Tastatur auf dem Bildschirm sichtbar ist. Diese Themen behandeln nur einige der Fragen, unserer externen Partner, wenn sie versuchen, Spiele für verschiedene Plattformen zu aktivieren, also dachten wir, es wäre gut, sie mit anderen zu teilen. Das Asset ist im Unity Asset Store unter http://u3d.as/content/intel/intel-toolkit verfügbar.

Ein wesentlicher Beitrag zu diesem Projekt war Steve Hughes Artikel Hinzufügen von Multi-Touch-Unterstützung zu Unity* Spielen auf Microsoft Windows* 7 und Windows* 8 Desktop- und Code, um Windows 7/8 nativen Touch zu Unity hinzuzufügen.

Berührung und Berührungsfeedback Visuals

Unter Verwendung eines visuellen Element Hughes Code als Ausgangspunkt, haben wir ein visuelles Element hinzugefügt, sodass Benutzer die Daten visualisieren können, und sehen wie sie genutzt werden. Jeder Finger auf dem Bildschirm verfügt über einen eigenen Grafik, die den Berührungspunkt, der erfasst wurde, darstellt.

Außerdem haben wir etwas Code hinzugefügt, der die Windows-Standard-Touch-Feedback Optik ausschaltete. Zum Beispiel, wenn Sie Ihren Finger über den Bildschirm auf dem Windows-Desktop gleiten lassen, werden Sie wahrscheinlich eine kleine weiße Spur, die dem Pfad zu Ihrer Berührung folgt, so wie sie sich über den Bildschirm zieht. Diese Feedback-Optik ist nett, aber in einem Spiel wahrscheinlich nicht ideal. "So, wie schaltet man diese programmgesteuert aus", fragte ein Kunde? Unten ist ein Ausschnitt aus dem Windows-API-Aufruf, der wir gefunden und genutzt haben.

//in win8 sdk header
	typedef enum tagFEEDBACK_TYPE {
		FEEDBACK_TOUCH_CONTACTVISUALIZATION  = 1,
		FEEDBACK_PEN_BARRELVISUALIZATION     = 2,
		FEEDBACK_PEN_TAP                     = 3,
		FEEDBACK_PEN_DOUBLETAP               = 4,
		FEEDBACK_PEN_PRESSANDHOLD            = 5,
		FEEDBACK_PEN_RIGHTTAP                = 6,
		FEEDBACK_TOUCH_TAP                   = 7,
		FEEDBACK_TOUCH_DOUBLETAP             = 8,
		FEEDBACK_TOUCH_PRESSANDHOLD          = 9,
		FEEDBACK_TOUCH_RIGHTTAP              = 10,
		FEEDBACK_GESTURE_PRESSANDTAP         = 11,
		FEEDBACK_MAX                         = 0xFFFFFFFF
	} FEEDBACK_TYPE ;

	//check if win8 function exists
	//if so turn off the windows 8 touch feedback stuff
	typedef BOOL (*LPSETWINFEEDBACK)(HWND hwnd, FEEDBACK_TYPE feedback, DWORD dwFlags, UINT32 size, const VOID *configuration);
	HINSTANCE hDLL = NULL;
	LPSETWINFEEDBACK lpSetWinFeedBack;
	hDLL = LoadLibrary("User32.DLL");
	lpSetWinFeedBack = (LPSETWINFEEDBACK)GetProcAddress((HMODULE)hDLL, "SetWindowFeedbackSetting");

	if( lpSetWinFeedBack )
	{
		setval = FALSE;
		if(lpSetWinFeedBack( g_hRemoteWnd, FEEDBACK_TOUCH_CONTACTVISUALIZATION, 0, sizeof(BOOL), (void*)&setval) == false)
			return -7;
		setval = FALSE;
		if(lpSetWinFeedBack( g_hRemoteWnd, FEEDBACK_TOUCH_TAP, 0, sizeof(BOOL), (void*)&setval) == false)
			return -7;
		setval = FALSE;
		if(lpSetWinFeedBack( g_hRemoteWnd, FEEDBACK_TOUCH_PRESSANDHOLD, 0, sizeof(BOOL), (void*)&setval) == false)
			return -7;
		setval = FALSE;
		if(lpSetWinFeedBack( g_hRemoteWnd, FEEDBACK_TOUCH_DOUBLETAP, 0, sizeof(BOOL), (void*)&setval) == false)
			return -7;
		setval = FALSE;
		if(lpSetWinFeedBack( g_hRemoteWnd, FEEDBACK_TOUCH_RIGHTTAP, 0, sizeof(BOOL), (void*)&setval) == false)
			return -7;
		setval = FALSE;
		if(lpSetWinFeedBack( g_hRemoteWnd, FEEDBACK_GESTURE_PRESSANDTAP, 0, sizeof(BOOL), (void*)&setval) == false)
			return -7;
	}

Grundsätzlich werden Sie es in SetWindowFeedbackSetting aufrufen, sber Sie müssen vorsichtig sein, weil wir festgestellt, dass, wenn Sie die Ereignisse nicht in der richtigen Reihenfolge setzen, Sie einige unerwartete Abstürze bekommen könnten. Unser Beispiel zeigt die Reihenfolge, die wir zum korrekten Ausschalten der gesamte optische Rückmeldung verwendet haben, ohne dass es Probleme in unserer Anwendung gab.

GPU-Detect

Wir haben eines unserer bisher veröffentlichten Beispiele, GPU-Detect verwendet, das Entwicklern zeigt, wie sie Intel® Grafik-Hardware erkennen und relevante Informationen für ihre Spiele erhalten. In der Regel werden diese Informationen verwendet, um Standardleistungseinstellungen für verschiedene SKUs der Hardware zu schaffen. Manchmal ist die SKU nicht genügend Informationen, um die richtige Leistungsstufe für einen Teil zu bestimmen. Zum Beispiel, wenn Sie zwei Systeme mit der gleichen SKU, aber unterschiedlicher Thermal Design Power (TDP) Begrenzung haben, kann die Leistung zwischen den beiden unterschiedlich sein. In unserem GPU Erkennungsbeispiel stellen wir einen Mechanismus bereit, der zeigt, wie man Informationen wie TDP ehält, sodass Sie die Feinabstimmung für verschiedene Plattformen vornehmen können. Hier ist die neueste Version des GPU-Detect Beispiels.

In diesem Asset ziehen wir die Daten aus dem Beispiel und zeigen sie in UI-Elementen in Unity.

Batterie und Bildratenspannung

Während wir nützliche Informationen identifizieren, ziehen wir auch einige Mobilitätsmetriken und zeigen sie in Unity über die Elemente der Benutzeroberfläche (UI). Die Mobilitätsmetriken liefern Informationen über die Batterielebensdauer und Betriebsarten. Sie können diese Informationen verwenden, um die Bildrate auf so etwas wie 30 festzuklemmen, wenn der Benutzer das System vom Netz getrennt hat. Die Bildrate festzuklemmen, unter der Annahme, dass die Bildrate zu diesem Zeitpunkt höher ist, kann helfen, die Batterielaufzeit zu verlängern. Sie können die folgenden Codezeilen in Ihr Unity-Skript setzen, um die Framerate auf 30 zu klemmen.

Application.targetFramerate = 30;
QualitySettings.vSyncCount = 2;

Verwenden der Windows-Bildschirmtastatur mit Unity

Ihre eigene Bildschirmtastatur zu schreiben, kann eine echte Qual sein, vor allem, wenn Sie erfordern, dass sie lokalisiert wird, und  Microsoft hat bereits eine erstellt, so mussten wir nur noch herausfinden, wie wir ein gutes Zusammenspiel mit der Unity-Engine erreichen. Um sie in Unity zu nutzen, müssen Sie Ihr Unity-Fenster zwingen im randloses Fenster-Modus zu erscheinen. Es wird nicht im Vollbildmodus funktionieren. Sie können die verschiedenen Tastaturen mit einem einfachen Funktionsaufruf, der im Beispiel bereitgestellt ist (.dll Teil) starten oder darstellen. Müssen Sie auch einen Weg finden, um den Status der Tastatur auf dem Bildschirm zu erkennen (wird sie aktuell auf dem Bildschirm angezeigt oder ist sie ausgeblendet?). Wir haben einen Anruf im Beispiel, der Ihnen zeigt, wie das geht, aber es ist auskommentiert (siehe unten).

__declspec(dllexport) BOOL __cdecl IsVirtualKeyboardVisible()
{
	BOOL	bRet = FALSE;
	RECT	InputPaneScreenLocation = { 0, 0, 0, 0 };
	/*
	__try
	{
		HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

		IFrameworkInputPane *IinputPane = NULL;

		if (SUCCEEDED(hr))
		{
			//
			// http://msdn.microsoft.com/en-us/library/windows/desktop/hh706967(v=vs.85).aspx
			//
			hr = CoCreateInstance(__uuidof(FrameworkInputPane), 0, CLSCTX_ALL, __uuidof(IFrameworkInputPane), (LPVOID*)&IinputPane);
			IinputPane->Location(&InputPaneScreenLocation);

			if (InputPaneScreenLocation.bottom == 0 && InputPaneScreenLocation.left == 0 &&
				InputPaneScreenLocation.right == 0 && InputPaneScreenLocation.top == 0)
			{
				// VKB is not visible
				bRet = FALSE;
			}
			else
			{
				// VKB is visible
				bRet = TRUE;
			}
		}

	}	// try
	__finally
	{
		CoUninitialize();
	}
	*/
	return bRet;
}

Wir hoffen, dass Sie diese Codebeispiele nützlich finden. Wählen Sie aus was für Ihr Projekt funktioniert.

Über den Autor

Jeff LaFlam hat in den letzten 8 Jahren in der Optimierung von Videospielen für Intel® Hardware gearbeitet. Er hat bei mehreren Spiele-Entwickler in den USA gearbeitet. Er mag auch gerne die Gestaltung, Erstellung, und Spielen in der Freizeit.

 

Dieser Beispiel-Quellcode wird unter der Intel Beispielquellcode Lizenzvereinbarung veröffentlicht.

  • unity
  • Unity Asset.
  • Intel Toolkit
  • game development
  • GameDev
  • Code sample
  • detect gpu
  • battery mode
  • windows on-screen keyboard
  • 开发人员
  • 游戏开发
  • Unity
  • 入门级
  • 中级
  • 游戏开发
  • 笔记本电脑
  • 平板电脑
  • 桌面
  • URL
  • 游戏开发

  • Viewing all articles
    Browse latest Browse all 500

    Trending Articles



    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>