请问为何我在FSGameMode里面调用不到FSCharacter呢?

该主题包含 10 个回复,有 2 个参与人,并且由 11 11 的头像 11, 111 年 前 最后一次更新。

正在查看 10 个帖子 - 1 至 10 (共计 11 条)
  • 作者
    帖子
  • #23902
    11 11 的头像
    11, 11
    学员
    注册日期: 2015/10/28
    发帖数: 23
    回帖数: 31

    我用的是4.9.0版本,买了风之神韵的教程看了后,我仿造课程讲解新建了一个空白场景,然后在编辑器中建立了一个简单的地图FS_01,添加了名为FSGameMode的C++类,为了证实FSGameMode被调用了,写了如下语句,确实被执行了。
    void AFSGameMode::BeginPlay()
    {
    if (GEngine)
    GEngine->AddOnScreenDebugMessage(-1, 20.f, FColor::Magenta, TEXT(“FSGameMode加载”));
    }
    然后我又添加了名为FSCharacter的C++类,同样写了一个BeginPlay()的函数来证实FSCharacter是否被调用。此时运行,发现FSCharacter没有被调用,因为FSGameMode没用调用到FSCharacter。
    void AFSCharacter::BeginPlay()
    {
    if (GEngine)
    GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::Blue, TEXT(“FSCharacter加载”));

    }
    在FSGameMode中写入如下代码,
    AFSGameMode::AFSGameMode()
    :Super()
    {
    DefaultPawnClass = AFSCharacter::StaticClass();
    }
    结果FSGameMode还是没有调用FSCharacter,请问什么原因呢?

    上传附件/图片:
    您必须登陆才能查看附件
    #23972
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 361
     Code: arbitrary (选择
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.

    UCLASS()
    class VRS_API AVRSGameMode : public AGameMode
    {
      GENERATED_BODY()
      
    public:
      AVRSGameMode(const FObjectInitializer& ObjectInitializer);
      virtual void BeginPlay() override;
    }

    #23973
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 361
     Code: arbitrary (选择
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.

    AVRSGameMode::AVRSGameMode(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
    {
      GVRSGameMode = this;

      PlayerControllerClass = AVRSPlayerController::StaticClass();
      HUDClass = AVRSHUD::StaticClass();
      DefaultPawnClass = AVRSPawn::StaticClass();
    }

    #23974
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 361

    加上 const FObjectInitializer& ObjectInitializer 这个参数试试

    #23975
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 361

    另外 virtual void BeginPlay() override; 一定要加override

    #24153
    11 11 的头像
    11, 11
    学员
    注册日期: 2015/10/28
    发帖数: 23
    回帖数: 31

    谢谢风神解答。加上 const FObjectInitializer& ObjectInitializer 这个参数还是不行,我看了4.9.0的例子,官方没有用这个参数,难道是新版不需要了?override肯定加上了啊。

    #24154
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 361

    有两种开头,GENERATED_BODY 和 GENERATED_CLASS_BODY
    头一种不需要这个参数,这是新版和旧版区别。

    你看下你的场景里是不是有其他Pawn默认使用了Auto posscess。

    再调试下DefaultPawnClass 被调用的地方,也就是创建Spawn的地方。看是不是你的PawnClass。

    #24169
    11 11 的头像
    11, 11
    学员
    注册日期: 2015/10/28
    发帖数: 23
    回帖数: 31

    我的4.9.0是GENERATED_BODY,不需要参数,刚刚又用我的那个写法试了下,启动编辑器以后,在“播放“中选择”模拟“,那么运行起来调用不到FSCharacter,而选择”播放“中”独立游戏“就有了FSGameMode和FSCharacter,请问为何模拟的时候调用不到FSCharacter呢?
    还有个问题,场景里面阳光照耀下墙体投射在地面上的阴影边缘为何是不规则的呢?如图

    上传附件/图片:
    您必须登陆才能查看附件
    #24171
    11 11 的头像
    11, 11
    学员
    注册日期: 2015/10/28
    发帖数: 23
    回帖数: 31

    选择”播放“中”独立游戏“就有了FSGameMode和FSCharacter

    上传附件/图片:
    您必须登陆才能查看附件
    #24229
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 361

    阴影分辨率太低。LightMap调高,在模型查看里,右边

正在查看 10 个帖子 - 1 至 10 (共计 11 条)

抱歉,回复评论必需登录。