Unreal
Ukurasa huu umetafsiriwa kutoka Kiingereza. Ikiwa hizi mbili zinatofautiana, ukurasa wa Kiingereza ndio sahihi. Soma ukurasa wa Kiingereza
Programu-jalizi ya Lingara ya Unreal Engine 5 ni game-instance subsystem juu ya kiolesura cha C cha kiini cha mchezaji. Huendeshwa kwenye mifumo mitano ambayo vifurushi vya mchezaji vinaiunga mkono: Windows, macOS, Linux, Android na iOS. Konsoli za michezo bado hazitumiki.
Sakinisha programu-jalizi
Kila toleo hubeba zip ya programu-jalizi kwa kila toleo la injini linalotumika, yenye jina LingaraEmbed-<semver>-UE5.<m>.zip. Fungua zip ya injini yako ndani ya folda ya Plugins/ ya mradi wako, kisha wezesha programu-jalizi kwenye kihariri. Hakuna kingine cha kusakinisha.
Pata tokeni kutoka kwa seva yako
Programu-jalizi haishikilii siri kamwe. Inapohitaji tokeni, hutangaza OnTokenNeeded. Ijibu kwa kutuma kwa njia ya tokeni (token route) ya seva yako mwenyewe, ambayo hutengeneza tokeni kwa kifurushi cha seva na kujibu kwa tokeni na muda wake wa kuisha, kisha mkabidhi ProvideToken vyote viwili. Ikiwa seva yako haiwezi kujibu, ita TokenUnavailable ili miito inayosubiri tokeni ishindwe mara moja badala ya kuisha muda.
Unganisha matukio unayotumia
Kiini huendesha I/O yake ya mtandao kwenye thread yake yenyewe. Subsystem huimaliza kutoka kwa tick yake yenyewe, hadi matukio MaxEventsPerTick kwa fremu (mpangilio wa mradi), na hutangaza kila moja kwenye delegate. Unganisha delegates ambazo mchezo wako unahitaji uchezaji unapoanza, kisha anzisha subsystem:
OnTokenNeeded, tokeni inapohitajika;OnNpcTurn, kwa kila kipande cha jibu linalotiririshwa (tazama mazungumzo ya NPC);OnPractice, kwa kila sasisho la mazoezi (tazama matokeo ya mazoezi);OnError, mwito unaposhindwa.
Unreal C++
// Your own server mints the token: never put a client secret in a game.
void ALingaraEmbedSnippetActor::HandleTokenNeeded(const FLingaraTokenNeeded& Event)
{
const TSharedRef<IHttpRequest, ESPMode::ThreadSafe> Request = FHttpModule::Get().CreateRequest();
Request->SetVerb(TEXT("POST"));
Request->SetURL(TokenUrl);
Request->SetHeader(TEXT("Content-Type"), TEXT("application/json"));
Request->SetContentAsString(TEXT("{}"));
Request->OnProcessRequestComplete().BindUObject(this, &ALingaraEmbedSnippetActor::HandleTokenResponse);
Request->ProcessRequest();
}
void ALingaraEmbedSnippetActor::HandleTokenResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bConnected)
{
ELingaraCallResult Result;
FLingaraEmbedError Error;
TSharedPtr<FJsonObject> Body;
FString Token;
FString ExpiresAt;
const bool bOk = bConnected && Response.IsValid() && EHttpResponseCodes::IsOk(Response->GetResponseCode())
&& FJsonSerializer::Deserialize(TJsonReaderFactory<TCHAR>::Create(Response->GetContentAsString()), Body)
&& Body->TryGetStringField(TEXT("token"), Token) && Body->TryGetStringField(TEXT("expires_at"), ExpiresAt);
if (bOk)
{
Lingara()->ProvideToken(Token, ExpiresAt, Result, Error);
}
else
{
// Fail the waiting calls now rather than at the core's timeout.
Lingara()->TokenUnavailable(TEXT("the token endpoint failed"), Result, Error);
}
}Unreal C++
// The subsystem drains the core's queue from its own tick (at most
// MaxEventsPerTick a frame, from Project Settings): bind the events you use.
void ALingaraEmbedSnippetActor::BeginPlay()
{
Super::BeginPlay();
ULingaraEmbedSubsystem* Subsystem = Lingara();
Subsystem->OnTokenNeeded.AddDynamic(this, &ALingaraEmbedSnippetActor::HandleTokenNeeded);
Subsystem->OnNpcTurn.AddDynamic(this, &ALingaraEmbedSnippetActor::HandleNpcTurn);
Subsystem->OnPractice.AddDynamic(this, &ALingaraEmbedSnippetActor::HandlePractice);
Subsystem->OnError.AddDynamic(this, &ALingaraEmbedSnippetActor::HandleError);
FLingaraEmbedConfig Config;
Config.MaxEventsPerTick = 256;
ELingaraCallResult Result;
FLingaraEmbedError Error;
Subsystem->Start(Config, Result, Error);
}
void ALingaraEmbedSnippetActor::HandleError(const FLingaraEmbedError& Error)
{
UE_LOG(LogTemp, Warning, TEXT("Lingara %s: %s"), *Error.KindName, *Error.Message);
}