Integracije za igre/aplikacije
Dodavanje SignalRGB podrške u vašu aplikaciju ili igru je brzo i jednostavno. Ako vaš projekat može slati HTTP POST zahteve, može koristiti širok spektar kompatibilnih uređaja SignalRGBa.
Postoje dva glavna načina na koje vaša aplikacija ili igra može biti integrisana sa SignalRGB: aktiviranje već postojećih efekata ili komunikacija sa posebno razvijenim prilagođenim efektom. Prva opcija zahteva znatno manje razvojnog napora, ali je ograničena na našu biblioteku unapred kreiranih efekata. Drugi pristup može zahtevati više vremena, ali otvara beskonačne mogućnosti u pogledu vrste i broja efekata koji se mogu kreirati.
Na kraju, kao programer, na vama je da odlučite koji pristup je najprikladniji za vaš projekat. Obe metode, međutim, mogu pružiti fantastična iskustva osvetljenja.
Biblioteka efekata za igre
Section titled “Biblioteka efekata za igre”Ako ne želite da razvijate sopstvene efekte osvetljenja, možete koristiti našu opsežnu biblioteku unapred kreiranih efekata. Putem URL-ova SignalRGB aplikacije možete lako instalirati i aktivirati bilo koji javni efekat osvetljenja dostupan za preuzimanje na SignalRGBu.
Preporučuje se da unapred instalirate efekte osvetljenja koje vaša aplikacija ili igra treba da aktivira pri prvom pokretanju, tako da svi efekti mogu biti brzo aktivirani.
Sledeće API rute su dostupne za to:
| URI zahteva | Svrha |
|---|---|
| signalrgb://effect/install/EffectName | Instalira efekat osvetljenja sa imenom EffectName |
| signalrgb://effect/apply/EffectName | Aktivira efekat osvetljenja sa imenom EffectName |
Ako izabrani engine ili jezik ne može da komunicira sa prilagođenim URL protokol handlerima, ovaj deo SignalRGB API-ja se i dalje može koristiti. Da biste to uradili, jednostavno pokrenite izvršnu datoteku SignalRgbLauncher.exe u direktorijumu C:\Users\<username>\AppData\Local\VortxEngine sa argumentom --url na putanju željene API rute. Da biste sprečili da aplikacija dođe u prednji plan, može se dodati ?-silentlaunch-.
Na primer, da biste instalirali efekat pod nazivom Azure, izvršna datoteka se pokreće sa sledećim argumentom:
SignalRgbLauncher.exe --url=effect/apply/Azure?-silentlaunch-
Unity
Unreal Engine
Section titled “Unreal Engine”Sledeća C++ klasa može se koristiti sa Unreal Engine-om za instaliranje i aktiviranje bilo kog SignalRGB efekta.
#include "SignalEffectApi.h"
void SignalEffectApi::ApplyEffect(const std::string& effect) { const TCHAR* appdataPath = FPlatformProcess::UserSettingsDir(); const FString exePath = FString(appdataPath) + TEXT("\\VortxEngine\\SignalRgbLauncher.exe"); const FString params = TEXT("--url=effect/apply/") + FString(effect.c_str()) + TEXT("?-silentlaunch-"); FPlatformProcess::CreateProc(*exePath, *params, true, false, false, nullptr, 0, nullptr, nullptr);}
void SignalEffectApi::InstallEffect(const std::string& effect) { const TCHAR* appdataPath = FPlatformProcess::UserSettingsDir(); const FString exePath = FString(appdataPath) + TEXT("\\VortxEngine\\SignalRgbLauncher.exe"); const FString params = TEXT("--url=effect/install/") + FString(effect.c_str()) + TEXT("?-silentlaunch-"); FPlatformProcess::CreateProc(*exePath, *params, true, false, false, nullptr, 0, nullptr, nullptr);}#pragma once
#include "CoreMinimal.h"
class SignalEffectApi{public: void ApplyEffect(const std::string& effect); void InstallEffect(const std::string& effect);};Preporučuje se instaliranje svih efekata koji će se koristiti pri pokretanju aplikacije, tako da se mogu brzo aktivirati.
Sledeći primer pokazuje kako se efekat može instalirati i aktivirati koristeći klasu SignalEffectApi.
#include "SignalEffectApi.h"
... // Effekt-API initialisieren. SignalEffectApi srgbEffect;
// Name des zu installierenden Effekts festlegen. std::string effectName = "Azure";
// Effekt installieren. srgbEffect.InstallEffect(effectName);
// Effekt anwenden. srgbEffect.ApplyEffect(effectName);
...Prilagođeni efekti
Direktna komunikacija sa SignalRGBom putem HTTP zahteva je jednostavna za implementaciju kada je poznata struktura zahteva. Struktura zahteva je sledeća:
Tip zahteva: POST
URI zahteva: http://localhost:16034/canvas/event?sender=your-app-name&event=your-event
Svi zahtevi koje šalje aplikacija treba da koriste istu promenljivu sender. Promenljiva event sadrži podatke koji se prenose SignalRGBu.
U efektu, svi podaci se šalju putem funkcije onCanvasApiEvent. Ova funkcija se koristi za kontrolu načina na koji efekat reaguje na HTTP zahteve.
Primer koda
Section titled “Primer koda”Ovaj jednostavni primer pokazuje kako Unity ili Unreal Engine igra može komunicirati sa SignalRGBom za aktiviranje događaja u prilagođenom efektu osvetljenja. Međutim, svaka metoda za slanje HTTP zahteva može se koristiti za kontrolu prilagođenog efekta osvetljenja. Ova fleksibilnost znači da se SignalRGB podrška može dodati gotovo svakoj igri ili aplikaciji.
Efekat osvetljenja
Section titled “Efekat osvetljenja”Svi događaji poslati na API rutu prosleđuju se efektu osvetljenja putem funkcije onCanvasApiEvent. Postoje mnogi načini za upravljanje događajima, ali sledeći primer je jednostavan i lak za razumevanje. Ko razvija nešto složenije sa više događaja, trebalo bi da razmotri metodu State Handler za praćenje događaja i njihovih odgovarajućih efekata osvetljenja.
<head> <title>CustomApiEffect</title> <meta description="Effect description goes here." /> <meta publisher="Your Name Here" /></head>
<body style="margin: 0; padding: 0;"> <canvas id="exCanvas" width="320" height="200"></canvas></body>
<script> var c = document.getElementById("exCanvas"); var ctx = c.getContext("2d"); var width = 320; var height = 200;
var activeEvent = ""; // Variable zum Speichern des zuletzt empfangenen Ereignisses
function onCanvasApiEvent(apiEvent) { if (apiEvent["sender"] == "apiTestApp") { // Nur auf API-Ereignisse mit dem Sender "apiTestApp" reagieren. Dies sollte auf den eigenen Sender-String geändert werden. activeEvent = apiEvent["event"]; // Die activeEvent-Variable auf die zuletzt empfangenen API-Ereignisdaten setzen. } }
function update() { if (activeEvent == "allRed") { // Canvas bei einem allRed-Ereignis komplett rot färben ctx.fillStyle = '#FF0000'; ctx.fillRect(0, 0, width, height); } else { // Andernfalls Canvas schwarz färben ctx.fillStyle = '#000000'; ctx.fillRect(0, 0, width, height); }
window.requestAnimationFrame(update); }
window.requestAnimationFrame(update);</script>Funkcija poput sledeće omogućava Unityu da komunicira sa SignalRGBom. Međutim, svaka metoda za slanje HTTP POST zahteva može se koristiti.
using UnityEngine;using UnityEngine.Networking;using System.Collections;using System.Collections.Generic;
public class SendAllRedEventBehavior : MonoBehaviour{ void Start() { StartCoroutine(Upload()); }
IEnumerator Upload() { UnityWebRequest www = UnityWebRequest.Post("http://localhost:16034/canvas/event?sender=apiTestApp&event=allRed"); yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success) { Debug.Log(www.error); } else { Debug.Log("Sent lighting event to SignalRGB!"); } }}Unreal Engine
Section titled “Unreal Engine”Sledeća C++ klasa može se koristiti sa Unreal Engine-om za omogućavanje komunikacije putem SignalRGB API-ja. Uverite se da parametar sender URI zahteva odgovara onom koji koristi Lightscript.
#include "SignalApi.h"
void SignalApi::SendEvent(const std::string& sender, const std::string& event) { Http = &FHttpModule::Get(); TSharedRef<IHttpRequest> Request = Http->CreateRequest(); std::string requestUri = "http://localhost:16034/canvas/event?sender="+ sender + "&event=" + event; Request->SetURL(requestUri.c_str()); Request->SetVerb("GET"); Request->SetHeader(TEXT("User-Agent"), "X-UnrealEngine-Agent"); Request->SetHeader("Content-Type", TEXT("application/json")); Request->ProcessRequest();}#pragma once
#include "CoreMinimal.h"#include "Runtime/Online/HTTP/Public/Http.h"
class SignalApi{public: FHttpModule* Http; void SendEvent(const std::string& sender,const std::string& event);};Da biste aktivirali efekat osvetljenja u kodu igre, jednostavno pozovite funkciju SendEvent sa imenom željenog događaja kao i imenom kojim se aplikacija ili igra identifikuje kod SignalRGBa.
#include "SignalApi.h"
... // Sender-Variable festlegen. const std::string SAPI_APPNAME = "apiTestGame"; // SignalApi-Klasse initialisieren. SignalApi sapi; // Namen des Ereignisses festlegen. std::string eventName = "weaponFired"; // API-Ereignis an SignalRGB senden. sapi.SendEvent(SAPI_APPNAME, eventName);
...using UnrealBuildTool;
public class SignalApiTest : ModuleRules{ public SignalApiTest(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "EnhancedInput", "Http" }); // Http MORA biti dodat ovom nizu, inače će izgradnja propasti! }}