‫お帰りなさい｡
‫さて､ ゲームを始めて､ ある行動を確認すると､ オレンジを切れば､ それも無限にゲーム内に残ります｡
‫というわけで､ みかんを大切にしました｡
‫一定時間が経過すると削除されます｡
‫しかし､ 私たちのカットオレンジはそうではないので､ それを変えましょう｡
‫スクリプトに入り､ 今回はフルーツスクリプトに入りましょう｡
‫そこで､ 5秒後にドット絵のゲームオブジェクトを挿入するように破壊します｡
‫つまり､ このインスタンス化されたゲームオブジェクト（私たちが作成したスライスされた果物）は､ 5秒後に削除されることになるのです｡
‫では､ 今､ それが本当なのかどうか､ 見てみましょう｡
‫さて､ スライスしてみますが､ オレンジ色のカットされたゲームオブジェクトが5秒後に削除されるかどうか見てみましょう｡
‫そして､ ご覧の通り､ 消えてしまいました｡
‫それらはとても大切なことです｡
‫そういうことに気をつけないと､ パフォーマンスの問題にぶつかるかもしれません｡
‫しかも､ 強力なハードウェアがたくさんあるPCならそれほど大きな問題にはなりませんが､ スマートフォンでは問題です｡
‫そのため､ ゲームオブジェクトの作成と削除には､ 本当に注意が必要です｡
‫わかりました｡
‫次に､ ブレードを作成しましょう｡
‫そこで､ 空のゲームオブジェクトを作成し､ その1つをブレードと呼ぶことにしましょう｡
‫では､ トランスフォームの位置をリセットして､ トレイルレンダラーというコンポーネントを追加してみましょう｡
‫そこで､ トレーラーレンダラーというものがあります｡
‫それを利用しよう｡
‫スクリプトを保存して､ 確認してください｡
‫そして､ 移動してXとYの値を弄ってみると､ ご覧のように､ このマゼンタが作成されます｡ つまり､
‫ブレードに適したマテリアルがまだないので､ そのためのマテリアルを作成してみましょう｡
‫では､ assetsフォルダに入り､ 素材を作成するために新しいフォルダを作成しましょう｡
‫だから､ マテリアルと実はマテリアル､ 複数形なんです｡
‫そして､ この中に新しいマテリアルを作り､ Bladeと名付けたいと思います｡
‫もちろん､ 色も必要です｡ 私は水色を選びますが､ 実際には､ もう少しパワフルな色になるでしょう｡
‫好きな色で構わないので､ この青で｡
‫さて､ 刃物のチェックですが､ ここに材料が必要です｡
‫そこでマテリアルをクリックすると､ ここには何もないマテリアルが1つあると表示されます｡
‫つまり､ 元素ゼロの材料はないんです｡
‫そこに引きずり込もう｡
‫試しに刃を前後に動かしてみると､ そこに青い素材があることがわかります｡
‫さて､ トレーラーのレンダラーがマウスに追従するようにしたいのですが､ それを実現する機能があります｡
‫だから､ ベクター3値をチェックすることになる｡
‫だからa3dバリュー｡
‫私たちの世界では､ もちろん､ 私たちのゲームは2Dのゲームですが､ それでもマウスは3Dの世界の中にあり､ 私たちに関連する2Dのコンポーネントを使うだけなのです｡
‫わかりました｡
‫さて､ トレードレンダラーを見てみると､ かなり長い間ゲーム上に留まっていることがわかります｡
‫そして､ それは今回と関係がある｡
‫そして､ それを0に変えてみましょう｡ 2.
‫だから､ 0しか生きられない｡ 2秒ということは､ ちょっとした軌跡にはなりますが､ ここではあまり長い軌跡にはならないでしょう｡
‫それをテストしてみましょう｡
‫もう一度実行して､ X値の位置を変えてみましょう｡
‫ご覧のように､ かなり長い間､ 生き続けることはありません｡
‫非常に短い寿命しかないのです｡
‫もちろん､ 幅も広すぎます｡ この巨大なカットや巨大なブレードのような外観は､ 私たちのゲームにはないはずです｡
‫だから､ 0にしよう｡ 1で､ どのように見えるか見てみましょう｡
‫Xの値で遊んでみましょう｡
‫そして､ ほら､ こんな風に見えるかもしれませんね｡
‫このように､ 私たちが作るトレイルは､ このような形になります｡
‫では､ よりきれいに見せるために､ 実際にゲームシーンを少し大きくして､ もう少し見やすくしたいと思います｡
‫そこで､ トレイルの見た目を変えたいのです｡ 現在､ トレイルが行っていることは､ 常に0です｡ 1､ それを変えたいのです｡
‫それでは､ キーを追加してみましょう｡
‫中央のキーを上にドラッグして､ 最後にもう一つキーを追加し､ 下にドラッグしてみましょう｡
‫では､ その意味するところを見てみましょう｡
‫そこで､ Xの位置を動かしてみると､ ご覧のように､ ナイフで切ったような形になります｡
‫非常に早くしか見ることができませんが､ マウス機能が実装されれば､ もっと意味のあるものになるはずです｡
‫素晴らしい｡
‫そこで次に､ ブレードが動いてゲームに物理的なインパクトを与えることができるよう､ リジッドボディが必要になります｡
‫というのも､ もちろん､ マウスに追従してブレードでスライスすれば､ オブジェクトをスライスしたときに､
‫そのオブジェクトに衝撃が加わるようにしたいからです｡
‫そのためには､ DXに剛体を追加して､ キネマティックにしましょう｡
‫これは､ 「刃物は他の物体の影響を受けるべきではない」ということですが､ それでも刃物は他の物体に影響を与えます｡
‫例えば､ 果物に影響を与えることはあっても､ 果物がブレードを引きずったり､ 押し出したりすることはないわけです｡
‫また､ ここでは非常に高速な衝突をさせたいので､ 衝突判定も連続的に行う必要があります｡
‫わかりました｡
‫次に､ 先ほど見たマウスの美しい動作を､ transform コンポーネントで設定した
‫X と Y の位置に沿ってではなく､ 実際にマウスに従うようにするスクリプトを用意したいと思います｡
‫では､ そのスクリプトをブレードと呼び､ スクリプトをオープンしてみましょう｡
‫そして､ ここではstartメソッドではなく､ awakeメソッドを使用します｡
‫そして､ ここでは実際にリジッドボディ､ プライベートまたはB､ リジッドボディを作成します｡
‫RBと呼ぶことにします｡ RBを初期化し､ コンポーネントのリジッドボディをDXに取得しましょう｡
‫これは､ ブレードにそのスクリプトが含まれているため､ ブレード自体からリジッドボディコンポーネントを取得するものです｡
‫そこで､ その剛体をここに取り込みます｡
‫次に､ マウスに追随するブレードを処理するメソッドが必要です｡
‫そこで､ マウスに関連する新しいメソッド､ private void setを作成しましょう｡
‫つまり､ このメソッドがマウスの位置にブレードをセットする処理を行い､ 私たちは単にリジッドボディを変更するだけです｡
‫そのため､ RBの位置をカメラのドットに合わせると､ その画面がワールドにメインとなります｡
‫Pointは､ 画面空間から世界空間へ位置を変換します｡
‫だから､ ここではまさにそれを求めているのです｡
‫そして､ 入力はマウスの位置であるべきだと言うだけです｡
‫つまり､ 世界と比較してマウスの位置がどこであれ､ そこにリジッドボディやブレードのリジッドボディを配置したいのです｡
‫そうすると､ スライドが出るんです｡
‫ほら､ すぐにわかりますよ｡
‫もちろん､ updateメソッドでは､ 常に最新の状態に保つために､ マウスにセットしたブレードを呼び出し､
‫常にマウスに沿った動きをするようにします｡
‫つまり､ マウスの位置に応じて､ 剛体の位置を1フレームごとに変更するのです｡
‫さて､ それではBladeのスクリプトに戻りましょう｡
‫そしてここに､ 解決しなければならない小さなことがあります｡
‫だから､ 場合によってはうまくいくかもしれません｡
‫ですから､ ゲームを始めると､ すでにマウスが追従しているのがわかります｡
‫しかし､ 他のケースでは､ マウスの位置自体は3Dの点ですが､ 私たちの世界は2Dの世界なので､ 今は必ずしも正しく計算されないので､
‫うまくいかないでしょう｡
‫そこで､ この問題を解決するために､ マウスポジションまたはマウスポーズという新しい変数を作成し､
‫この変数に入力マウスの位置を設定します｡
‫同じポジションなんです｡
‫しかし､ ここで行うのは､ マウス位置のZ値を10に設定することです｡
‫ということは､ これはカメラから10台分の距離になるということですね｡
‫そして､ ここでできることは､ 入力されたマウスの位置を渡すのではなく､ マウスのポーズを渡すことです｡
‫では､ それを保存しておきましょう｡
‫統一に戻ろう｡
‫ところで､ この10というのは､ 実はこのマイナス10なんです｡
‫そこで､ 正しいポジションを得るために､ さらに10回踏み込むのです｡
‫わかりました｡
‫では､ もう一度やってみましょう｡ 今度は実際にヌルポインター例外が発生します｡
‫そしてここで､ もちろん､ 一週間であるべきだと判断する｡
‫なるほど｡
‫では､ 次にそれを確認してみましょう｡
‫もう一度､ ゲームを始めましょう｡
‫そして､ 見てみましょう｡
‫ここにいたのか｡
‫私たちのお皿は守られている｡
‫これが今のブレード効果なんですね｡
‫スワイプしていくと､ もちろん､ 今度は削除したり､ 果物を切ったりしたくなります｡
‫では､ そうしましょう｡
‫よし､ では次に果実を切ってみよう｡
‫フルーツスクリプトに入りましょう｡
‫そして､ この中にDXへのトリガー入力時のイベントを追加していきます｡
‫そこで､ このメソッドを呼び出し､ 刃と衝突するたびに､ 先に進んでスライスされた果物を作りたいと言います｡
‫それで､ 果実をカットすることができるのです｡
‫では､ ここでブレードオブジェクトを作成してみましょう｡
‫ブレードBは､ コリジョンドットゲットコンポーネントを取り､ ブレードと呼ぶか､ あるいはブレードそのものを取り出します｡
‫つまり､ 衝突したオブジェクトにbladeというコンポーネントがあれば､ blade型のBというオブジェクトを作り､
‫Bがないかをチェックして､ そのままリターンします｡
‫それで何ができるかというと､ まあ､ もう何もできないでしょう｡
‫つまり､ トリガーの入力イベントでこの呼び出しから抜け出すだけで､ それ以外は先に進み､ スライスされた果物を作成します｡
‫だから､ 今はもうアップデートメソッドでそんなことはしない｡
‫だから､ それを解消しよう｡
‫ただし､ オントリガーエンターでやります｡
‫だから､ 刃に衝突するたびにスライスした果実を作ることになる｡
‫そして､ 刃をぶつけなければ､ そのまま無に帰せばいいのです｡
‫では､ それを確認してみましょう｡
‫コードを実行してみましょう｡
‫さて､ 実はこれを試す前に､ ブレードにコライダーを追加してみましょう｡ 現在､ ブレードにはコライダーがありません｡
‫では､ コライダーを作ることにしましょう｡
‫を追加しに行く｡
‫サークルコロイドはこちら
‫そして､ それをテストする前に､ もちろん､ それがトリガーであることを確認する必要があります｡
‫では､ オレンジのところに行ってみましょう｡ オレンジもトリガーになるはずです｡
‫では､ もう一度やってみましょう｡
‫さて､ 私たちの果物をスライスしてみると､ カットされているのがわかります｡
‫しかし､ 皆さんもお分かりのように､ まだ完璧ではありません｡
‫そのため､ ここでは半径の値を弄る必要があります｡
‫では､ 半径を決めて､ シーンに入り､ 半径がどのくらいになるか見てみましょう｡
‫だから､ 0にしよう｡ 5.
‫オレンジに例えると半径になるのかもしれませんね｡
‫では､ ここにオレンジをドラッグしてみましょう｡
‫それは大きすぎるでしょう｡
‫推測できるかもしれないので､ 0としましょう｡ 3たぶん､ またはああポイント｡
‫実は､ オレンジにぶつかった時点で､ すでにカットしているんです｡
‫そうですね｡
‫だから､ ポイント3はすべて正しい値であるべきなのです｡
‫だから､ 今のブレードはオレンジとまったく同じ大きさなんです｡
‫だから､ 打ち込みさえすれば､ 大丈夫なはずだ｡
‫では､ それを試してみましょう｡
‫そして､ 今度はフルーツをカットしてみましょう｡
‫さて､ そしてご覧のように､ 果物をスライスすることができます｡
‫素晴らしい｡
‫それでは､ 次のビデオでは､ ゲームにグリーンを追加してみましょう｡