CharmingCraft: Journey
  • 关于 CharmingCraft
    • 常见问题与解答
  • 游戏内容
    • 种植与收获
    • 物品栏模式
      • 战斗模式
      • 物品模式
      • 建造模式
    • 地牢与副本
      • 固定地牢
      • 自然地牢
      • 多层地牢
      • 地牢结构
    • 物品与技能
      • 物品组件
      • 技能组件
    • 生物和实体
    • 世界与场景
  • 游戏机制
    • 世界保存
    • 地图区块
    • 地图传送
Powered by GitBook
On this page
  • 概述
  • 进入地牢
  • 大厅
  • 地牢层数
  • 离开地牢
  • 模块结构
  • 地牢实例 Dungeon Instance
  • 地牢处理器 Dungeon Handler
  1. 游戏内容
  2. 地牢与副本

地牢结构

概述

进入地牢

大厅

地牢层数

离开地牢

模块结构

地牢实例 Dungeon Instance

DungeonInstance.c
class CHARMINGCRAFT_API ANativeBaseDungeonInstance : public AInfo
{
	GENERATED_BODY()

public:
	UPROPERTY(BlueprintReadWrite, EditAnywhere)
	bool bHasHub = true;
	UPROPERTY(BlueprintReadWrite, EditAnywhere)
	int32 MaxChildDungeonsPerInstance = 1;
	UPROPERTY(BlueprintReadWrite, EditAnywhere)
	bool bLoadDungeonsWorldsByNeed = true; 
	
	// Predefine the map for each child dungeons
	UPROPERTY(BlueprintReadWrite, EditAnywhere)
	TArray<TSoftObjectPtr<UWorld>> ChildDungeonsWorlds;
	// 
	UPROPERTY(BlueprintReadWrite, EditAnywhere)
	TArray<FCharmingCraftWorld> ChildDungeonsWorldsInstance;
	// Define player in which child dungeons, for example, <PlayerA, 3> means
	// PlayerA is in 3rd ChildDungeon;
	UPROPERTY(BlueprintReadWrite, EditAnywhere)
	TMap<ACharacter *, int> DungeonInstancePlayerData;
};

地牢实例包含该地牢的所有层的地图 Uworld 并且在玩家加载地牢时动态地生成在场景中并由DungeonHandler 管理,当玩家退出地牢时该实例会被 DungeonHandler 摧毁.

地牢实例并非指向单一玩家,而是由整个世界管理器和地牢管理器共同管理, 若为团体地牢则多个玩家可以进入同一个地牢实例中

ChildDungeonsWorlds 该数组存储地牢实例的所有地图模板, index 0 指向的是 地牢大厅/准备场所

ChildDungeonsWorldsInstance 该数组存储当前地牢实例加载的世界实例, 地牢加载的世界实例应当与世界管理器中也存在一份引用并且在地牢实例摧毁时也应该在世界管理器中摧毁

DungeonInstancePlayerData 存储玩家当前在这个地牢实例中的探索进度, TMap的第一个元素是玩家对象,第二个元素是当前地牢层数

在最初版本地牢中不提供额外的房间比如说购买或者功能性房间, 要拓展这部分内容需要对玩家在地牢中探索的数据结构进行更换

地牢处理器 Dungeon Handler

DungeonHandler.c
class CHARMINGCRAFT_API UNativeDungeonHandler : public UObject, public ICoreManagerInterface
{
	GENERATED_BODY()

public:
	UPROPERTY(BlueprintReadWrite, VisibleAnywhere)
	TSet<TObjectPtr<ANativeBaseDungeonInstance>> LoadedDungeonInstances;

public:
	UNativeDungeonHandler();

	bool AddInstanceToSet(ANativeBaseDungeonInstance * DungeonInstance);
	

public:
	virtual UCharmingCraftInstance* GetGameInstance_Implementation() override;
};

地牢处理器 存储游戏加载的 地牢实例 ,每当玩家创建新的地牢时地牢处理器会加载地牢实例到 LoadedDungeonInstances 中并通知世界管理器加载当前玩家探索地牢层的世界地图随时准备展示到玩家视野中. 当地牢内所有玩家退出或地牢关闭/失效时, 地牢处理器则会首先通知世界管理器移除该地牢实例所加载的地牢地图并在移除完毕后再移除地牢实例.

Previous多层地牢Next物品与技能

Last updated 1 year ago

Page cover image