﻿1
00:00:04,320 --> 00:00:06,060
‫こんにちは､ この講義を歓迎します｡

2
00:00:06,060 --> 00:00:10,950
‫これから､ 出力ログにどのように書き込むか､ 特に変数の値をどのように書き込めば､

3
00:00:10,950 --> 00:00:16,290
‫ゲームのデバッグに役立つかを見ていきます｡

4
00:00:16,290 --> 00:00:18,450
‫さっそく､ この仕組みを見てみましょう｡

5
00:00:19,470 --> 00:00:30,340
‫Blueprintでは､ ある情報を素早く表示したいときや､ 過去のデバッグのために画面に書き込むことができました｡

6
00:00:30,360 --> 00:00:38,820
‫C++ではnewプロパティを使っていましたが､ 実はlogステートメントを使ってこれを行うことができ､ ちょっと複雑で非現実的なので､

7
00:00:38,820 --> 00:00:43,610
‫この時点まで敬遠していました｡

8
00:00:43,620 --> 00:00:47,850
‫そこで､ C++の構文に少し慣れてから紹介することにしました｡

9
00:00:48,180 --> 00:00:56,430
‫さて､ この機能ですが､ 拡張機能として､ capsとcapsによる4つのスニペットをインストールした場合､ 複雑な構文をすべて覚える必要がないため､

10
00:00:56,430 --> 00:01:01,200
‫実際には少し楽になることができます｡

11
00:01:01,200 --> 00:01:07,860
‫このようなインテリセンスのダイアログが表示され､ 「you log」と入力すれば､ コード全体を書き出すことができ､

12
00:01:07,860 --> 00:01:13,590
‫マウスでヒット､ エンター､ 選択することができます｡

13
00:01:13,590 --> 00:01:18,240
‫そして､ これからご覧いただくのは､ ちょっとした関数のようなものが書き出されるところです｡

14
00:01:18,240 --> 00:01:21,120
‫実はボンネットの中の機能ではないんです｡

15
00:01:21,510 --> 00:01:27,660
‫ちょっと非現実的な魔法がかかっていますが､ 基本的には関数と同じようなものです｡

16
00:01:27,660 --> 00:01:33,330
‫これから行うのは､ この関数にいくつかの引数を渡すことです｡

17
00:01:33,330 --> 00:01:40,890
‫1つ目は､ どのようなログカテゴリーなのかを教えてくれるものです｡

18
00:01:40,890 --> 00:01:44,700
‫2つ目は､ ログのレベルを示すものです｡

19
00:01:44,700 --> 00:01:46,860
‫だから､ 本質的にどれだけ緊急性が高いか｡

20
00:01:47,160 --> 00:01:56,790
‫そして最後に､ これは基本的に関数の中の関数で､ プリントアウトするテキストを指示します｡

21
00:01:57,060 --> 00:01:58,980
‫では､ その仕組みはどうなっているのでしょうか｡

22
00:01:58,980 --> 00:02:05,730
‫このコードをそのままにして､ Unrealでコンパイルを実行すると､ どこに表示されるかを見てみましょう｡

23
00:02:05,730 --> 00:02:10,230
‫さて､ コンパイルが終わったら､ さっそくプレイを押してみましょう｡

24
00:02:10,530 --> 00:02:15,480
‫そして､ 実際に探しているものは､ この画面には出てきません｡

25
00:02:15,480 --> 00:02:17,520
‫出力されることになります｡

26
00:02:17,520 --> 00:02:22,630
‫ここでログダウンすると､ ちょうどこのあたりで見ることができます｡

27
00:02:22,630 --> 00:02:28,230
‫メッセージを表示してくださいということですが､ メッセージは何通あるのでしょうか？

28
00:02:28,230 --> 00:02:30,960
‫1､ 2､ 3､ 4､ 5｡

29
00:02:31,110 --> 00:02:39,930
‫これは､ シーン内の移動するプラットフォームであるすべてのアクターに対して､ メッセージを表示しているからです｡

