我一直在修改这个名为“Outlast”的游戏,它基于虚幻引擎 3.5 有一段时间了,我遇到了一个与 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 > }
我在这里调用该函数(可能有两种方式):
Method A:
class'OLGFxMoviePlayer'.static.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
Method B:
Outer.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
此时我遇到了一个奇怪的问题,“KillHero”字符串由于某种原因(两种方法)没有进入该函数,所以 if 语句将失败,因为“CheckpointStr”根本不是“KillHero” !
对于任何想知道 GetOLPC 来自哪里的人来说,它是获取当前的播放器控制器,该函数如下所示:
function OLPlayerController GetOLPC(){
return OLPlayerController(GetPC());
//return ReturnValue;
}
通过此函数,您可以访问包含“StartNewGameAtCheckpoint”的类“OLPlayerController”
我知道这是 if,因为如果我将 numbatteries 和 notifydifficultychanged 放在 if 之外,它可以正常工作。
从技术上讲,它应该像游戏正在执行的其他地方一样工作:
Outer.consolecommand("camera freecam");
它也在里面使用了一个字符串,但这很好用。
有谁知道出了什么问题?
谢谢