‫こんにちは､ ようこそ｡
‫この講義では､ C++の文字列を使用して､ ログメッセージに動的なテキストを追加する方法について見ていきます｡
‫では､ さっそく文字列とC++について学んでみましょう｡
‫UIログから簡単なものを出力する方法を見てきましたが､ もっとテキスト､
‫例えばアクター名や､ もっと複雑なもの､ 例えばベクトルのテキスト表現などを出力したいとしたらどうでしょう｡
‫なぜなら､ フォーマット指定子はCの時代からあるもので､ C++と比べると非常に基本的なプログラミング言語だからです｡
‫そのため､ ある種のことは､ 当時は考えられなかったのです｡
‫ですから､ ベクターのようなものは､ 私たちがフォーマットで指定する方法では含まれないでしょう｡
‫そのため､ 文字列を使って行うことが多いのです｡
‫また､ これまで述べてきたように､ 文字列は単なるテキスト変数に過ぎません｡
‫これらはテキストを格納する変数なので､ 文字列を宣言することができます｡
‫C++では､ 以前はベクトルを使っていたところにFベクトルを使っています｡
‫ここでは､ 文字列を持つことができるように､ 文字列の型としてF stringを使用することにします｡
‫そして､ とりあえず変数名として文字列を入れておきます｡
‫また､ 文字列の値はどのように設定するのでしょうか｡
‫まあ､ もうこのあたりで少しは見えてきたんですけどね｡
‫この二重引用符は､ C++で文字列の値を表すものです｡
‫これらの式はすべて､ 二重引用符で囲まれています｡ また､ ヘッダーファイルでも二重引用符で囲まれているカテゴリは､
‫文字列式です｡
‫では､ どうすればいいかというと､ ここからmy string変数をセットして､ そのイメージを与えるためにmy
‫string値を言って､ 行末にセミコロンをつけて､ これをどうやってログ文に表示するか｡
‫そこで､ ここからログの引数として移動距離を削除し､ ログメッセージのテキストを､
‫ここに私の文字列のコロンがあります､ と変更することにします｡
‫そして､ F指定の代わりに､ 今度はパーセントSSEで､ プリントアウトしたい文字列を表します｡
‫そして､ この2つの括弧の間にあるE log関数に渡す引数は､ 私の文字列となる予定です｡
‫今､ 残念ながらそれだけで動くのであれば素晴らしいことなのですが｡
‫しかし､ 残念ながらUnrealではここで少し複雑なことがあって､ YUIのログの引数としてストレートな文字列を受け付けないのです｡
‫ここでちょっとした変換演算子が必要で､ その方法は､ 私の文字列の前にアスタリスクを置くことで､
‫Fの文字列からUログの内部で探している形式に変換するだけなのです｡
‫なぜそうなっているのか､ あまり詳しく説明する必要はないでしょう｡
‫それは､ 現時点で知るべきレベルを超えているのです｡
‫パーセントのSEをするときに､ fの弦の前に必ず星が必要だということを､ そのまま覚えることが大事だと思います｡
‫それでは､ Unrealに移動してコンパイルボタンを押すことで､ うまくいったかどうか見てみましょう｡
‫そして､ ライブ・コーディングを終了し､ 再生ボタンを押し､ 出力ログを開いてください｡
‫つまり､ my文字列の中の値を出力しているわけです｡
‫しかし､ 今書いたこのコード片は､ 明らかに特に役に立っていません｡ なぜなら､ この文字列をここに書き込むだけでよかったからです｡
‫なぜ､ わざわざ代用品ビジネスをするのか？
‫さて､ もっと面白くなるのは､ この変数に動的な値を代入する場合です｡
‫だから､ 名前を取得してそれを呼び出すということもできる｡
‫これはムービングプラットフォームのアクターで使える関数で､ レベルアウトライナーに表示されているアクターの名前を取得し､
‫変数に入れることができるのです｡
‫私の文字列の代わりにその変数名を呼び､ このUSログの下でもその名前を変更するつもりです｡
‫ログメッセージのテキストをbegin play colonと変更すれば､ アクターの名前になりますね｡
‫Unrealに戻り､ 再生を停止して､ コンパイルを実行し､ 再生を実行して､ 出力ログを開くと､ begin play moving platform
‫one begin play movingというメッセージが表示されているのがわかると思います｡
‫プラットフォーム3押し｡
‫クブ3プッシュ､ キープ5､ プッシュ､ キープ7｡
‫だから､ 大きなインプレイと､ さまざまな俳優の名前を全部揃えたんだ｡
‫というのも､ 後でオーバーシュート距離をプリントアウトするとき､
‫誰がオーバーシュートしているのかがはっきりしないことがあるからです｡
‫そのため､ ログメッセージを生成しているアクターの名前を出力することができれば､ 問題の発生箇所を特定するのに非常に有効です｡
‫ハプニング
‫そこで､ 誰がどれだけオーバーシュートしたかを確認するために､ そのオーバーシュート・ログで名前を記録することに挑戦したいと思います｡
‫つまり､ Begin Playでやったように､ 俳優の名前をチックするための変数を追加するわけです｡
‫その中に名前を入れて､ そのオーバーシュートを印刷しているログメッセージのどこか好きなところに指定したパーセントを追加し､
‫その名前に引数を追加することになります｡
‫引数のリストにはやはりオーバーシュート変数が欲しいところですが､ やはりその前に､
‫名前の引数も入れることになります｡
‫そして､ 引数の順番がメッセージの中の指定子の順番と一致しているかどうかが重要なポイントになります｡
‫つまり､ パーセントfの前にパーセンテージを置けば､ その順番になるわけです｡
‫名前はオーバーシュートの前にするか､ 他をやったのならその逆にしてください｡
‫そして､ 変数名の前にスターを付けて､ 文字列をe logが使えるように変換することを忘れないでください｡
‫ビデオを一時停止して､ 試してみてください｡
‫なるほど｡
‫お帰りなさい｡
‫これは厳密には必要ではありませんが､ 単純化するために変数を使用し､
‫行を少し短くすることにします｡
‫そこで､ nameというF文字列を大文字で用意し､ 通常は変数名の先頭にします｡
‫その変数にget nameを行い､ それを引数にするのです｡
‫しかし､ どこに書式を入れればいいのか､ ログメッセージに指定すればいいのか｡
‫まあ､ ログメッセージの最初に書いて､ これがこのものから来るログメッセージであることをはっきりさせるつもりです｡
‫つまり､ 私の主張はオーバーシュートの議論より先に出てくる必要があるのです｡
‫そこで､ 名前を取得してここに入力し､ 適切に変換するために名前の前にアスタリスクを付ける必要があります｡
‫では､ エディタに戻りましょう｡
‫再生停止→再コンパイル→ターミナル終了→再生→出力ログを開く｡
‫そして､ ティックメッセージが届き始めているのがおわかりいただけると思います｡
‫プッシュとキューブが1プッシュとq11でオーバーシュートしました｡
‫つまり､ 高速で移動するプラットフォームや押すキューブはより多くオーバーシュートし､
‫移動するプラットフォームはより少なくオーバーシュートしているように見えるということです｡
‫でも､ ここで過去ログで確認できたのはよかったです｡
‫素晴らしい内容です｡
‫というわけで､ 今回のログ流しはここまでです｡
‫次回の講義でお会いしましょう｡