30
00:02:39,960 --> 00:02:43,770
‫CP だからこそ､ これだけ多くのメッセージが寄せられるのですね｡

31
00:02:43,770 --> 00:02:48,030
‫そして､ メッセージを好きなように変更できることがおわかりいただけると思います｡

32
00:02:48,540 --> 00:02:59,100
‫さらに､ このメッセージには､ 開始位置や俳優の名前など､ いくつかの情報を入れることができます｡

33
00:02:59,280 --> 00:03:00,810
‫それでは､ どうぞ｡

34
00:03:00,810 --> 00:03:06,120
‫出力ログ､ メッセージ､ そして先ほどお話したカテゴリーがどのようなものか､ おわかりいただけると思います｡

35
00:03:06,120 --> 00:03:13,710
‫ここにはログテンプがありますが､ 上の方にはログオーディオログオーディオミキサーLog Worldがあるのがわかります｡

36
00:03:13,710 --> 00:03:18,480
‫つまり､ このメッセージはどこから来ているのかを区別するための､ さまざまなカテゴリーのログがあるのです｡

37
00:03:18,480 --> 00:03:21,060
‫これはアンリアルのどの部分からきているのでしょうか？

38
00:03:21,060 --> 00:03:26,790
‫しかし､ log tempは､ デバッグメッセージをログアウトするための一時的な場所であり､ その後､ displayがあるので､

39
00:03:26,790 --> 00:03:29,340
‫ほとんど使うことになるものです｡

40
00:03:29,340 --> 00:03:35,130
‫これはデフォルトのレベル､ ログレベルですが､ メッセージを表示することもできますし､ さまざまなものにすることができます｡

41
00:03:35,130 --> 00:03:39,390
‫ディスプレイ､ またはこのテーブルの下にある任意の値を指定することができます｡

42
00:03:39,390 --> 00:03:43,680
‫つまり､ ここで表示されるのはコンソールとログファイルにメッセージを出力することです｡

43
00:03:43,680 --> 00:03:48,150
‫ここでは､ ログファイルにのみメッセージを出力し､ コンソールには表示しないlogを用意しました｡

44
00:03:48,150 --> 00:03:53,400
‫つまり､ あまり表示させたくないけど､ デバッグのために使いたいという場合に使うものです｡

45
00:03:53,400 --> 00:03:58,770
‫誰かのゲームをデバッグしていて､ それがその人のマシンで動いたとしたら､ その人はログファイルを送ってきますよね｡

46
00:03:58,770 --> 00:04:00,270
‫では､ 警告が出ましたね｡

47
00:04:00,270 --> 00:04:07,530
‫これは､ うまくいかないと思われるときに､ ログコンソールに出力するためのもので､ 黄色で表示されるのも特徴です｡

48
00:04:07,560 --> 00:04:15,480
‫そして､ それを赤くプリントするerrorと､ 基本的にコンソールにプリントしてエンジンをクラッシュさせるfatalがあります｡

49
00:04:15,480 --> 00:04:22,500
‫これは最後の手段として使うことになりますが､ ログファイルにさまざまなレベルを持たせることができます｡

50
00:04:22,500 --> 00:04:27,330
‫そして､ ここにさまざまなメッセージを入れると､ どのように見えるかをお見せします｡

51
00:04:27,330 --> 00:04:32,790
‫そこで､ ロギング用のラインをコピーして､ 3つ作ってみることにします｡

52
00:04:32,790 --> 00:04:37,980
‫表示､ 警告､ そしてエラーです｡

53
00:04:37,980 --> 00:04:40,890
‫さて､ これらは一般的に使用されるレベルです｡

54
00:04:40,890 --> 00:04:43,980
‫では､ さっそくどんなものか､ 見てみましょう｡

55
00:04:43,980 --> 00:04:49,170
‫アンリアルに入り､ コンパイルボタンを押し､ プレイを停止して再開してみましょう｡

