1

アンリアル初心者です。私は研究プロジェクトに参加しており、進行するにつれてエンジンをよりよく学ぼうとしていますが、かなり長い間行き詰まっていることがあります。GetGrids.h ファイルで宣言されたプライベート関数があります。.cpp ファイルで呼び出そうとしていますが、コントロールがその関数に入ることはありません。まったくヒットしない関数にブレークポイントを設定しました。Visual Studio を再起動してソリューションを再構築しようとしましたが、何も機能していないようです。

#include "RoboRev_Win.h"
#include "MapsManager.h"

AMapsManager::AMapsManager(const FObjectInitializer& ObjectInitializer)
    :Super(ObjectInitializer)
{
    m_row = MAP_SIZE;
    m_column = MAP_SIZE;
    m_startPoint = FVector(0, 0, 90);
    m_IsMapCreated = false;
    PrimaryActorTick.bStartWithTickEnabled = true;
}

void AMapsManager::Tick(float DeltaSeconds)
{
    Super::Tick(DeltaSeconds);
    if (!m_IsMapCreated)
        CreateMap();
}

AGrid* AMapsManager::GetGridWithID(int _ID)
{
    for (int i = 1; i <= GRID_SIZE*GRID_SIZE; i++)
    {
        AGrid *_Grid = m_Grids[i];
        if (_Grid->ID == _ID)
        {
            return _Grid;
        }
    }
    return NULL;
}

void AMapsManager::GetGrids()
{
    int a, b, c;
    a = 1;
    b = 2;
    c = 3;
    int sum;
    sum = a + b + c;
    printf("");
    printf("");
}

void AMapsManager::CreateMap()
{
    UWorld* const _World = GetWorld();
    if (_World)
    {
        m_IsMapCreated = true;

        FActorSpawnParameters _Parameters;
        _Parameters.Owner = this;
        _Parameters.Instigator = Instigator;

        FVector _SpawnPosition;

        FRotator _Rotator(0, 0, 0);

        _SpawnPosition = FVector(0, 0, 0);

        originalX = _SpawnPosition.X - ((MAP_SIZE / 2)*GRID_SIZE);
        _SpawnPosition.X = originalX;
        _SpawnPosition.Y = originalX;

        _CurrentID = 1;
        for (int i = 1; i <= m_row; i++)
        {
            for (int j = 1; j <= m_column; j++)
            {
                AGrid *_Grid = static_cast<AGrid *>(_World->SpawnActor(m_GridPawn, &_SpawnPosition, &_Rotator, _Parameters));
                _Grid->ID = _CurrentID;
                m_Grids.push_back(_Grid);
                _SpawnPosition.X += GRID_SIZE;
                _CurrentID++;
            }
            _SpawnPosition.Y += GRID_SIZE;
            _SpawnPosition.X = originalX;
        }
    }
    int _MapIDs[] = { 1, 2, 3, 4, 5, 10, 15, 20, 25 };
    int k = 9;
    for (int l = 0; l < k; l++)
    {
        //AGrid *_Grid = GetGridWithID(_MapIDs[l]);
        //_Grid->ChangeMaterial();
        this->GetGrids();
    }
}

関数が何をしているのか気にしないでください。あくまでもテスト機能です。

これは.hファイルの宣言です

private:
       void GetGrids();

助けてください!

4

1 に答える 1

2

Visual Studio コンパイラは、関数のコードと呼び出しをかなり積極的に最適化するように構成されています。GetGrids() メソッドは実行中のプログラムに影響を与えないため、コンパイラは呼び出しを完全に削除するか、印刷などをインライン化します。ブレークポイントを使用してデバッグする場合でも、コンパイラが最適化して取り除いたメソッドにジャンプすることはできません。

実行中のエンジンで確認できるように、関数に次のようなものを追加してみてください。

UE_LOG(LogExec, Warning, TEXT("GetGrids() was called."));
于 2015-03-10T08:44:22.237 に答える