‫こんにちは､ ようこそ｡
‫この講義では､ プラットフォームがスタート地点から移動した距離を計算し､
‫エディタに表示して確認やデバッグができるようにする予定です｡
‫では､ どのように行われるのか､ 潜入してみましょう｡
‫というわけで､ 現在､ 疑似コードの最初の部分を実装できることを確認しました｡
‫私たちは､ MOVEプラットフォームのフォワードが動作するように書きました｡
‫そこで､ まだカバーしていないのがセンドバックプラットフォームです｡
‫そして､ そこにある最初のコメントは､ 私たちがどれだけ移動したかを確認するものであることがわかります｡
‫では､ プレイ開始からの移動距離を確認するにはどうすればいいのでしょうか？
‫まあ､ これには2つの要素があるんですけどね｡
‫まず､ 2つのベクトルの差と､ 2つのベクトル間の距離を把握する必要がある｡
‫そしてもうひとつは､ どこからスタートしたかをどう把握するかということです｡
‫まあ､ 最初の部分は比較的簡単なんですけどね｡
‫ありがたいことに､ そこでやることは､ 移動台に行くだけです｡
‫Hで､ ここに新しい変数を作成したいのですが､ ブループリントに公開される変数ではありません｡
‫一応､ これはC++専用の変数なので､ 新しいプロパティをかぶせる必要はない｡
‫そして､ アンリアルで使われているのと同じ用語を使って､ 開始位置または位置と呼ばれるFベクトルになります｡
‫また､ ロケーションを開始する意味がないので､ 最初からどんな値にも設定しないことにしています｡
‫まだわかりませんが､ ビギンプレイでわかるようになります｡
‫というわけで､ そういうことになります｡
‫C++に移動して､ スープビギンプレイのビットの後にプレイを開始します｡
‫スタートロケーションと言えるように､ スタートロケーションを設定します｡
‫そして､ ローカル変数を作るのではなく､ クラス変数を参照しようとしているので､ この前にfベクトルを置いていないことを思い出してください｡
‫つまり､ この開始位置はアクターの取得位置と同じにします｡ なぜなら､ 再生開始時にはアクターは開始位置にいるからです｡
‫つまり､ このクラスのインスタンス全体にわたって持続する変数ができたということです｡
‫そして､ その間の距離を求めようとする変数ができました｡
‫そのスタート地点から現在地がどれくらいずれているのか？
‫さて､ これを可能にするためには､ C++の構文をもう少し用語集に追加する必要があります｡
‫まず､ スコープ解決演算子と呼ばれるものになりますが､ これは少し紛らわしい名前ですが､
‫実はこのダブルコロン演算子､ 以前C++のファイルで実際に見たことがあります｡
‫DOT演算子と同じようにクラスの内部を見ることができ､ クラスのインスタンスを見ることができます｡
‫では､ もう少し詳しく見てみましょう｡
‫tick関数がmoving platformクラスに属することは分かっていますが､ そのクラスの特定のインスタンスに属しているわけではありません｡
‫移動プラットフォームのインスタンスはすべてtickの実装を共有しており､ これがクラスであることの意味である｡
‫つまり､ このmoving platformとTickの間のスコープ解決演算子は､ 実際には､ これがmoving platformクラスに属するtickであることを教えてくれているのです｡
‫先ほどと同じように､ ドット演算子を使って､ 例えば現在位置に属するxを取得しています｡
‫現在地はFベクトルの特定のインスタンスでしたが､ これを利用して､ Fベクトルクラスに属する関数で､
‫そのクラスの特定のインスタンス上で実行されないものを手に入れることができます｡
‫つまり､ 2つのベクトル間の距離を求めるのが1つの例です｡
‫Unreal でこれを行う方法は､ F ベクトル クラスの関数を使用することです｡
‫そこで､ fベクトル､ そしてコロンコロンとやって､ そのクラスの中にどんな関数があるのか､ 調べられるようにするのです｡
‫そして､ このとき表示されるオートコンプリートに注目してください｡
‫これまで触れてきませんでしたが､ こうした操作をするとき､ 実はFベクタークラスの中でどんな関数が使えるかを賢く教えてくれようとしているんです｡
‫そして､ かなりの数があることがおわかりいただけると思います｡
‫私たちが探しているのは､ Dist（ディスト）と呼ばれるもので､ 距離の略です｡
‫また､ 実は距離というものがあり､ これも実は同義語であることにお気づきでしょう｡
‫どちらを使ってもいいのですが､ コードをより簡潔にするために短い方を使い､
‫括弧を開けることにします｡
‫また､ オートコンプリートは､ 引数として受け取るものを教えてくれるという点でも､ 私たちを助けてくれる｡
‫第1引数がfベクトル3D､ 第2引数が同じくエフェクトエフェクティブ3Dであることがわかる｡
‫ここでeffect three Dとあるのがちょっと変ですが､ 基本的にはfベクトルを求めているわけです｡
‫つまり､ 2つの引数､ 両方ともfベクトルを渡すと､ 私の戻り値､ つまり左側のこのビットはdoubleになると言っているのです｡
‫ダブルは本来､ より正確な浮動小数点に過ぎないのです｡
‫だから､ 本質的に言えることなんです｡
‫ここから出てくるのはフロートですね｡
‫今回作成した式では､ floatを作成しています｡
‫すごい｡
‫そこで､ これから行うのは､ スタート地点の間の距離を求めることです｡
‫そこで､ 第1引数にstart locationと入力します｡
‫そして､ 2つ目が現在地になります｡
‫さて､ この段階では､ 2つのベクトル間の距離は同じになるので､ 実はこの丸はどっちでもいいのですが､
‫心配しないでください｡
‫AからBに出発しても､ BからAに出発しても､ 常に同じ距離になる｡
‫というわけで､ これはどちらでもよかったのですが､ お好みでどうぞ｡
‫これで､ floatを返す式ができました｡
‫そこで､ この式を使って新しいプロパティを更新し､ その値を確認することに挑戦してみたいと思います｡
‫そこで､ 新しいプロパティfloatを作成し､ 好きな名前で呼び､ これをf vector
‫distの値で毎ティック更新し､ ゲームをプレイして何が起こるかを見ます｡
‫期待通りの出力が得られていますか？
‫思ったより早く増えるものなのでしょうか？
‫ビデオを一時停止して､ 試してみてください｡
‫なるほど｡
‫お帰りなさい｡
‫そこで､ まず､ 新しいプロパティを作成します｡
‫そこで､ すべてのプロパティをグループ化するために､ これを開始位置の上に配置することにします｡
‫私たちは､ 新しいプロパティがどこでも編集できるようにするつもりです､ 実際のところ､ 私たちはこれを編集できるようにする必要はありません｡
‫だから､ どこでも編集というのは､ 編集ができるという意味だと想像していたかもしれません｡
‫まあ､ 編集はできないけれども､ 見ることはできる「どこでも表示」もあるんですけどね｡
‫だから､ それを利用するのです｡
‫その代わり､ この変数を使って何が起こっているかを見ることができるようにするだけなので､
‫ここでは簡単のためにカテゴリをオフにしておきます｡
‫先ほども言ったようにfloatという型になるのですが､ インスペクタで何を見ているのかがはっきりするように､
‫これを移動した距離と呼ぶことにします｡
‫そして､ 更新したことがわかるように､ デフォルトをマイナス1にしておきます｡
‫マイナス1と表示された場合は､ アップデートが行われていないことが分かります｡
‫だから､ この距離を移動させるんです｡
‫実装とtickに移動して､ distance movedをF vector colon colon distanceに等しく設定するつもりです｡
‫つまり､ そのスコープ解決演算子を使って距離関数を手に入れ､ 行末をセミコロンで終わらせるのです｡
‫オケイドーケ
‫では､ Unrealに進んでコンパイルボタンを押し､ 先に進んでターミナルを閉じます｡
‫そして､ この距離が移動し､ マイナス1として表示されるのがわかるはずです｡
‫灰色になっているのがわかると思いますが､ これはどこにも編集できない､ 見えているからです｡
‫では､ 再生を押してみましょう｡ アウトラインで移動するプラットフォームを選択し､
‫ここで移動した距離を見てみると､ プロパティが1秒間に約1～300の速度で急速に刻々と変化しているのがわかります｡
‫つまり､ 私が期待する速度､ つまり1秒間に100回の速度で進んでいるわけです｡
‫だから､ 成功したように見える｡
‫移動した距離を計算し､ 可視化することもできるようになったんです｡
‫素晴らしい内容です｡
‫それでは､ 次回の講義でお会いしましょう｡