56
00:04:49,170 --> 00:04:55,290
‫ちなみにチルダキーを2回押すと出力ログが出るよ

57
00:04:55,380 --> 00:05:05,970
‫出力ログが表示され､ 3つのメッセージがあるのがわかります｡

58
00:05:05,970 --> 00:05:09,690
‫だから､ もう少し目立つ､ 明らかにエラーがある､ もっと目立つ｡

59
00:05:09,690 --> 00:05:12,360
‫これで､ ログメッセージにデータを追加できるようになりました｡

60
00:05:12,360 --> 00:05:18,600
‫ログの警告とエラーの行を削除して､ 追加すればいいんです｡

61
00:05:18,700 --> 00:05:21,280
‫後でプリントアウトされるこの文字列に｡

62
00:05:21,280 --> 00:05:27,190
‫例えば､ あるプラットフォームで設定された移動距離を印刷したい場合､ これは非常に簡単で､

63
00:05:27,190 --> 00:05:36,190
‫configured move distanceと言えば､ そのテキストが表示されます｡

64
00:05:36,190 --> 00:05:37,840
‫ここにコロンを入れる｡

65
00:05:37,840 --> 00:05:44,560
‫そして､ これはすべて二重引用符の中で､ テキストに含まれていることを確認することを忘れないでください｡

66
00:05:45,010 --> 00:05:51,460
‫そして､ パーセント記号の後にF文字が使えるようになります｡

67
00:05:51,610 --> 00:05:57,360
‫そして､ このようにハイライトされるのは､ ここで指定されたフォーマットとして知られているものだからです｡

68
00:05:57,400 --> 00:06:01,900
‫それは､ 歴史をさかのぼるとCからきているものです｡

69
00:06:01,900 --> 00:06:08,350
‫そして､ 通常はパーセント表示と､ ここにあるような文字を表示します｡

70
00:06:08,380 --> 00:06:17,410
‫Fは10進数の浮動小数点に対応し､ どのような出力になるかは､ 例の欄で見ることができます｡

71
00:06:17,410 --> 00:06:26,530
‫他にもいろいろありますが､ 10進数の整数をDやIで表すとこんな感じです｡

72
00:06:26,980 --> 00:06:30,820
‫つまり､ 浮動小数点数があるのでFを使っているわけです｡

73
00:06:30,820 --> 00:06:35,230
‫そして､ E log関数にもう一つ引数を追加する必要があります｡

74
00:06:35,230 --> 00:06:45,520
‫ですから､ このテキスト関数の括弧を閉じた後､ 代わりにここの後にカンマを入れていることを確認してください｡

75
00:06:45,520 --> 00:06:52,690
‫つまり､ この2つの括弧の間は､ 外側の集合の内側で､ 内側の集合の外側になるはずなのです｡

76
00:06:52,900 --> 00:07:00,910
‫そして､ 変数の値を渡すことで､ 移動距離の変数を作成することができますので､ Unreal に移動して､

77
00:07:00,910 --> 00:07:04,390
‫この動作を確認してみましょう｡

78
00:07:04,390 --> 00:07:11,860
‫コンパイルボタンを押し､ コンパイルウィンドウを閉じて再生を押し､ Tildeを2回押してログを表示させました｡

79
00:07:11,860 --> 00:07:17,980
‫そして､ 設定した移動距離がそれぞれのプラットフォームに表示されているのがわかります｡

80
00:07:17,980 --> 00:07:24,130
‫2つの移動プラットフォームは50500､ シーンにある3つのプッシュは1500です｡

81
00:07:24,130 --> 00:07:29,620
‫以前､ 移動距離のオーバーシュートについてお話しましたが､

82
00:07:29,620 --> 00:07:39,490
‫それがどの程度のレベルで起こっているのかを知ることは､ とても興味深いことだと思います｡

