‫お帰りなさい｡
‫この章では､ フルーツニンジャのクローンを作りますが､ フルーツニンジャというゲームを知らない人は知らないかもしれませんね｡
‫そして､ YouTubeの動画もチェックしてみてください｡
‫いくつかの果物をスライスするという非常に基本的なゲームで､ それをスワイプで単純に行い､ スライスすると落ちてきて､ いくつかのポイントを得ることができ､
‫できるだけ多くのポイントを得ることが目標になります｡
‫もちろん､ ポイントを抑えているものもあり､ それは爆弾です｡
‫だから､ ボムを切った時点で負けなんです｡
‫わかりました｡
‫ということで､ だいたいこんなところでしょうか｡
‫それ以上のことはありません｡
‫そして､ この章では､ これらの基本的な機能を構築していきます｡
‫それでは､ 新しいプロジェクトを作成しましょう｡ その名も「Fruit Ninja clone」です｡
‫私の場合はV1ということにしています｡
‫そんなことする必要はない｡
‫それも､ すでに私のプロジェクトの下のどこかにクローンがあるからです｡
‫よし､ これでいいんだ｡
‫では､ まずカメラの背景を変えてみましょう｡
‫だから､ スカイボックスはいらないんです｡
‫無地でいいので､ その色を変えてみる｡
‫さっそく､ 色を選んでみましょう｡
‫そして､ ブラウン系の色でいきましょう｡
‫ライトブラウンは､ ほとんど素晴らしいバッシュ｡
‫それが私たちの出発点なんですね｡
‫この講義に添付されているアセットをダウンロードできますので､
‫それらをすべてゲームにドラッグしてみましょう｡
‫バナナカット､ バナナブレンド爆弾､ オレンジカット､ オレンジブレンドがあるわけです｡
‫これらのblendファイル（blenderファイル）をすべてゲームにドラッグしてみましょう｡
‫わかりました｡
‫これで､ ご覧の通り､ アセットが直接作成され､ マテリアルも作成されました｡
‫まず､ modelsと呼ぶフォルダを作成し､ そこにすべてをドラッグすることから始めましょう｡
‫素材まで｡
‫だから､ そこに全部引きずり込もう｡
‫わかりました｡
‫ではまず､ オレンジから｡
‫ゲームに引きずり込もう
‫ご覧のように､ これがオレンジ色で､ これくらいの大きさになります｡
‫だから､ サイズを小さくするのは良い選択なのかもしれません｡
‫そこで､ ここでは､ モデルで､ スケールファクターを0に変更します｡ 3を選択し､ 下部の適用を押す｡
‫今はご覧の通り､ かなり小さくなっているので､ これならもっといいサイズになるはずです｡
‫そうでなければ､ 大きすぎます｡
‫では､ 同じことをカットしたオレンジやオレンジカット0でもやってみましょう｡ 3を選択し､ 適用を押す｡
‫では､ オレンジ色のカットもドラッグして､ 実際にこの中に入れてみましょう｡
‫ということは､ 今度はどういうことかと思うかもしれません｡
‫さて､ オレンジをカットしない完全版と､ オレンジをスライスしたりスワイプしたりするとすぐにできてしまうカット版があります｡
‫しかも､ 2枚組です｡
‫つまり､ 2つのピースが含まれていて､ それが別々の方向へ落ちていくわけです｡
‫オレンジを切っているような､ あるいは一般的な果物を切っているような､ そんな微妙な感覚になるわけです｡
‫わかりました｡
‫では､ オレンジ色のカットは､ あくまでデモンストレーション用なので､ また取り除きましょう｡
‫では､ ここでオレンジ色のカットを削除してみましょう｡
‫さて､ オレンジには､ ご覧のようにすでにアニメーターがいます｡
‫コントローラーがないので､ 今のところ必要ないでしょうけど｡
‫だから､ 捨てましょう｡
‫コンポーネントを削除します｡
‫これで､ メッシュがメッシュフィルター変換コンポーネントをレンダリングするようになっただけです｡
‫そして､ これから追加する必要があるのは､ 剛体への物理演算です｡
‫さて､ なぜ2Dの物理ボディで､ 3Dではないのかと思われるかもしれません｡
‫そりゃあ､ このオレンジは2Dルームにしか移動させたくないですからね｡
‫だから､ 上にも左にも右にも動くべきでない｡
‫でも､ 深いレベルではいけないから､ 3Dレベルではいけないんです｡
‫だからこそ､ リジッドボディ2Dは､ 私たちにふさわしいリジッドボディなのです｡
‫これは物理学の2D円コライダーです｡ ご想像のとおり､ このオレンジは円の形をしています｡
‫さて､ ご覧の通り､ これは2Dコライダーとなります｡
‫2Dルームに行けばもっとよく見えるくらいです｡
‫さて､ オレンジを囲む緑の小さな線が見えますが､ これがサークルコライダーとなります｡
‫コライダの半径は､ ここに書いてありますし､ 変更することもできます｡
‫このように､ 大きくしたり小さくしたりすること｡
‫ゲームを簡単にしようと思えば､ もっと大きくすることになるし､ 一般的にはモデル全体をスケールアップすることだってできるだろう｡
‫しかし､ 0. 3は､ 私たちにとって適切な半径です｡
‫今なら､ このオフセットも最低限で済ませることができますから｡
‫何かというと､ 団結力です｡
‫ユニティは時々ありますね｡
‫さて､ これで剛体も万全だ｡
‫ミサが必要です｡
‫重力計が必要です｡
‫しかし､ ここで変えるべきは､ 衝突判定です｡
‫ほとんどのゲームではこれでいいのですが､ 私たちは超高速にしたいのです｡
‫そこで､ ここでは非常に迅速な検出を行いたいと思います｡
‫衝突判定なので､ オレンジをスライスするようなゲームでは､ 非常に素早く反応するはずなので､
‫連続的な方が良いのです｡
‫では､ そのオレンジをプレハブとして保存してみましょう｡
‫それでは､ 新しいプレハブフォルダ､ フォルダプレハブを作成し､ ここにオレンジをドラッグしてみましょう｡
‫ついでに､ そのシーンも保存しておきましょう｡
‫だから､ シーンを保存して､ その1つをメインと呼ぶことにしましょう｡
‫それから､ スクリプトを扱うので､ スクリプトフォルダが必要です｡
‫そこで､ このスクリプトも作成し､ その中に入って新しいスクリプトを作りましょう｡
‫シャープスクリプトを正確に見て､ フルーツと呼んでいます｡
‫では､ 開いてみましょう｡
‫よし､ この中だ｡
‫私たちがやりたいのは､ スライスされたフルーツを作ることです｡
‫そこで､ スライスした果物が必要になります｡
‫そのためのプレハブ､ つまり､ オレンジを切ったらすぐにオレンジのピースを用意したいのです｡
‫つまり､ 2つからオレンジの2つのパーツは､ それぞれ違う方向に落ちていくことになります｡
‫そしてそれは､ ここで設定する必要があるのです｡
‫これはオレンジだけでなく､ どんな果物にも言えることです｡
‫そこで､ スライスされた果物のプレハブ､ 例えばスライスされたオレンジが必要なので､ スライスされた果物のプレハブというパブリックゲームオブジェクトを作成しましょう｡
‫そして､ 果物をスライスするメソッドが必要です｡
‫だから､ クリエイト・スライス・フルーツと呼ぶことにします｡
‫そして､ 私がしたいことは､ 単にスライスされた果実をインスタンス化することです｡
‫だから
‫スライスしたフルーツ｡
‫プレハブです｡
‫どの位置で？
‫まあ､ うちのみかんと同じ位置なんですけどね｡
‫そして､ 回転を変形させる｡
‫だから､ 今と同じローテーションでもいいんです｡
‫次に必要なのは､ もちろんオレンジ全体を破壊することです｡
‫つまり､ 私たちのゲームオブジェクトは､ フルーツスクリプトを含む､ あるいはフルーツスクリプトを保持するゲームオブジェクトということになります｡
‫わかりました｡
‫さて､ まだプレハブがないので､ スライスされたプレハブはまだないので､ もう一度unityに入りましょう｡
‫もちろん､ オレンジのプレハブしかありません｡
‫では､ モデルに戻って､ オレンジ色のカットをゲームにドラッグしてみましょう｡
‫さて､ オレンジ色のカットは､ ご覧のように2種類のオブジェクトで構成されています｡
‫これは､ 左のオレンジカットと右のオレンジカットが入っているフォルダです｡
‫つまり､ オレンジの2枚があるわけです｡
‫このcreate sliced fruitメソッドが呼ばれた瞬間に､ さまざまな方向に飛んでいってほしいのです｡
‫では､ そのようにしましょう｡
‫その2つのカットピースを選択し､ コンポーネントを追加してみましょう｡
‫そして今度は､ 横に折りたたむだけでなく､ わずかに回転させたいので､ リジッドボディではなく､
‫2Dを追加していきます｡
‫そのため､ フルーツが必ずしも左右にぴったりと落ちるわけではないので､ 少しリアルに見えますね｡
‫また､ 少し回転します｡
‫そして､ それはリジッドボディ3Dで行う必要があることなのです｡
‫さて､ 衝突判定についてですが､ これらの部品は衝突判定の観点からはそれほど重要ではないので､
‫バラバラのままでよいでしょう｡
‫またスライスされるのは困りますが､ やはり物理は必要です｡
‫ボックスです｡
‫コライダー さて､ この場合､ 今ここでボックスコライダーを使います｡ もちろん､ ボックスコライダーではなく､ リジッドボディが3Dオブジェクトであるため､
‫DDにボックスコライダーを使用します｡
‫それでは､ これらをプレハブフォルダにドラッグしてみましょう｡
‫そこで､ 実際にプレハブとしてオレンジ色のカットをプレハブフォルダにドラッグしてみましょう｡ 両方のピースを用意したいので､
‫1つのプレハブにしたいのです｡
‫よし､ これでオレンジ色のカットを外せるぞ｡
‫ここから削除してください｡
‫このシーンも保存しておきましょう｡
‫このオレンジのようなオレンジとプレハブには､ 先ほど作成したスクリプトが必要なのです｡
‫では､ コンポーネントを追加してみましょう｡
‫Fruitというスクリプトを追加してみましょう｡
‫さて､ もちろん､ ここでスライスした果物のプレハブが必要になるのはおわかりでしょう｡
‫しかも､ オレンジカットはスライスしたフルーツのプレハブなので､ 完璧です｡
‫これをドラッグして､ プレハブ・オレンジに適用してみましょう｡
‫そうでなければ､ スクリプトを持つことはできません｡
‫プレハブには､ とても重要なスクリプトがあることがおわかりいただけると思います｡
‫よし､ これで完了だ｡
‫それを実現するために努力しよう｡
‫では､ スライスされた果物を作ってみましょう｡ ユーザー入力にはupdateメソッドを使います｡
‫そのため､ ドットゲットキーを入力すると､ キーが押されます｡
‫ですから､ ユーザーがキーを押すとすぐに､ キーコード・スペースをやりましょう｡
‫誰かがスペースキーを押したら､ すぐにこのcreate sliced fruitメソッドを呼び出すようにしましょう｡
‫では､ そのスクリプトを保存してみましょう｡
‫Unityに戻ろう｡
‫というのも､ そうでなければ､ スポーンもまだないので､
‫それをテストするオレンジがないのです｡
‫そこで､ スパナを作り､ 果物を生成して空中に発射し､ スライスできるようにします｡
‫でも､ 今はまだそれがないんです｡
‫では､ オレンジがゲームに登場するのを確認して､ 今すぐゲームを始めてみましょう｡
‫実は､ 遅すぎたので､ 少し引きずりましょう｡
‫2Dルームに入り､ 引き上げよう｡
‫だから､ 十分な､ 十分な時間があり､ 遊びに最大限の力を発揮しようということです｡
‫そして､ 肝心のプレス｡
‫そして､ ご覧のようにスライスされたフルーツがあったので､ それだけでOKです｡
‫でも､ 当然ながら､ あまりいい顔はしません｡
‫何らかの方法で回転させたり､ 異なる方向へ移動させたりする必要があります｡
‫というのも､ ここで剛体を追加する必要があり､ 爆発を行うからです｡
‫そして､ そのためには､ 次のようなことをしなければならないのです｡
‫では､ リジッドボディを作成してみましょう｡
‫この場合､ 2つのリジッドボディと会話するため､ リジッドボディの配列が必要です｡
‫そこで､ 左のスライスしたものと右のスライスしたものを､ RB sまたはRigid
‫bodies on slicedと呼ぶことにします｡
‫そして､ それを初期化するためには､ 初期化するためのゲームオブジェクトが必要です｡
‫では､ ゲームオブジェクトを作り､ それをインスタンスと呼ぶことにしましょう｡
‫ゲームオブジェクトをインスタンス化するだけでなく､ Instに保存されるゲームオブジェクトを作成するように､
‫instantiateメソッドの前にゲームオブジェクトを取得する必要があります｡
‫このインスタンスを利用して､ childrenとここのコンポーネントを取得し､ リジッドボディに変換することができます｡
‫そこで､ 2枚にスライスしたそれぞれの剛体を用意したいのです｡
‫そして､ ここでは剛体の配列があるため､ childrenのコンポーネントではなく､ childrenのコンポーネントであるため､
‫文句を言われるのです｡
‫だから､ 複数形なんです｡
‫それでは､ さまざまなピースをすべて見ていきましょう｡
‫つまり､ これらの異なるスライスされたオレンジの断片はすべて､ スライスされた上でRBにあると呼ばれる剛体をとります｡
‫そこで､ この配列を調べて､ それぞれのパーツについて､ トランスフォームの回転をランダムな回転に変更しています｡
‫そこで､ ランダムに行テーションを作成するだけです｡
‫randomメソッドにはrotationというプロパティがあり､ これがランダムな回転を与えてくれるからです｡
‫ここでメソッドを書くまでもなく､ ここでランダムな回転を行うことができます｡
‫だから､ ランダムクラスとの相性はかなりいいんです｡
‫さて､ 次に､ 爆発を追加して､ ピースが異なる方向に行くようにしたいのですが､ ただ､ 異なる方向に吹き飛ばされるだけです｡
‫このように､ 剛体には､ 力の追加､ 相対的な力の追加､ 爆発力の追加など､ いくつかの追加メソッドがあります｡
‫わかりました｡
‫それこそが､ 私たちが欲しいものなのです｡
‫では､ それを使ってみましょう｡
‫ご覧のように､ 複数のオーバーロードがありますが､ ここでは爆発的な力だけで使ってみます｡
‫では､ 爆発力はどの程度にすればいいのでしょうか？
‫爆発位置は？
‫つまり､ 爆発が始まるべき位置です｡
‫そして最後に爆発半径と爆発力の値をランダムにしてください｡
‫いつも同じような爆発になるとは限らないはずです｡
‫いつも同じように見えてはいけないのです｡
‫だから､ あるときはより遠くへ､ あるときはより遠くへ､ といった具合に飛び立つはずです｡
‫そこで､ ランダムに思考範囲を作成してみましょう｡
‫そして､ ここで使いたいのは501,000の2つの値です｡
‫だから､ 爆発力は501,000の間で､ ランダムでいいんです｡
‫そうすると､ 爆発位置がその位置で変換されるはずです｡
‫つまり､ 爆発した元のゲームオブジェクトの位置です｡
‫つまり､ この場合はオレンジの中心部ですね｡
‫そして最後に､ 爆発半径をどうするか｡
‫そして､ 5つだけ入力します｡
‫これはあくまで私がテストして､ ここでうまく機能する値です｡
‫では､ Fを5つ使ってみましょう｡ これをもう一度保存して､ Unityに戻って､ 今度はキーを押してみましょう｡
‫そして､ ご覧の通り､ 私たちの果実はかなりかっこよく落ちます｡
‫ここで､ オレンジを複製して､ それぞれのオレンジの位置を少し変えてみると｡
‫では､ ここの値を変えてみましょう｡
‫そうすれば､ 私たちの小さな爆発がいかにカッコイイか､ おわかりいただけると思います｡
‫わかりました｡
‫そして､ いよいよこちらも｡
‫それでは､ もう一度ゲームを始めてみましょう｡
‫そして､ 回転がランダムで､ 爆発自体もランダムであることがわかるかもしれません｡
‫だから､ 強力に違う方向へ飛んでいったりするんです｡
‫だから､ もうこれはかなりカッコイイと思いますね｡
‫だから､ ほら､ 私たちは素晴らしい爆発をする､ そう､ このビデオにはそれがいいと思うんだ｡
‫次のビデオでは､ フルーツをどのようにスポーンするかについて説明します｡
‫では､ いつものようにシーンを保存してみましょう｡
‫シーンの保存を忘れずに､ また次のビデオでお会いしましょう｡