Closed usagi closed 6 years ago
UE4のJSONシリアライザーはライブラリーの完成度、高レベルAPIやFVectorはじめ多用されるUE4型への対応がいまひとつ未完成かつ侵入型でCPPにより実装されおり、G4では対応コストが嵩む。そこで G3 でも実績のある cereal を用いて必要に応じて FVector 等には非侵入型のしリアライザーを追加して採用する方針を決めた。
UE4/INI ベースのコンフィグレーションの暫定仕様から完全に cereal ベースの JSON コンフィグレーションへ移行、動作確認を完了した。
新しい JSON コンフィグレーションのパスは G4/G4Configuration.json とした。シングルファイルで次のような構造の JSON とした。
{
"G4Configuration": {
"cereal_class_version": 1,
"Planet": {
"cereal_class_version": 1,
"level_of_detail_min": 0,
"level_of_detail_max": 13,
"adjacency_cell_distance": 2,
"pmc_pool_initial_count": 1024,
"material_tile_services_JSON_path": "tile_service/material",
"altitude_tile_services_JSON_path": "tile_service/altitude",
"default_zero_wireframe_visibility": true,
"default_terrain_wireframe_visibility": true,
"default_zero_wireframe_color": {
"R": 0.0,
"G": 0.0,
"B": 1.0,
"A": 0.5
},
"default_terrain_wireframe_color": {
"R": 0.0,
"G": 0.10000000149011612,
"B": 0.0,
"A": 0.5
},
"datetime_tick_factor": 1.0,
"datetime": "2018-03-30T14:16:32.921Z",
"adjust_date_time_at_start": true
},
"Camera": {
"cereal_class_version": 1,
"initial_lonlat": {
"X": 141.31610107421876,
"Y": 43.04843521118164
},
"save_final_state": true,
"target_moving_velocity_effect_altitude": true,
"target_moving_velocity_effect_fovy": true,
"target_moving_base_velocity_in_degrees_per_sec": 0.00027777778450399637,
"target_altitude_mode": 0,
"target_altitude_value": 0.0,
"eye_distance_in_meter": 472.45068359375,
"eye_pitch": -25.261877059936525,
"eye_yaw": 0.0,
"pointing_device_control_assignment_left_button": 1,
"pointing_device_control_assignment_right_button": 2,
"pointing_device_control_assignment_middle_button": 0,
"pointing_device_control_assignment_thumb1_button": 0,
"pointing_device_control_assignment_thumb2_button": 0,
"pointing_device_control_assignment_wheel": 2
},
"Chat": {
"cereal_class_version": 1,
"auto_save_interval_in_sec": 5.0,
"max_count": 1024,
"max_past": "+28.00:00:00.000",
"body_max_characters": 512,
"target_max_characters": 32,
"to_max_count": 32,
"auto_export": true,
"auto_import": true
},
"AI": {
"cereal_class_version": 1,
"input_mode": 0,
"acceptable_score": 0.4000000059604645,
"name": "G4AI"
}
}
}
同時に開発環境におけるコンフィグレーションの読み込みの制御を器用に行いやすく実装したのでコンフィグレーションを変化させながら何度も試験を繰り返す必要のある開発の効率が上がるなどの嬉しいおまけ作用もある。すばらしい。
G4 のシステムコンフィグレーションについて現在の実装では内部的に UE4 の API を通じて "Game.ini" ファイルを用いて扱っている。
しかし、この方式では次の問題群が生じている:
そこで、次のような G4 独自のコンフィグレーションファイルの仕組みへ移行したい:
{ }
内に"include"
キーが存在すればそのファイルのディレクトリー"以下"のパスから JSON を読み出して元の{ }
を置き換える、など。