83
00:07:39,490 --> 00:07:43,510
‫そこで､ if文の中にfloat変数を作成することができます｡

84
00:07:43,510 --> 00:07:45,520
‫ですから､ 現状ではオーバーシュートしていることが分かっています｡

85
00:07:45,520 --> 00:07:49,900
‫オーバーシュートというフロート変数をオーバーシュートと言うことができる｡

86
00:07:49,900 --> 00:07:56,440
‫移動距離から移動距離を引いた値を設定することにしています｡

87
00:07:56,440 --> 00:07:59,740
‫つまり､ オーバーシュートがどの程度だったかがわかるわけです｡

88
00:07:59,740 --> 00:08:04,330
‫それでは､ 先ほど作成したオーバーシュート変数のロギングを行ってみてください｡

89
00:08:04,330 --> 00:08:06,610
‫そこで､ ユールログ関数を使います｡

90
00:08:06,610 --> 00:08:11,470
‫ここでは､ 少なくともあなたが使うであろう種類の構造を参考までに説明します｡

91
00:08:11,470 --> 00:08:21,220
‫また､ あなたが代わりにそれを置くためにオートコンプリートを記録することを使用して練習し､ あなたのコードをコンパイルしてテストし､ それが動作するかどうかを確認することができます｡

92
00:08:21,220 --> 00:08:22,660
‫ビデオを一時停止して､ 試してみてください｡

93
00:08:25,690 --> 00:08:26,170
‫なるほど｡

94
00:08:26,170 --> 00:08:26,970
‫お帰りなさい｡

95
00:08:26,980 --> 00:08:30,790
‫そこで､ ここではオートコンプリートオプションを使用することにします｡

96
00:08:30,790 --> 00:08:33,280
‫サイドバーを閉じて､ 少しスペースを確保したところです｡

97
00:08:33,400 --> 00:08:43,360
‫そして､ この中に､ 変数を作った後､ you logと入力してエンターキーを押すと､ そのままdisplayになるようにします｡

98
00:08:43,360 --> 00:08:52,690
‫テキストプラットフォームをオーバーシュートさせ､ パーセントFを使用し､ この2つの括弧の間に､

99
00:08:52,690 --> 00:09:02,020
‫オーバーシュート変数の新しい引数を追加しています｡

100
00:09:02,050 --> 00:09:08,770
‫コンパイルボタンを押し､ ライブコーディングログを閉じて､ 再生ボタンを押し､ チルダキーをダブルタップしました｡

101
00:09:09,310 --> 00:09:17,560
‫そして､ プラットフォームが旋回するたびに､ ログメッセージが出力され､ 何ユニット分オーバーシュートしたかが表示されているのがわかると思います｡

102
00:09:17,560 --> 00:09:18,730
‫実際にネットを見ることができます｡

103
00:09:18,730 --> 00:09:27,190
‫多くの場合､ かなり顕著な単位､ 3単位または0単位でオーバーシュートしています｡

104
00:09:27,190 --> 00:09:27,190
‫5台｡

105
00:09:27,190 --> 00:09:30,370
‫基本的に0ですね｡  5％から3センチメートル｡

106
00:09:30,370 --> 00:09:35,230
‫ゲーム中､ これらのプラットフォームがドリフトしていた可能性があるくらいです｡

107
00:09:35,230 --> 00:09:39,250
‫そして､ その修正をすでに実装しているのは素晴らしいことです｡

108
00:09:39,280 --> 00:09:39,760
‫素晴らしい内容です｡

109
00:09:39,760 --> 00:09:45,880
‫これで､ コードの内部で何が起こっているのかを把握するためのツールがまた一つ増えたことになりますね｡

110
00:09:45,880 --> 00:09:53,020
‫そして後々､ 自分でコードを作ることに自信がついてきたら､ 何がうまくいっていないのかを考えてみてください｡

111
00:09:53,470 --> 00:09:56,020
‫では､ 次の講義でお会いしましょう｡

