Actor Pawns Character
Actor是能放置在UE4游戏世界里面的东西。任何能放置在World里面的东西都必须继承自它。
Pawns指的是可控制物,自然继承自Actor。
Character继承自Pawns,指的是havea mesh, collision, and built-in movement logic的Pawns。
UClass()宏:让你的c++代码可以在Editor里面获得
GENERATED_UCLASS_BODY()宏:让你的c++类可以作为UE4 Editor所需要的类一样工作
GameInstance:
GameInstance是凌驾于GameMode和Levels之上的类。你在场景里面都存不了的东西就放在这里就对了。比如在进入比赛场景之前还有游戏状态,需要把游戏状态相关信息放在GameInstance里面管理。
GameMode:
Eg:AShooterGame_FreeForAll
一个游戏可以有任何数量的游戏类型,因此有任何数量的 “AGameMode” 类的子类;然而,在任何特定时间只可以使用一种游戏类型。每次通过“UGameEngine::LoadMap()” 函数初始化一个游戏等级时都会实例化一个 GameMode Actor。
Pawn和PlayerController,AIController也都是由GameMode负责
加载PersisitentLevel的时候创建GameMode
调用顺序:
UGameInstance::StartPIEGameInstance这种的是在创建play inenditor模式下的实例的时候
…
UWorld::SpawnActor ( GameClass…
AShooterGame_FreeForAll::AShooterGame_FreeForAll
以上是PIE模式的GameMode的创建,并不具有一般性。
一般当你在界面选择创建场景的话,执行流程:
FShooterMainMenu::HostGame –〉UShooterGameInstance::HostGame 需要参数ULocalPlayer* LocalPlayer
在这里根据选项获取StartURL,就是要进入的场景信息,以及GameType比如FFA意思是FreeForAll,
。。。
创建GameSession 其中的bIsLAN参数应该是从settings里面读出来的。(哪个settings?)
-〉FOnlineSessionNull::CreateSession
比如你想通过GameInstance->HostGame执行两次让一个session来创建两个Game那是不行滴。因为session已经创建过了就不能重复创建了。
在创建结束之后的UShooterGameInstance::FinishSessionCreation里面调用UWorld::ServerTravel 进而调用AGameMode::ProcessServerTravel
在这个里面会告诉客户端离开场景ProcessClientTravel
并且World->NextURL=URL这里面NextURL就表示接下来要转移到的场景。
在GameEngin模块里面的WorldList中选取一个FWorldContent并且执行TickWorldTravel(Context, DeltaSeconds);
…
UEngine::LoadMapLoadMap
WorldContext.World()->SetGameMode(URL);
…
在World.cpp中:
AuthorityGameMode = SpawnActor<AGameMode>( GameClass, SpawnInfo );
其中,UWorld类是一种最为顶级的object,代表着一个地图。World类对象也是由GameInstance创建的。
要理解的是,GameMode也是一种AAcotor
GameClass就是代表了你要创建的GameMode类型,是从GlobalDefaultServerGameMode中获得的。
GameMode是不可replicate的,只会存在于服务器,所以它需要一个扩展,这个扩展就是GameState,GameState是可以replicate的。客户端取数据还是需要在<