アンリアル エンジン 3.5 に基づいた「Outlast」というゲームをしばらくの間改造してきましたが、アンリアル スクリプトが C++ に基づいているため、C++ に関連する問題が発生しています。
文字列とブール値を必要とするゲーム内の既存の関数を呼び出しています。これがその関数です。
event StartNewGameAtCheckpoint(string CheckpointStr, bool bSaveToDisk){
local OLCheckpoint CheckCP, startCP;
local OLHero Hero;
local OLGame CurrentGame;
local OLEngine Engine;
// End:0x33
if(CheckpointStr == "KillHero") >>> this if is new code that I added myself
{
NumBatteries = 86;
NotifyDifficultyChanged();
return;
} ... more irrelevant code comes after this > }
ここでその関数を呼び出しています(2つの方法が可能です):
Method A:
class'OLGFxMoviePlayer'.static.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
Method B:
Outer.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
この時点で私が抱えている奇妙な問題が 1 つあります。"KillHero" 文字列が何らかの理由 (両方の方法) でその関数に到達していないため、"CheckpointStr" が "KillHero" ではないため、if ステートメントが失敗します。 !
GetOLPC がどこから来ているのか疑問に思っている人にとっては、それは現在の playercontroller を取得することであり、その関数は次のようになります:
function OLPlayerController GetOLPC(){
return OLPlayerController(GetPC());
//return ReturnValue;
}
そして、この関数を介して、「StartNewGameAtCheckpoint」を保持するクラス「OLPlayerController」にアクセスできます。
numbatteries を配置し、notifydifficultychanged が正常に動作するかどうかの外にある場合、それが if であることはわかっています。
ゲームがこれを行っている他の場所と同様に、技術的には機能するはずです。
Outer.consolecommand("camera freecam");
これも内部で文字列を使用しますが、これは正常に機能します。
誰が何が悪いのか知っていますか?
ありがとう