【问题标题】:Create and change game State in runtime在运行时创建和更改游戏状态
【发布时间】:2017-06-22 10:51:39
【问题描述】:

我正在努力解决标题中提到的问题。现在我在构造函数中设置默认值,然后我想用我的函数更改它,但它似乎不起作用。

 void AMyGameModeBase::SwapGameState(AGameStateBase* GameStateVariable)
    {
        GameStateClass = GameStateVariable->StaticClass();
    }

我怎样才能正确地做到这一点?好的解释会很棒:)

编辑:

这是我的全部代码: MyGameModeBase.h

#pragma once

#include "GameFramework/GameMode.h"
#include "MyGameModeBase.generated.h"

/**
 * 
 */
UCLASS()
class PROJECT_API AMyGameModeBase : public AGameMode
{
    GENERATED_BODY()

public:

    AMyGameModeBase();

    UFUNCTION(BlueprintCallable, Category="GameState")
    void SwapGameState(AGameStateBase* GameStateVariable);
};

MyGameModeBase.cpp

#include "Project.h"
#include "MyGameModeBase.h"


AMyGameModeBase::AMyGameModeBase()
{
    GameStateClass = AGameStateBase::StaticClass();
}


void AMyGameModeBase::SwapGameState(AGameStateBase* GameStateVariable)
{
    GameStateClass = GameStateVariable->StaticClass();
}

然后我正在做的是: 1.打开GameMode蓝图 2.从Event中拖拽开始播放并调用SwapGameState 3.我正在创建引用 MyGameState 的变量。 4.然后我使用节点“GetGameState”得到的打印字符串名称进行打印,并看到它没有改变。

我想要实现的是: 1.运行时创建GameState 2.在运行时也将其设置为使用的默认游戏状态。

【问题讨论】:

  • 您遇到了什么错误?你的确切问题是什么?所有这些类型的定义以及这些变量和函数的声明是什么?请提供Minimal, Complete, and Verifiable example 并更彻底地说明您的情况。
  • 我已经编辑了我的问题。没有错误,只是无法正常工作。
  • GameState 用于将信息从服务器传送到任何连接的客户端。您为什么要尝试将 GameState 设置为其他内容?
  • 我正在将它们换成其他平台。它们有一些碰撞功能,所以我选择了不止一个,我需要根据平台交换它们;)

标签: c++ unreal-engine4


【解决方案1】:

StaticClass 函数是一个静态函数,您可以像这样调用MyStateClass::StaticClass()

你想要的是这个

void AMyGameModeBase::SwapGameState(AGameStateBase* GameStateVariable)
{
    GameStateClass = GameStateVariable->GetClass();
}

【讨论】:

  • 由于某种原因,在实施此操作后,我得到访问冲突错误:在 UE4Editor.exe 中的 0x00007FFEBE7D2CDF (UE4Editor-Project.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x0000000000000010。发生
  • 您传递的变量可能为空,如果您需要更多帮助,您必须显示更多代码
  • 没有更多代码了。仅传入 GameState 引用。所以我想是这样的
  • 你传递什么值来交换游戏状态?在您的回购步骤中,您似乎没有将任何东西连接到参数引脚
  • 几乎任何时候你取消引用一个指针,你首先要确定指针指向有效的内存。在上面的例子中,GameStateClass = GameStateVariable ? GameStateVariable->GetClass() : nullptr;会更安全。如果 GameStateVariable 指向一个有效的对象,GameStateClass 将被设置为 GetClass() 返回的值,但如果不是,GameStateClass 将被设置为 nullptr。
猜你喜欢
  • 2021-05-17
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多