UE4 C++ Puzzle 模版学习和分析

UE4 version: 4.17

1. 核心C++类

PuzzleBlock: 用于交互的一个个小立方块,它包含了两类事件操作:鼠标从上面划过,鼠标单击事件。
- Puzzle: 工程模块生成类,用于生成dll
- PuzzleGameMode:设置游戏运行模式,初始化游戏中的Pawn、Controller对象

     APuzzleGameMode::APuzzleGameMode()
     {
        // no pawn by default
        DefaultPawnClass = APuzzlePawn::StaticClass();
        // use our own player controller class
        PlayerControllerClass = APuzzlePlayerController::StaticClass();
     }
  • PuzzlePawn:游戏的虚拟玩家,主要提供以下接口:

    public:
        virtual void Tick(float DeltaSeconds) override;
        virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
        virtual void CalcCamera(float DeltaTime, struct FMinimalViewInfo& OutResult) override;
    protected:
        void OnResetVR();
        void TriggerClick();
        void TraceForBlock(const FVector& Start, const FVector& End, bool bDrawDebugHelpers);  
    
  • PuzzleBlockGrid: 网格类,作为游戏的框架部分,提供必要模块的初始化工作,并记录分数。它有一部分创建PuzzlePawn的代码中,计算行数和列数(通过除法和求余实现)写的比较精辟,在此分析下:

    void APuzzleBlockGrid::BeginPlay()
    {

    Super::BeginPlay();
    
    // Number of blocks
    // Size = 3;
    // BlockSpacing = 300.f;
    const int32 NumBlocks = Size * Size; // 定义网格大小
    
    // Loop to spawn each block
    for(int32 BlockIndex=0; BlockIndex<NumBlocks; BlockIndex++)
    {
        const float XOffset = (BlockIndex/Size) * BlockSpacing; // Divide by dimension 通过除法计算行数
        const float YOffset = (BlockIndex%Size) * BlockSpacing; // Modulo gives remainder 通过求余计算列数
    
        // Make position vector, offset from Grid location
        const FVector BlockLocation = FVector(XOffset, YOffset, 0.f) + GetActorLocation();
    
        // Spawn a block
        APuzzleBlock* NewBlock = GetWorld()->SpawnActor<APuzzleBlock>(BlockLocation, FRotator(0,0,0));
    
        // Tell the block about its owner
        if (NewBlock != nullptr)
        {
            NewBlock->OwningGrid = this;
        }
    }
    

    }

  • PuzzleController: 玩家控制器类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值