我目前正在尝试遵循本教程,以便在制作我的第一个游戏时取得良好的开端。除了使用我自己的属性名称之外,我完全遵循了上述教程中的所有内容。我的问题是我的角色类中的这段代码没有被调用:
void AGetOutCharacter::BeginPlay()
{
Super::BeginPlay();
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Using GetOutCharacter"));
}
}
Run Code Online (Sandbox Code Playgroud)
就像在教程中一样,我有一个游戏模式类和一个从该类扩展的蓝图。并且该蓝图类在项目设置中设置为默认游戏模式。该游戏模式使用我的角色类蓝图,它是从我的角色类扩展而来的,作为默认的 pawn 类。同样,这是在项目设置中设置的,就像教程中一样。
我可能只是失去了理智,但我一生都无法弄清楚为什么当我在 PIE 中运行游戏时没有显示调试日志。在我的游戏模式类中,有一个与上面的日志相同的日志,该日志在游戏运行时显示,但不是角色类中的日志。我尝试在游戏模式StartPlay()和角色BeginPlay()函数中放置输出到输出日志控制台的日志语句,同样,游戏模式中的日志语句就像一个魅力,但角色类中的日志语句根本不起作用。我还尝试在字符类中调用该AddOnScreenDebugMessage(...)函数的行放置一个断点,但从未到达该断点。我在游戏模式类中的同一位置放置了一个断点,该断点被击中。Reason 告诉我,这意味着游戏使用我的类的方式有问题,但编辑器显示一切正常。
一个特别有趣且令人困惑的交互是,如下所示,没有设置用于控制玩家移动的映射。因此,当我的游戏模式和角色类别设置为默认值时,正如游戏运行时所预期的那样,角色无法移动。但是,当我将默认 pawn 设置为 stock pawn 类时,这种无法移动的情况仍然存在。只有当我删除游戏模式类作为默认游戏模式时,我才能在运行游戏时重新获得在关卡中移动的能力。这表明正在使用字符类,但它的BeginPlay()函数没有被调用。
任何帮助将不胜感激,因为我已经花了几个小时来解决这个问题。谢谢!
作为参考,以下是游戏模式和角色类别:
游戏模式.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GetOutGameModeBase.h"
#include "GetOutGameMode.generated.h"
/**
*
*/
UCLASS()
class GETOUT_API AGetOutGameMode : public AGetOutGameModeBase
{
GENERATED_BODY()
public:
virtual void StartPlay() override;
}; …Run Code Online (Sandbox Code Playgroud)