[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.29,0:00:03.94,Default,,0000,0000,0000,,Unity 4.3 より新たな2D機能が追加されました。 Dialogue: 0,0:00:03.94,0:00:05.94,Default,,0000,0000,0000,,我々の作成したデモを元に、 Dialogue: 0,0:00:05.94,0:00:08.29,Default,,0000,0000,0000,,これらの機能を解説したいと思います。 Dialogue: 0,0:00:08.29,0:00:11.52,Default,,0000,0000,0000,,この「Tower Bridge Defence」というゲームは Dialogue: 0,0:00:11.52,0:00:13.77,Default,,0000,0000,0000,,宇宙人の侵略に晒されている Dialogue: 0,0:00:13.77,0:00:15.55,Default,,0000,0000,0000,,ロンドンのタワーブリッジを描いたデモです。 Dialogue: 0,0:00:15.55,0:00:18.95,Default,,0000,0000,0000,,これは、スプライトのみで構成された物理駆動のゲームで、 Dialogue: 0,0:00:18.95,0:00:22.21,Default,,0000,0000,0000,,Unityにおける2Dゲーム制作の理解に役立つのではないかと思います。 Dialogue: 0,0:00:23.47,0:00:25.47,Default,,0000,0000,0000,,この動画では Dialogue: 0,0:00:25.47,0:00:28.18,Default,,0000,0000,0000,,デモの背景と前景の作り方 Dialogue: 0,0:00:28.18,0:00:30.18,Default,,0000,0000,0000,,キャラクター、エフェクト、カメラの追従 Dialogue: 0,0:00:30.18,0:00:31.63,Default,,0000,0000,0000,,アニメーションとスクリプトについて解説します。 Dialogue: 0,0:00:31.63,0:00:35.63,Default,,0000,0000,0000,,まずは、Unity 2Dの基本的な操作を説明しましょう。 Dialogue: 0,0:00:36.86,0:00:40.29,Default,,0000,0000,0000,,まず、2D機能を使うにあたって Dialogue: 0,0:00:40.29,0:00:42.22,Default,,0000,0000,0000,,「Editor Behaviour Mode」を2Dにしてください。 Dialogue: 0,0:00:43.04,0:00:45.04,Default,,0000,0000,0000,,新規プロジェクトウィザードのドロップダウン Dialogue: 0,0:00:45.04,0:00:48.04,Default,,0000,0000,0000,,またはメニューから\NEdit > Project Settings > Editor Dialogue: 0,0:00:48.04,0:00:50.54,Default,,0000,0000,0000,,で設定出来ます。 Dialogue: 0,0:00:53.17,0:00:55.17,Default,,0000,0000,0000,,この設定により Dialogue: 0,0:00:55.17,0:00:57.17,Default,,0000,0000,0000,,インポートされたテクスチャーはデフォルトでスプライトに設定され、 Dialogue: 0,0:00:57.17,0:00:59.63,Default,,0000,0000,0000,,「Scene View」のデフォルトの表示は2Dになります。 Dialogue: 0,0:00:59.63,0:01:01.63,Default,,0000,0000,0000,,このモードでは2Dゲーム制作を行いやすい様に Dialogue: 0,0:01:01.63,0:01:04.42,Default,,0000,0000,0000,,ビューは並行投影になります。 Dialogue: 0,0:01:04.42,0:01:06.80,Default,,0000,0000,0000,,そして、ビューの右上に表示されている3D Gizmoが非表示になり、 Dialogue: 0,0:01:06.80,0:01:09.19,Default,,0000,0000,0000,,より広いスペースを使えるようになります。 Dialogue: 0,0:01:09.19,0:01:11.94,Default,,0000,0000,0000,,この設定以外の点では Dialogue: 0,0:01:11.94,0:01:16.24,Default,,0000,0000,0000,,2Dのワークフローは従来の3Dゲームを作るアプローチとよく似ています。 Dialogue: 0,0:01:17.04,0:01:20.04,Default,,0000,0000,0000,,なので、既にUnityを使ったことがある方なら Dialogue: 0,0:01:20.04,0:01:22.04,Default,,0000,0000,0000,,すぐに2Dゲームを作ることができると言うことです。 Dialogue: 0,0:01:22.92,0:01:24.92,Default,,0000,0000,0000,,また、2Dと3Dの要素は混在できるので Dialogue: 0,0:01:24.92,0:01:27.21,Default,,0000,0000,0000,,2Dゲームに3Dの要素を加える事も Dialogue: 0,0:01:27.21,0:01:31.72,Default,,0000,0000,0000,,またその逆に3Dのゲームに2Dの要素を加えることもできます。 Dialogue: 0,0:01:33.36,0:01:35.49,Default,,0000,0000,0000,,ではデモプロジェクトを元に Dialogue: 0,0:01:35.49,0:01:39.31,Default,,0000,0000,0000,,我々がどのようにステージを作成したのかを見てみましょう。 Dialogue: 0,0:01:40.81,0:01:42.81,Default,,0000,0000,0000,,まず、Photoshopでステージ構成の概要を作成し Dialogue: 0,0:01:42.81,0:01:44.81,Default,,0000,0000,0000,,そこからレイアウトを決めました。 Dialogue: 0,0:01:45.31,0:01:47.31,Default,,0000,0000,0000,,レイヤー毎に書き出す事で、 Dialogue: 0,0:01:47.31,0:01:50.31,Default,,0000,0000,0000,,Unityのスプライトタイプとしてインポートできます Dialogue: 0,0:01:58.37,0:02:01.30,Default,,0000,0000,0000,,背景を視点に応じて移動させるため Dialogue: 0,0:02:01.30,0:02:03.66,Default,,0000,0000,0000,,いくつかの背景要素は別にして Dialogue: 0,0:02:03.66,0:02:06.51,Default,,0000,0000,0000,,Background Sorting レイヤーに配置します。 Dialogue: 0,0:02:06.51,0:02:09.65,Default,,0000,0000,0000,,これはUnityの新たなもう一つの2D開発機能です。 Dialogue: 0,0:02:10.15,0:02:12.84,Default,,0000,0000,0000,,このレイヤーにすべての背景を追加する事で、 Dialogue: 0,0:02:12.84,0:02:15.15,Default,,0000,0000,0000,,Order In LayerというSprite Rendererのプロパティで Dialogue: 0,0:02:15.15,0:02:17.37,Default,,0000,0000,0000,,一括して描画順番を変更する事ができます。 Dialogue: 0,0:02:17.37,0:02:19.37,Default,,0000,0000,0000,,配置位置が決まったなら Dialogue: 0,0:02:19.37,0:02:21.37,Default,,0000,0000,0000,,Sorting Layerの”Background”をロックする事で Dialogue: 0,0:02:21.37,0:02:23.37,Default,,0000,0000,0000,,前景の要素を追加するときに Dialogue: 0,0:02:23.37,0:02:27.37,Default,,0000,0000,0000,,間違えて背景を動かせることを予防できます。 Dialogue: 0,0:02:27.75,0:02:29.75,Default,,0000,0000,0000,,右上のLayersドロップダウンで Dialogue: 0,0:02:29.75,0:02:31.75,Default,,0000,0000,0000,,この設定を指定できます。 Dialogue: 0,0:02:32.81,0:02:35.53,Default,,0000,0000,0000,,背景は飾りの要素だけですので、 Dialogue: 0,0:02:35.53,0:02:37.53,Default,,0000,0000,0000,,スプライト以外のコンポーネントは必要ありません。 Dialogue: 0,0:02:37.53,0:02:39.53,Default,,0000,0000,0000,,背景オブジェクトの親オブジェクトには Dialogue: 0,0:02:39.53,0:02:41.53,Default,,0000,0000,0000,,視点に応じて位置を操作する Dialogue: 0,0:02:41.53,0:02:46.20,Default,,0000,0000,0000,,BackgroundParallaxという単純なスクリプトが追加してあります。 Dialogue: 0,0:02:46.20,0:02:48.64,Default,,0000,0000,0000,,このスクリプトに関しての詳しい説明は Dialogue: 0,0:02:48.64,0:02:50.64,Default,,0000,0000,0000,,Scriptsフォルダにあるスクリプトのコメントを参照して下さい。 Dialogue: 0,0:02:54.91,0:02:58.91,Default,,0000,0000,0000,,次は、前景の要素、キャラクターの作成です。 Dialogue: 0,0:02:59.79,0:03:02.28,Default,,0000,0000,0000,,デザインはロンドンのタワーブリッジの中に Dialogue: 0,0:03:02.28,0:03:03.46,Default,,0000,0000,0000,,UFOが着陸した状況です。 Dialogue: 0,0:03:03.46,0:03:05.46,Default,,0000,0000,0000,,プレイヤーはフィールド内を動き回り、 Dialogue: 0,0:03:05.46,0:03:07.46,Default,,0000,0000,0000,,敵は空から登場して Dialogue: 0,0:03:07.46,0:03:09.21,Default,,0000,0000,0000,,フィールドの中を移動します。 Dialogue: 0,0:03:09.21,0:03:11.21,Default,,0000,0000,0000,,そういった、キャラクターの移動のために、 Dialogue: 0,0:03:11.21,0:03:13.63,Default,,0000,0000,0000,,各前景の部分にはコライダーが必要です。 Dialogue: 0,0:03:13.63,0:03:17.63,Default,,0000,0000,0000,,大体のフィールドには2DのBox Colliderで良いのですが、 Dialogue: 0,0:03:17.63,0:03:20.63,Default,,0000,0000,0000,,UFOの形はかなり複雑です。 Dialogue: 0,0:03:22.50,0:03:24.50,Default,,0000,0000,0000,,UnityのPolygon Colliderはスプライトの形に基づき Dialogue: 0,0:03:24.50,0:03:28.70,Default,,0000,0000,0000,,自動的にコライダーを作成してくれます。 Dialogue: 0,0:03:28.72,0:03:32.05,Default,,0000,0000,0000,,また、生成されたコライダーの形を手動で調整する事も可能です。 Dialogue: 0,0:03:32.05,0:03:34.16,Default,,0000,0000,0000,,ポイントの移動、追加、削除で Dialogue: 0,0:03:34.16,0:03:38.16,Default,,0000,0000,0000,,コライダーの形を歩かせるのに適切な形にします。 Dialogue: 0,0:03:38.66,0:03:40.66,Default,,0000,0000,0000,,前景を背景より手前に表示するために Dialogue: 0,0:03:40.66,0:03:43.15,Default,,0000,0000,0000,,Tags and Layersマネジャーに Dialogue: 0,0:03:43.15,0:03:45.59,Default,,0000,0000,0000,,"Foregrounds"ソートレイヤーを作成してあります。 Dialogue: 0,0:03:48.87,0:03:50.87,Default,,0000,0000,0000,,次は、プレイヤーキャラクターを見てみましょう。 Dialogue: 0,0:03:53.70,0:03:55.59,Default,,0000,0000,0000,,プレイヤーキャラクターもPhotoshopでデザインしました。 Dialogue: 0,0:03:55.59,0:03:58.59,Default,,0000,0000,0000,,2Dゲームに合うように Dialogue: 0,0:03:58.59,0:04:02.59,Default,,0000,0000,0000,,Raymanの様に手足が独立したデザインです。 Dialogue: 0,0:04:03.59,0:04:07.59,Default,,0000,0000,0000,,もしくは、スプライトアニメを用いた\Nコマアニメーションで表現する事も可能です。 Dialogue: 0,0:04:08.14,0:04:12.64,Default,,0000,0000,0000,,そのアプローチは後で背景の鳥に使用します。 Dialogue: 0,0:04:15.07,0:04:17.07,Default,,0000,0000,0000,,キャラクターの手足を別々に動かしたいので Dialogue: 0,0:04:17.07,0:04:20.19,Default,,0000,0000,0000,,Unityが別のスプライトとしてインポートされる様に Dialogue: 0,0:04:20.19,0:04:26.19,Default,,0000,0000,0000,,それぞれ分割して配置します。 Dialogue: 0,0:04:27.00,0:04:32.76,Default,,0000,0000,0000,,これにより、全てのスプライトを独立的に動く様に配置する事ができます。 Dialogue: 0,0:04:33.09,0:04:35.49,Default,,0000,0000,0000,,新しい"Character"ソートレイヤーに配置して Dialogue: 0,0:04:35.49,0:04:40.16,Default,,0000,0000,0000,,PositionのZの値を入力して描画順を設定します。 Dialogue: 0,0:04:48.81,0:04:50.81,Default,,0000,0000,0000,,プレイヤーキャラクターのスプライトは空のGameObjectの子供に設定し Dialogue: 0,0:04:50.81,0:04:52.81,Default,,0000,0000,0000,,親のオブジェクトにはコントロールスクリプト、コライダー、 Dialogue: 0,0:04:52.81,0:04:56.59,Default,,0000,0000,0000,,フィジックス、その他を付加します。 Dialogue: 0,0:04:56.59,0:04:58.59,Default,,0000,0000,0000,,その後、新しくなったAnimation Windowで Dialogue: 0,0:04:58.59,0:05:03.04,Default,,0000,0000,0000,,待機、移動、ジャンプ、攻撃、死亡の時の Dialogue: 0,0:05:03.04,0:05:06.90,Default,,0000,0000,0000,,各スプライトのパーツの動きを設定します。 Dialogue: 0,0:05:07.09,0:05:09.79,Default,,0000,0000,0000,,Animation windowのDopesheetビューを使う事で Dialogue: 0,0:05:09.79,0:05:11.79,Default,,0000,0000,0000,,簡単に設定ができます。 Dialogue: 0,0:05:13.41,0:05:16.00,Default,,0000,0000,0000,,親オブジェクトにアニメーションを追加して Dialogue: 0,0:05:16.00,0:05:19.40,Default,,0000,0000,0000,,子オブジェクトのKeyframeを作成します。 Dialogue: 0,0:05:19.40,0:05:21.40,Default,,0000,0000,0000,,再生位置を動かし、キャラクターのパーツを動かして Dialogue: 0,0:05:21.40,0:05:25.40,Default,,0000,0000,0000,,自動的にKeyframeを作ってアニメーションを作る事ができます。 Dialogue: 0,0:05:27.31,0:05:29.64,Default,,0000,0000,0000,,CurveとDopesheet、2つの表示を切り替える事で Dialogue: 0,0:05:29.64,0:05:36.73,Default,,0000,0000,0000,,タイミング及びデザインを調整も Dialogue: 0,0:05:36.73,0:05:38.73,Default,,0000,0000,0000,,完成したアニメーションを Dialogue: 0,0:05:38.73,0:05:43.37,Default,,0000,0000,0000,,ステートマシーンを使って切り替える事が出来ます。 Dialogue: 0,0:05:45.27,0:05:47.27,Default,,0000,0000,0000,,キャラクターのAnimator Controllerは\Nbipedを使用していないので Dialogue: 0,0:05:47.27,0:05:50.57,Default,,0000,0000,0000,,Apply Root Motionのチェックを解除して Dialogue: 0,0:05:50.57,0:05:53.67,Default,,0000,0000,0000,,Animate Physicsを有効にします。 Dialogue: 0,0:05:53.67,0:05:57.67,Default,,0000,0000,0000,,これで、物理エンジンで正しくアニメーションされる様になります。 Dialogue: 0,0:05:57.76,0:05:59.85,Default,,0000,0000,0000,,フィールド上を移動する為に Dialogue: 0,0:05:59.85,0:06:02.23,Default,,0000,0000,0000,,プレイヤーの足元にはCircle Colliderがあります。 Dialogue: 0,0:06:02.23,0:06:04.56,Default,,0000,0000,0000,,また、体を囲うBox Colliderもあります。 Dialogue: 0,0:06:04.56,0:06:07.06,Default,,0000,0000,0000,,これにより、段差をスムーズに乗り越える事ができ Dialogue: 0,0:06:07.06,0:06:09.45,Default,,0000,0000,0000,,ジャンプの時は頭が天井にをぶつかるようになります。 Dialogue: 0,0:06:09.80,0:06:12.53,Default,,0000,0000,0000,,キャラクターのアニメーションを制御するために、 Dialogue: 0,0:06:12.53,0:06:16.03,Default,,0000,0000,0000,,2Dフィジックスで動かすスクリプトを作りました。 Dialogue: 0,0:06:16.03,0:06:18.03,Default,,0000,0000,0000,,フィジクスを使ってキャラクターと Dialogue: 0,0:06:18.03,0:06:20.03,Default,,0000,0000,0000,,敵を動かしてもっとダイナミックな Dialogue: 0,0:06:20.03,0:06:21.42,Default,,0000,0000,0000,,ゲームプレーが可能になります。 Dialogue: 0,0:06:21.42,0:06:23.81,Default,,0000,0000,0000,,キャラクターのPlayerControlスクリプトでは Dialogue: 0,0:06:23.81,0:06:25.81,Default,,0000,0000,0000,,プレイヤーの入力をチェックします。 Dialogue: 0,0:06:25.81,0:06:27.81,Default,,0000,0000,0000,,入力は物理制御を通してキャラクターを移動させ、 Dialogue: 0,0:06:27.81,0:06:30.76,Default,,0000,0000,0000,,また、この入力をAnimatorに渡し Dialogue: 0,0:06:30.76,0:06:33.48,Default,,0000,0000,0000,,ステートから正しいアニメーションを選択して Dialogue: 0,0:06:33.48,0:06:37.47,Default,,0000,0000,0000,,それぞれのアニメーション間をスムーズに遷移させます。 Dialogue: 0,0:06:40.47,0:06:43.47,Default,,0000,0000,0000,,アニメーションからステートを作成すると便利な点は Dialogue: 0,0:06:43.47,0:06:47.47,Default,,0000,0000,0000,,物理の速度に応じてアニメーションの速度を変化させられる事です。 Dialogue: 0,0:06:47.47,0:06:51.86,Default,,0000,0000,0000,,速度に応じてアニメーションを切り替える必要はありません。 Dialogue: 0,0:07:23.12,0:07:25.12,Default,,0000,0000,0000,,FixedUpdateという関数は物理更新の毎に呼び出されます。 Dialogue: 0,0:07:25.12,0:07:28.58,Default,,0000,0000,0000,,この関数で水平方向の入力を取得し、 Dialogue: 0,0:07:28.58,0:07:32.58,Default,,0000,0000,0000,,AnimatorのSpeedパラメータに入れます。 Dialogue: 0,0:07:35.95,0:07:37.95,Default,,0000,0000,0000,,ステートマシーンの待機と移動間の遷移条件は Dialogue: 0,0:07:37.95,0:07:41.71,Default,,0000,0000,0000,,Speedパラメータが0.1以上かどうか、になります。 Dialogue: 0,0:07:41.71,0:07:44.02,Default,,0000,0000,0000,,その状況になると、アニメーターは待機のステートから Dialogue: 0,0:07:44.02,0:07:46.02,Default,,0000,0000,0000,,移動のステートにブレンドします。 Dialogue: 0,0:07:51.85,0:07:54.85,Default,,0000,0000,0000,,次は、プレイヤーのRigidbody2Dという2D物理要素に Dialogue: 0,0:07:54.85,0:07:58.18,Default,,0000,0000,0000,,力を加えてプレイヤーを動かします。 Dialogue: 0,0:07:59.62,0:08:02.52,Default,,0000,0000,0000,,キャラクターの向いている向きを制御するのにも Dialogue: 0,0:08:02.52,0:08:06.70,Default,,0000,0000,0000,,水平方向の入力を利用します。 Dialogue: 0,0:08:07.71,0:08:10.55,Default,,0000,0000,0000,,Unityでは、左キーを押すと-1が返り Dialogue: 0,0:08:10.55,0:08:14.57,Default,,0000,0000,0000,,右キーを押すと+1が返ってきます。 Dialogue: 0,0:08:15.07,0:08:18.70,Default,,0000,0000,0000,,入力された値に応じて、Flip()関数で Dialogue: 0,0:08:18.70,0:08:21.47,Default,,0000,0000,0000,,キャラクターのXスケールを反転させて Dialogue: 0,0:08:21.47,0:08:24.56,Default,,0000,0000,0000,,反対側を向いている状態を表現します。 Dialogue: 0,0:08:26.84,0:08:28.84,Default,,0000,0000,0000,,地面を接地しているかどうかを決めるために、 Dialogue: 0,0:08:28.84,0:08:31.60,Default,,0000,0000,0000,,Groundというレーヤーを追加して Dialogue: 0,0:08:31.60,0:08:34.98,Default,,0000,0000,0000,,すべての歩ける地面に適用します。 Dialogue: 0,0:08:43.39,0:08:45.96,Default,,0000,0000,0000,,そして2DのLinecastという関数を使い Dialogue: 0,0:08:45.96,0:08:47.96,Default,,0000,0000,0000,,キャラクターの足元にGroundレイヤーがあるかどうかを Dialogue: 0,0:08:47.96,0:08:50.23,Default,,0000,0000,0000,,チェックできます。 Dialogue: 0,0:08:50.23,0:08:52.77,Default,,0000,0000,0000,,より簡単に変更できるようにするため、 Dialogue: 0,0:08:52.77,0:08:54.77,Default,,0000,0000,0000,,接地判定用の空のGameObjectを追加しました Dialogue: 0,0:08:56.77,0:08:59.08,Default,,0000,0000,0000,,この空GameObjectにGizmoを追加する事で Dialogue: 0,0:08:59.08,0:09:01.08,Default,,0000,0000,0000,,接地判定の距離を調整できます。 Dialogue: 0,0:09:03.08,0:09:05.48,Default,,0000,0000,0000,,ゲーム中は Dialogue: 0,0:09:05.48,0:09:07.95,Default,,0000,0000,0000,,キャラクターは地面に設置している状況でのみでジャンプできます。 Dialogue: 0,0:09:08.45,0:09:10.45,Default,,0000,0000,0000,,プレイヤーの制御の詳細は、 Dialogue: 0,0:09:10.45,0:09:12.64,Default,,0000,0000,0000,,スクリプトのコメントを確認してみてください。 Dialogue: 0,0:09:12.64,0:09:15.64,Default,,0000,0000,0000,,プレイヤーの攻撃に関しては後ほどお話したいと思います。 Dialogue: 0,0:09:15.87,0:09:17.87,Default,,0000,0000,0000,,次は、このデモで Dialogue: 0,0:09:17.87,0:09:19.87,Default,,0000,0000,0000,,カメラがどのような動きをするか見てみましょう。 Dialogue: 0,0:09:21.29,0:09:24.35,Default,,0000,0000,0000,,2Dゲームにおいても、3Dゲームと変わらず Dialogue: 0,0:09:24.35,0:09:27.35,Default,,0000,0000,0000,,カメラの動作はとても重要です。 Dialogue: 0,0:09:27.82,0:09:30.58,Default,,0000,0000,0000,,古典的2Dアクションのカメラを学ぶために Dialogue: 0,0:09:30.58,0:09:35.62,Default,,0000,0000,0000,,スーパーファミコンのスーパーマリオワールドを見てみましょう。 Dialogue: 0,0:09:36.65,0:09:38.65,Default,,0000,0000,0000,,スーパーマリオワールドでは Dialogue: 0,0:09:38.65,0:09:42.65,Default,,0000,0000,0000,,カメラは横方向に追従しますが Dialogue: 0,0:09:42.65,0:09:47.65,Default,,0000,0000,0000,,画面の中心にはキャラクターに追従しない遊び幅があります。 Dialogue: 0,0:09:49.34,0:09:51.63,Default,,0000,0000,0000,,この遊び幅の外側に動こうとすると Dialogue: 0,0:09:51.63,0:09:54.04,Default,,0000,0000,0000,,カメラはプレイヤーの位置に追従します。 Dialogue: 0,0:09:54.04,0:09:56.86,Default,,0000,0000,0000,,高さ方向に対しては一定段階の高さを保ちますが、 Dialogue: 0,0:09:56.86,0:09:59.54,Default,,0000,0000,0000,,我々のゲームに関してはその必要はありません。 Dialogue: 0,0:09:59.54,0:10:03.54,Default,,0000,0000,0000,,ステージの横幅はそれほど長くなく Dialogue: 0,0:10:03.54,0:10:05.87,Default,,0000,0000,0000,,殆どが画面に収まる広さのステージです。 Dialogue: 0,0:10:07.21,0:10:11.21,Default,,0000,0000,0000,,ですので、カメラの水平の動きと垂直の動きは同じ動きにします。 Dialogue: 0,0:10:18.77,0:10:20.77,Default,,0000,0000,0000,,mainCameraのGameObjectに付属している Dialogue: 0,0:10:20.77,0:10:23.13,Default,,0000,0000,0000,,CameraFollowというスクリプトを見てみましょう。 Dialogue: 0,0:10:23.13,0:10:25.13,Default,,0000,0000,0000,,どのような働きをするのか、コメントを確認してください。 Dialogue: 0,0:10:26.13,0:10:28.84,Default,,0000,0000,0000,,色々な機能の中で最も重要なことは Dialogue: 0,0:10:28.84,0:10:30.84,Default,,0000,0000,0000,,ヒーローの宇宙人を倒す能力です。 Dialogue: 0,0:10:32.73,0:10:36.33,Default,,0000,0000,0000,,ヒーローのバズーカは発砲後の反動アニメーションがあります。 Dialogue: 0,0:10:36.33,0:10:38.89,Default,,0000,0000,0000,,このアクションはいくつかの部分に分かれています。 Dialogue: 0,0:10:38.89,0:10:41.64,Default,,0000,0000,0000,,Fireキーの入力があると Dialogue: 0,0:10:41.64,0:10:43.96,Default,,0000,0000,0000,,ロケットを発射して、オーディオを再生して Dialogue: 0,0:10:43.96,0:10:47.96,Default,,0000,0000,0000,,アニメーションステートを再生します。 Dialogue: 0,0:10:47.96,0:10:49.96,Default,,0000,0000,0000,,もっと詳しく調べてみましょう。 Dialogue: 0,0:10:49.96,0:10:52.41,Default,,0000,0000,0000,,Runや他のアニメーションの再生中に Dialogue: 0,0:10:52.41,0:10:54.41,Default,,0000,0000,0000,,Shootアニメーションを再生するのため、 Dialogue: 0,0:10:54.41,0:10:57.41,Default,,0000,0000,0000,,Shootingという別のレイヤーを作成しました。 Dialogue: 0,0:10:57.67,0:10:59.67,Default,,0000,0000,0000,,Weightプロパティを1にすると Dialogue: 0,0:10:59.67,0:11:02.53,Default,,0000,0000,0000,,Shootingレイヤーに含まれるパーツは Dialogue: 0,0:11:02.53,0:11:06.53,Default,,0000,0000,0000,,ベースレイヤーの動きを完全に上書きします。 Dialogue: 0,0:11:20.49,0:11:22.49,Default,,0000,0000,0000,,このレイヤーは、プログラムからShootトリガーを呼び出されると Dialogue: 0,0:11:22.49,0:11:25.35,Default,,0000,0000,0000,,いつでもShootアニメーションに切り替わります。 Dialogue: 0,0:11:27.35,0:11:30.54,Default,,0000,0000,0000,,Gunスクリプトのこの機能を調べてみましょう。 Dialogue: 0,0:11:32.70,0:11:35.14,Default,,0000,0000,0000,,ここで、アニメーターを操作して Dialogue: 0,0:11:35.14,0:11:37.40,Default,,0000,0000,0000,,ShootトリガーをTrueにします。 Dialogue: 0,0:11:37.40,0:11:40.51,Default,,0000,0000,0000,,トリガーはスイッチのように Dialogue: 0,0:11:40.51,0:11:43.24,Default,,0000,0000,0000,,次のフレームにFalseに戻り、再び使用できるようになります。 Dialogue: 0,0:11:43.24,0:11:45.51,Default,,0000,0000,0000,,これは攻撃のようなアクションにぴったりです。 Dialogue: 0,0:11:46.01,0:11:48.67,Default,,0000,0000,0000,,アニメーションをセットし、 Dialogue: 0,0:11:48.67,0:11:50.67,Default,,0000,0000,0000,,ロケットもこのスクリプトで発射します。 Dialogue: 0,0:11:50.67,0:11:52.67,Default,,0000,0000,0000,,オーディオを再生して Dialogue: 0,0:11:52.67,0:11:54.67,Default,,0000,0000,0000,,プレイヤーの向いている方向に対して Dialogue: 0,0:11:54.67,0:11:59.77,Default,,0000,0000,0000,,ロケットの速度を設定します。 Dialogue: 0,0:12:01.27,0:12:03.93,Default,,0000,0000,0000,,このスクリプトはヒーローの Dialogue: 0,0:12:03.93,0:12:05.29,Default,,0000,0000,0000,,Gunという空のGameObjectに付属します。 Dialogue: 0,0:12:05.29,0:12:08.07,Default,,0000,0000,0000,,空のGameObjectにスクリプトを追加するのは、 Dialogue: 0,0:12:08.07,0:12:11.07,Default,,0000,0000,0000,,簡単にロケットの発射位置を設定できるようにするためです。 Dialogue: 0,0:12:11.66,0:12:15.66,Default,,0000,0000,0000,,バズーカの先に空のGameObjectを配置して Dialogue: 0,0:12:15.66,0:12:21.01,Default,,0000,0000,0000,,オブジェクトの位置にロケットが生成されるようにします。 Dialogue: 0,0:12:40.24,0:12:42.80,Default,,0000,0000,0000,,ロケットは2DRigidbodyを持って Dialogue: 0,0:12:42.80,0:12:46.80,Default,,0000,0000,0000,,それに速度を与えて動かします。 Dialogue: 0,0:12:46.80,0:12:51.09,Default,,0000,0000,0000,,スプライトの排気炎を付け Dialogue: 0,0:12:51.09,0:12:53.09,Default,,0000,0000,0000,,パーティクルシステムの煙も足します。 Dialogue: 0,0:12:54.88,0:12:58.48,Default,,0000,0000,0000,,パーティクルシステムも新たなスプライト版機能が追加されました。 Dialogue: 0,0:12:58.48,0:13:02.48,Default,,0000,0000,0000,,煙のコマが描かれたスプライトをマテリアルに追加する事で Dialogue: 0,0:13:02.48,0:13:07.14,Default,,0000,0000,0000,,簡単にスプライトアニメーションのパーティクルを作成できます。 Dialogue: 0,0:13:16.12,0:13:18.93,Default,,0000,0000,0000,,敵またはフィールドにロケットが当たると Dialogue: 0,0:13:18.93,0:13:20.93,Default,,0000,0000,0000,,ロケットは消え Dialogue: 0,0:13:20.93,0:13:22.93,Default,,0000,0000,0000,,爆発が生成されます。 Dialogue: 0,0:13:22.93,0:13:25.93,Default,,0000,0000,0000,,爆発は単純なコマアニメーションを行うスプライトです。 Dialogue: 0,0:13:27.73,0:13:32.31,Default,,0000,0000,0000,,Sorting Layerで前景の最後に描画されるようにします。 Dialogue: 0,0:13:36.17,0:13:38.17,Default,,0000,0000,0000,,このようなスプライトに基づいたアニメーションの追加は、 Dialogue: 0,0:13:38.17,0:13:40.17,Default,,0000,0000,0000,,Project Panelからファイルを選んで Dialogue: 0,0:13:40.17,0:13:43.17,Default,,0000,0000,0000,,Sprite Modeを"Multiple"にします。 Dialogue: 0,0:13:44.57,0:13:46.57,Default,,0000,0000,0000,,これでスプライトエディタを使い Dialogue: 0,0:13:46.57,0:13:49.75,Default,,0000,0000,0000,,手動、もしくは自動的に分割する事ができます。 Dialogue: 0,0:13:49.75,0:13:52.40,Default,,0000,0000,0000,,ファイルをスプライトに設定する利点は、 Dialogue: 0,0:13:52.40,0:13:54.40,Default,,0000,0000,0000,,この様にApplyをクリックするだけで Dialogue: 0,0:13:54.40,0:13:56.76,Default,,0000,0000,0000,,Unityはファイルの子供としてそれぞれのスプライトを生成し Dialogue: 0,0:13:56.76,0:13:58.76,Default,,0000,0000,0000,,そのスプライトをそのまま使う事が出来ます。 Dialogue: 0,0:13:59.70,0:14:01.69,Default,,0000,0000,0000,,これがロケットの構造です。 Dialogue: 0,0:14:01.69,0:14:03.69,Default,,0000,0000,0000,,どのようにして敵を倒すのかは、 Dialogue: 0,0:14:03.69,0:14:06.53,Default,,0000,0000,0000,,後ほど敵の項目でお話したいと思います。 Dialogue: 0,0:14:07.10,0:14:09.44,Default,,0000,0000,0000,,話をプレイヤーキャラクターに戻して Dialogue: 0,0:14:09.44,0:14:12.19,Default,,0000,0000,0000,,HPとダメージのことを調べましょう。 Dialogue: 0,0:14:12.19,0:14:14.19,Default,,0000,0000,0000,,HPはfloatとして保存されています。 Dialogue: 0,0:14:14.19,0:14:18.19,Default,,0000,0000,0000,,敵からのダメージはTakeDamage関数を呼び出して与えます。 Dialogue: 0,0:14:18.54,0:14:20.54,Default,,0000,0000,0000,,プレイヤーが簡単に倒されてしまうのを避けるため、 Dialogue: 0,0:14:20.54,0:14:22.54,Default,,0000,0000,0000,,前回のダメージからrepeatDamagePeriodが経過した場合のみ Dialogue: 0,0:14:22.54,0:14:25.34,Default,,0000,0000,0000,,ダメージを受けます。 Dialogue: 0,0:14:26.52,0:14:29.13,Default,,0000,0000,0000,,また、敵から逃げ易くするため、 Dialogue: 0,0:14:29.13,0:14:31.13,Default,,0000,0000,0000,,そしてプレイヤーのダメージを表現するため、 Dialogue: 0,0:14:31.13,0:14:34.13,Default,,0000,0000,0000,,ダメージを受けたキャラクターをヒットバックさせます。 Dialogue: 0,0:14:34.84,0:14:40.54,Default,,0000,0000,0000,,TakeDamage関数で一時的にプレイヤーのジャンプを止め、 Dialogue: 0,0:14:40.54,0:14:44.54,Default,,0000,0000,0000,,敵からキャラクターへの方向に物理的な力を与えて動かします。 Dialogue: 0,0:14:46.12,0:14:50.68,Default,,0000,0000,0000,,hurtForceの変数はInspectorで表示しているので、 Dialogue: 0,0:14:50.68,0:14:55.32,Default,,0000,0000,0000,,スクリプトを編集せずにゲーム要素の調整が出来ます。 Dialogue: 0,0:14:55.32,0:14:57.32,Default,,0000,0000,0000,,ダメージ表現に加えて Dialogue: 0,0:14:57.32,0:14:59.81,Default,,0000,0000,0000,,もちろんプレイヤーのHPも減らした上で Dialogue: 0,0:14:59.81,0:15:02.20,Default,,0000,0000,0000,,HPバーを更新します。 Dialogue: 0,0:15:02.20,0:15:06.62,Default,,0000,0000,0000,,HPの差を表示するのためにバーの長さを縮め Dialogue: 0,0:15:06.62,0:15:08.88,Default,,0000,0000,0000,,色を緑から赤に補間します。 Dialogue: 0,0:15:09.82,0:15:14.64,Default,,0000,0000,0000,,最大HPに対する現在のHPの比率を計算すれば出来ますね。 Dialogue: 0,0:15:14.64,0:15:17.87,Default,,0000,0000,0000,,HPバーはシンプルなスプライト2つで構成されています。 Dialogue: 0,0:15:17.87,0:15:20.96,Default,,0000,0000,0000,,バーの外周部分とバーの部分です。 Dialogue: 0,0:15:21.74,0:15:23.74,Default,,0000,0000,0000,,これらもPhotoshopでデザインして Dialogue: 0,0:15:23.74,0:15:25.95,Default,,0000,0000,0000,,2つのテクスチャを書き出しました。 Dialogue: 0,0:15:25.95,0:15:27.95,Default,,0000,0000,0000,,このスプライトのImport Settingsで Dialogue: 0,0:15:27.95,0:15:30.47,Default,,0000,0000,0000,,Pivotを左の中央に設定して Dialogue: 0,0:15:30.47,0:15:34.05,Default,,0000,0000,0000,,スケールを小さくした時に左側に縮んでいく様にします。 Dialogue: 0,0:15:48.57,0:15:50.57,Default,,0000,0000,0000,,この2つのスプライトは Dialogue: 0,0:15:50.57,0:15:52.57,Default,,0000,0000,0000,,プレイヤーに追従するスクリプトを追加した Dialogue: 0,0:15:52.57,0:15:54.57,Default,,0000,0000,0000,,空のGameObjectの子供として配置します。 Dialogue: 0,0:15:54.57,0:15:58.62,Default,,0000,0000,0000,,プレイヤーのGameObjectの位置とオフセットを足すので Dialogue: 0,0:15:58.62,0:16:00.62,Default,,0000,0000,0000,,表示位置はInspectorで調整できます。 Dialogue: 0,0:16:16.21,0:16:18.21,Default,,0000,0000,0000,,プレイヤーは残りHPが0になると Dialogue: 0,0:16:18.21,0:16:20.21,Default,,0000,0000,0000,,コライダーをトリガーモードに設定されるので Dialogue: 0,0:16:20.21,0:16:22.62,Default,,0000,0000,0000,,プレイヤーはステージを突き破って落ちます。 Dialogue: 0,0:16:22.62,0:16:24.62,Default,,0000,0000,0000,,その時、最前面に描画される様に Dialogue: 0,0:16:24.62,0:16:30.19,Default,,0000,0000,0000,,SpriteRendererを”UI”ソートレイヤーに移動させます。 Dialogue: 0,0:16:31.59,0:16:34.22,Default,,0000,0000,0000,,プレイヤーの死亡アニメーションは、2段階で構成されます。 Dialogue: 0,0:16:34.22,0:16:37.25,Default,,0000,0000,0000,,最初の”Death”は、帽子と武器を落とします。 Dialogue: 0,0:16:37.25,0:16:38.63,Default,,0000,0000,0000,,2番目は”Falling”という名前です。 Dialogue: 0,0:16:38.63,0:16:40.63,Default,,0000,0000,0000,,アニメータにExit Timeのコンディションを使って Dialogue: 0,0:16:40.63,0:16:44.00,Default,,0000,0000,0000,,”Death”アニメーションが終わると Dialogue: 0,0:16:44.00,0:16:47.23,Default,,0000,0000,0000,,自動的に”Falling”に遷移します。 Dialogue: 0,0:16:50.77,0:16:52.77,Default,,0000,0000,0000,,最後に、プレイヤの動きと攻撃を停止させるために Dialogue: 0,0:16:52.77,0:16:57.27,Default,,0000,0000,0000,,PlayerControlとGunのスクリプトを無効にします。 Dialogue: 0,0:16:58.34,0:17:00.73,Default,,0000,0000,0000,,Die関数はPublicなので Dialogue: 0,0:17:00.73,0:17:03.33,Default,,0000,0000,0000,,どこからでも呼び出せます。 Dialogue: 0,0:17:03.33,0:17:05.04,Default,,0000,0000,0000,,例えば、水に落ちた時。 Dialogue: 0,0:17:05.04,0:17:07.73,Default,,0000,0000,0000,,プレイヤーが水に落ちるとゲームをリセットするために、 Dialogue: 0,0:17:07.73,0:17:09.73,Default,,0000,0000,0000,,トリガーコライダーとスクリプトだけがある Dialogue: 0,0:17:09.73,0:17:12.46,Default,,0000,0000,0000,,KillTriggerという名前のGameObjectがあります。 Dialogue: 0,0:17:12.46,0:17:15.01,Default,,0000,0000,0000,,Removerスクリプトには Dialogue: 0,0:17:15.01,0:17:17.01,Default,,0000,0000,0000,,川にザブンと飛び込んだ敵を消して Dialogue: 0,0:17:17.01,0:17:20.78,Default,,0000,0000,0000,,飛沫のアニメーションとサウンドを再生する役割があります。 Dialogue: 0,0:17:21.44,0:17:24.00,Default,,0000,0000,0000,,しかしこのコライダーにプレイヤーが衝突すると Dialogue: 0,0:17:24.00,0:17:27.09,Default,,0000,0000,0000,,PlayerHealthスクリプトの”Die”関数呼び出して Dialogue: 0,0:17:27.09,0:17:30.09,Default,,0000,0000,0000,,プレイヤーを画面外に動かしている間カメラの追従を無効にし、 Dialogue: 0,0:17:30.09,0:17:35.09,Default,,0000,0000,0000,,2秒後にステージをリセットするコルーチンを実行します。 Dialogue: 0,0:17:37.07,0:17:39.07,Default,,0000,0000,0000,,さて、プレイヤーキャラクターの死について考えるのではなく、 Dialogue: 0,0:17:39.07,0:17:42.07,Default,,0000,0000,0000,,彼が生き残るために何をあげればいいかを考えましょう。 Dialogue: 0,0:17:42.48,0:17:47.48,Default,,0000,0000,0000,,このゲームでは2種類のプレイヤーを助けるアイテムボックスが落下してきます。 Dialogue: 0,0:17:47.48,0:17:49.91,Default,,0000,0000,0000,,一つは爆弾、もう一つは救急箱です。 Dialogue: 0,0:17:50.41,0:17:52.96,Default,,0000,0000,0000,,このアイテムは2つの部分で構成されています。 Dialogue: 0,0:17:52.96,0:17:55.69,Default,,0000,0000,0000,,箱本体と落下傘の部分です。 Dialogue: 0,0:17:58.04,0:18:03.31,Default,,0000,0000,0000,,これらの要素は空のオブジェクトでグループにして動かす事ができます。 Dialogue: 0,0:18:03.76,0:18:07.76,Default,,0000,0000,0000,,落下傘の中心を親オブジェクトの中心に位置します。 Dialogue: 0,0:18:09.04,0:18:14.90,Default,,0000,0000,0000,,これで箱を、落下中左右に揺れるようにできます。 Dialogue: 0,0:18:15.30,0:18:17.30,Default,,0000,0000,0000,,オブジェクトが落下させる為には Dialogue: 0,0:18:17.30,0:18:19.30,Default,,0000,0000,0000,,単にRigidbodyを追加するだけです。 Dialogue: 0,0:18:19.30,0:18:22.30,Default,,0000,0000,0000,,そして、箱の着地やプレイヤーの取得を検出する為に Dialogue: 0,0:18:22.30,0:18:24.30,Default,,0000,0000,0000,,コライダーも追加します。 Dialogue: 0,0:18:24.96,0:18:26.96,Default,,0000,0000,0000,,箱が着陸したら Dialogue: 0,0:18:26.96,0:18:30.51,Default,,0000,0000,0000,,落下傘をしぼませるステートに遷移します。 Dialogue: 0,0:18:30.51,0:18:33.30,Default,,0000,0000,0000,,他のアニメータと同じ様に Dialogue: 0,0:18:33.30,0:18:34.91,Default,,0000,0000,0000,,アニメーターはオブジェクトのステートを管理しています。 Dialogue: 0,0:18:34.91,0:18:36.91,Default,,0000,0000,0000,,デフォルトではfloatDownステートですが Dialogue: 0,0:18:36.91,0:18:42.91,Default,,0000,0000,0000,,LandトリガーがTrueになると着陸のステートに切り替わります。 Dialogue: 0,0:18:43.97,0:18:47.38,Default,,0000,0000,0000,,この処理はスクリプトのonTriggerEnter関数で実行しています。 Dialogue: 0,0:18:47.38,0:18:49.73,Default,,0000,0000,0000,,タグで地面を見て地面かどうかを判断しています。 Dialogue: 0,0:18:49.73,0:18:53.82,Default,,0000,0000,0000,,箱を親オブジェクトからデタッチし、 Dialogue: 0,0:18:53.82,0:18:55.09,Default,,0000,0000,0000,,Rigidbodyを追加します。 Dialogue: 0,0:18:55.09,0:18:57.49,Default,,0000,0000,0000,,それにより、地形の影響を受け Dialogue: 0,0:18:57.49,0:19:00.62,Default,,0000,0000,0000,,斜面に着陸した場合でも正しい角度で停止します。 Dialogue: 0,0:19:00.62,0:19:03.67,Default,,0000,0000,0000,,さて、爆弾を見てみましょう。 Dialogue: 0,0:19:03.67,0:19:05.67,Default,,0000,0000,0000,,爆弾を取得する処理は Dialogue: 0,0:19:05.67,0:19:08.47,Default,,0000,0000,0000,,箱に付属したBombPickupスクリプトで行われます。 Dialogue: 0,0:19:08.47,0:19:11.05,Default,,0000,0000,0000,,爆弾を拾うと、箱を消して Dialogue: 0,0:19:11.05,0:19:14.05,Default,,0000,0000,0000,,プレイヤーに付属したLayBombsスクリプト内の Dialogue: 0,0:19:14.05,0:19:17.05,Default,,0000,0000,0000,,爆弾を持つ数を加算します。 Dialogue: 0,0:19:17.55,0:19:19.55,Default,,0000,0000,0000,,LayBombsのスクリプトは Dialogue: 0,0:19:19.55,0:19:22.55,Default,,0000,0000,0000,,プレイヤーが爆弾を持っているかどうかをチェックして Dialogue: 0,0:19:22.55,0:19:24.55,Default,,0000,0000,0000,,BombのPrefabを生成します。 Dialogue: 0,0:19:27.42,0:19:32.95,Default,,0000,0000,0000,,BombのPrefabはBombDetonationというcoroutineで Dialogue: 0,0:19:32.95,0:19:36.00,Default,,0000,0000,0000,,待ってExplode関数を呼び出します。 Dialogue: 0,0:19:36.79,0:19:39.54,Default,,0000,0000,0000,,Explode関数は様々な動作があります。 Dialogue: 0,0:19:39.54,0:19:41.54,Default,,0000,0000,0000,,まず、他の爆弾が出現できる様にするため Dialogue: 0,0:19:41.54,0:19:43.79,Default,,0000,0000,0000,,変数bombLaidをリセットします。 Dialogue: 0,0:19:43.79,0:19:46.79,Default,,0000,0000,0000,,そしてアイテム管理に新しい箱が追加可能な事を通知し Dialogue: 0,0:19:46.79,0:19:49.79,Default,,0000,0000,0000,,範囲内にいる全ての敵を倒します。 Dialogue: 0,0:19:50.51,0:19:53.05,Default,,0000,0000,0000,,最後の部分がどのような働きをするのか注目して下さい。 Dialogue: 0,0:19:53.05,0:19:55.05,Default,,0000,0000,0000,,残りHPに関係なく全ての敵を倒すために Dialogue: 0,0:19:55.05,0:19:57.18,Default,,0000,0000,0000,,Physics.OverlapCircleAllを使って Dialogue: 0,0:19:57.18,0:20:02.97,Default,,0000,0000,0000,,全てのEnemyタグが付けられたオブジェクトを取得します。 Dialogue: 0,0:20:03.47,0:20:08.61,Default,,0000,0000,0000,,foreachループで見つかった全ての敵のHPを0にして Dialogue: 0,0:20:08.61,0:20:13.66,Default,,0000,0000,0000,,爆弾から敵の方向に吹き飛ばします。 Dialogue: 0,0:20:16.30,0:20:18.53,Default,,0000,0000,0000,,ループが終わったら Dialogue: 0,0:20:18.53,0:20:21.38,Default,,0000,0000,0000,,エフェクトを再生し\N爆発の効果音を再生して Dialogue: 0,0:20:21.38,0:20:24.38,Default,,0000,0000,0000,,爆弾を消去します。 Dialogue: 0,0:20:26.87,0:20:29.25,Default,,0000,0000,0000,,爆発には2つの要素で構成されています。 Dialogue: 0,0:20:29.25,0:20:32.25,Default,,0000,0000,0000,,主な部分は、一時的に登場して消える丸です。 Dialogue: 0,0:20:33.58,0:20:35.58,Default,,0000,0000,0000,,2番目の部分はロケットの爆発のスプライトを再利用した Dialogue: 0,0:20:35.58,0:20:38.58,Default,,0000,0000,0000,,星のパーティクルです。 Dialogue: 0,0:20:42.26,0:20:44.26,Default,,0000,0000,0000,,効率よくこのパーティクルを使用するために Dialogue: 0,0:20:44.26,0:20:46.26,Default,,0000,0000,0000,,常にシーンに配置しておき Dialogue: 0,0:20:46.26,0:20:51.26,Default,,0000,0000,0000,,表示させたいタイミングで表示位置に動かして再生します。 Dialogue: 0,0:20:52.51,0:20:54.51,Default,,0000,0000,0000,,メモリにパーティクルを常駐させる事で効率が良くなります。 Dialogue: 0,0:20:54.51,0:20:56.51,Default,,0000,0000,0000,,これは、プレイヤーは1つしか爆弾を持てない、 Dialogue: 0,0:20:56.51,0:21:00.51,Default,,0000,0000,0000,,つまり爆発も1つしか表示されないので出来る事です。 Dialogue: 0,0:21:01.01,0:21:04.66,Default,,0000,0000,0000,,パーティクルを常駐させておくことで Dialogue: 0,0:21:04.66,0:21:12.79,Default,,0000,0000,0000,,毎回パーティクルのインスタンスを生成して削除するよりも効率的です。 Dialogue: 0,0:21:15.71,0:21:18.61,Default,,0000,0000,0000,,ですが、ロケットの爆発は一度にたくさん出る事があるので Dialogue: 0,0:21:18.61,0:21:21.61,Default,,0000,0000,0000,,毎回生成と削除する事が必要です。 Dialogue: 0,0:21:22.11,0:21:26.11,Default,,0000,0000,0000,,プレイヤーが敵を倒してポイントを得る処理を見てみましょう。 Dialogue: 0,0:21:26.61,0:21:28.43,Default,,0000,0000,0000,,これは2つのパーツでできています。 Dialogue: 0,0:21:28.43,0:21:31.66,Default,,0000,0000,0000,,プレイヤーが100ポイントを獲得した表示と Dialogue: 0,0:21:31.66,0:21:34.66,Default,,0000,0000,0000,,画面の上に表示されているスコアーが加算されてゆくUIです。 Dialogue: 0,0:21:35.52,0:21:39.30,Default,,0000,0000,0000,,得点のアニメーションは1と0のスプライトで構成されています。 Dialogue: 0,0:21:40.19,0:21:42.87,Default,,0000,0000,0000,,空のオブジェクトの子として配置し Dialogue: 0,0:21:42.87,0:21:47.03,Default,,0000,0000,0000,,アニメーションが終わると簡単なスクリプトで Dialogue: 0,0:21:47.03,0:21:49.18,Default,,0000,0000,0000,,シーンから削除されます。 Dialogue: 0,0:21:49.18,0:21:52.18,Default,,0000,0000,0000,,アニメーションの最後にイベントを追加し Dialogue: 0,0:21:52.18,0:21:55.18,Default,,0000,0000,0000,,スクリプトの削除関数を呼び出します。 Dialogue: 0,0:22:06.14,0:22:09.70,Default,,0000,0000,0000,,ScoreUIは、カスタムフォントと Dialogue: 0,0:22:09.70,0:22:11.70,Default,,0000,0000,0000,,プレイヤーの得点を管理するスクリプト付属された Dialogue: 0,0:22:11.70,0:22:13.70,Default,,0000,0000,0000,,シンプルなGUIコンポーネントです。 Dialogue: 0,0:22:13.70,0:22:16.75,Default,,0000,0000,0000,,Scoreはパブリック変数です。 Dialogue: 0,0:22:16.75,0:22:18.98,Default,,0000,0000,0000,,なので敵が倒された時、 Dialogue: 0,0:22:18.98,0:22:20.98,Default,,0000,0000,0000,,Enemyのスクリプトからポイントを追加する事ができます。 Dialogue: 0,0:22:20.98,0:22:24.98,Default,,0000,0000,0000,,さて、今度は敵の話です。\N詳細を見てみましょう。 Dialogue: 0,0:22:25.48,0:22:28.26,Default,,0000,0000,0000,,このゲームには2種類の敵が登場します。 Dialogue: 0,0:22:28.26,0:22:30.85,Default,,0000,0000,0000,,緑のナメクジモンスターと Dialogue: 0,0:22:30.85,0:22:33.85,Default,,0000,0000,0000,,宇宙船に乗った宇宙人です。 Dialogue: 0,0:22:34.56,0:22:40.56,Default,,0000,0000,0000,,挙動はほぼ同じなので同じスクリプトを使い回し、 Dialogue: 0,0:22:40.56,0:22:44.56,Default,,0000,0000,0000,,Inspectorから移動速度とHPを調整して差を付けています。 Dialogue: 0,0:22:46.63,0:22:49.09,Default,,0000,0000,0000,,各敵はそれぞれのWalkアニメーションがあります。 Dialogue: 0,0:22:49.09,0:22:51.09,Default,,0000,0000,0000,,ナメクジには動く尾があり Dialogue: 0,0:22:51.09,0:22:54.44,Default,,0000,0000,0000,,宇宙船の敵は行ったり来たりします。 Dialogue: 0,0:22:55.99,0:22:57.99,Default,,0000,0000,0000,,ナメクジの尾の部分は Dialogue: 0,0:22:57.99,0:23:01.99,Default,,0000,0000,0000,,スプライトインポータで独立したパーツとしてインポートしました。 Dialogue: 0,0:23:01.99,0:23:04.43,Default,,0000,0000,0000,,なので、尾の部分を独立して動かす事ができ、 Dialogue: 0,0:23:04.43,0:23:07.47,Default,,0000,0000,0000,,スプライト全体が伸び縮みししないようになっています。 Dialogue: 0,0:23:07.47,0:23:09.47,Default,,0000,0000,0000,,Pivotを右にする事で Dialogue: 0,0:23:09.47,0:23:14.12,Default,,0000,0000,0000,,そこから尾が伸び縮みするアニメーションをつけます。 Dialogue: 0,0:23:16.47,0:23:19.91,Default,,0000,0000,0000,,まぶたを上下に動かして Dialogue: 0,0:23:19.91,0:23:21.91,Default,,0000,0000,0000,,Z値でスプライトがソートされるようにし Dialogue: 0,0:23:21.91,0:23:25.85,Default,,0000,0000,0000,,目がまぶたの下に表示されるようにします。 Dialogue: 0,0:23:28.86,0:23:31.26,Default,,0000,0000,0000,,次の敵はかなりシンプルです。 Dialogue: 0,0:23:31.26,0:23:34.04,Default,,0000,0000,0000,,行ったり来たりを繰り返すアニメーションにします。 Dialogue: 0,0:23:35.79,0:23:39.79,Default,,0000,0000,0000,,敵の動きには、Rigidbodyの速度をセットします。 Dialogue: 0,0:23:41.22,0:23:43.88,Default,,0000,0000,0000,,宇宙船が障害物、例えば壁等への衝突は Dialogue: 0,0:23:43.88,0:23:47.82,Default,,0000,0000,0000,,ある点がコライダーと重なっているかどうかを Dialogue: 0,0:23:47.82,0:23:51.31,Default,,0000,0000,0000,,Physics.OverlapPoint関数を用いて検知します。 Dialogue: 0,0:23:51.31,0:23:53.85,Default,,0000,0000,0000,,障害物、このステージ両端のタワーは Dialogue: 0,0:23:53.85,0:23:55.85,Default,,0000,0000,0000,,障害物としてタグが設定されています。 Dialogue: 0,0:23:55.85,0:23:59.16,Default,,0000,0000,0000,,衝突を検知するとFlip関数を呼び出して Dialogue: 0,0:23:59.16,0:24:03.76,Default,,0000,0000,0000,,敵のXスケールを反対にして反対方向に向かわせます。 Dialogue: 0,0:24:04.07,0:24:06.07,Default,,0000,0000,0000,,敵を倒す判定のために、 Dialogue: 0,0:24:06.07,0:24:11.03,Default,,0000,0000,0000,,ロケットが敵に当たる度にHurt関数を呼び出します。 Dialogue: 0,0:24:14.96,0:24:18.96,Default,,0000,0000,0000,,この関数の内部では、敵のHPを1づつ下げています。 Dialogue: 0,0:24:19.21,0:24:23.21,Default,,0000,0000,0000,,FixedUpdate関数の中で敵のHPを監視しており、 Dialogue: 0,0:24:23.21,0:24:27.12,Default,,0000,0000,0000,,0になっている場合はDeath関数が呼び出されます。 Dialogue: 0,0:24:31.22,0:24:33.91,Default,,0000,0000,0000,,敵が死亡する時には様々な処理が実行されます。 Dialogue: 0,0:24:33.91,0:24:39.91,Default,,0000,0000,0000,,まず、2Dのキャラクターの全てのスプライトを非表示にします。 Dialogue: 0,0:24:40.94,0:24:42.94,Default,,0000,0000,0000,,これは、アニメーションのためにある複数のスプライトを Dialogue: 0,0:24:42.94,0:24:46.94,Default,,0000,0000,0000,,1つの死亡したキャラクターのスプライトに差し替えたいからです。 Dialogue: 0,0:24:47.74,0:24:51.74,Default,,0000,0000,0000,,メインのSprite RendererにdeadEnemyのスプライトを設定します。 Dialogue: 0,0:24:54.16,0:24:58.16,Default,,0000,0000,0000,,Scoreスクリプトのパブリック変数に対し\Nスコアを加算します。 Dialogue: 0,0:24:58.16,0:25:00.74,Default,,0000,0000,0000,,敵の死亡のビジュアルをわかりやすくするため Dialogue: 0,0:25:00.74,0:25:03.53,Default,,0000,0000,0000,,Rigidbodyにトルクを追加して回転させます。 Dialogue: 0,0:25:04.44,0:25:08.44,Default,,0000,0000,0000,,背景を突き抜けて川に落下させたいので Dialogue: 0,0:25:08.88,0:25:10.88,Default,,0000,0000,0000,,すべてのコライダーを探して Dialogue: 0,0:25:10.88,0:25:13.58,Default,,0000,0000,0000,,IsTriggerパラメーターをTrueにします。 Dialogue: 0,0:25:13.58,0:25:17.13,Default,,0000,0000,0000,,これで背景のコライダーを突き抜ける事になります。 Dialogue: 0,0:25:17.41,0:25:21.05,Default,,0000,0000,0000,,死亡時に再生するオーディオクリップ中の1つを選び再生し Dialogue: 0,0:25:21.05,0:25:25.05,Default,,0000,0000,0000,,前述の得点表示アニメーションを再生します。 Dialogue: 0,0:25:27.87,0:25:29.87,Default,,0000,0000,0000,,敵をシーンから削除するため、 Dialogue: 0,0:25:29.87,0:25:31.87,Default,,0000,0000,0000,,KillTriggerオブジェクトを使います。 Dialogue: 0,0:25:31.87,0:25:34.76,Default,,0000,0000,0000,,これは先ほど説明した通り、\N水しぶきをあげオブジェクトを消去する機能を持ちます。 Dialogue: 0,0:25:34.76,0:25:36.76,Default,,0000,0000,0000,,プレイヤー以外のオブジェクトが触ると Dialogue: 0,0:25:36.76,0:25:39.95,Default,,0000,0000,0000,,水しぶきのエフェクトを表示して\Nオブジェクトを削除します。 Dialogue: 0,0:25:39.95,0:25:42.95,Default,,0000,0000,0000,,効果音は水しぶきエフェクトが表示される時に Dialogue: 0,0:25:42.95,0:25:45.95,Default,,0000,0000,0000,,付属しているAudio Clipが同時に再生されます。 Dialogue: 0,0:25:45.95,0:25:47.95,Default,,0000,0000,0000,,なので、オブジェクトを生成するだけで Dialogue: 0,0:25:47.95,0:25:50.63,Default,,0000,0000,0000,,効果音も鳴るようになっています。 Dialogue: 0,0:25:55.15,0:25:57.15,Default,,0000,0000,0000,,動的なオブジェクトを追加し Dialogue: 0,0:25:57.15,0:26:01.15,Default,,0000,0000,0000,,背景を飾ってステージを完成させましょう。 Dialogue: 0,0:26:02.30,0:26:05.70,Default,,0000,0000,0000,,飛んでいる白鳥と Dialogue: 0,0:26:05.70,0:26:07.12,Default,,0000,0000,0000,,川岸を走るバスとタクシーを追加します。 Dialogue: 0,0:26:07.12,0:26:12.63,Default,,0000,0000,0000,,まずは白鳥のスプライトシートをPhotoshopで描いて Dialogue: 0,0:26:12.63,0:26:14.63,Default,,0000,0000,0000,,InspectorのMultiple Sprite Modeを使ってインポートしました。 Dialogue: 0,0:26:16.05,0:26:18.80,Default,,0000,0000,0000,,この方法では Dialogue: 0,0:26:18.80,0:26:21.80,Default,,0000,0000,0000,,Unityが全てのコマを選択し自動的にインポートして Dialogue: 0,0:26:21.80,0:26:24.80,Default,,0000,0000,0000,,アセットのヒエラルキーに追加してくれます。 Dialogue: 0,0:26:24.57,0:26:27.27,Default,,0000,0000,0000,,このコマは連続したアニメーションのセットなので、 Dialogue: 0,0:26:27.27,0:26:29.27,Default,,0000,0000,0000,,全てのコマをシーンにドラッグするだけで Dialogue: 0,0:26:29.27,0:26:32.34,Default,,0000,0000,0000,,Unityが自動的にアニメーションさせてくれます。 Dialogue: 0,0:26:32.34,0:26:35.31,Default,,0000,0000,0000,,ね、簡単でしょ? Dialogue: 0,0:26:35.31,0:26:37.75,Default,,0000,0000,0000,,白鳥は背景に追加します。 Dialogue: 0,0:26:37.75,0:26:40.16,Default,,0000,0000,0000,,速度を与えて画面中を動けるように Dialogue: 0,0:26:40.16,0:26:43.16,Default,,0000,0000,0000,,Rigidbody2Dを追加します。 Dialogue: 0,0:26:43.36,0:26:47.33,Default,,0000,0000,0000,,バスとタクシーのように、白鳥もPrefabです。 Dialogue: 0,0:26:49.25,0:26:51.25,Default,,0000,0000,0000,,バスとタクシーのPrefabには、 Dialogue: 0,0:26:51.25,0:26:54.25,Default,,0000,0000,0000,,Sprite Importerで車体とタイヤを分割して Dialogue: 0,0:26:54.25,0:26:57.25,Default,,0000,0000,0000,,シンプルなアニメーションを生成します。 Dialogue: 0,0:26:58.39,0:27:01.79,Default,,0000,0000,0000,,これらにもRigidbody2Dを追加して Dialogue: 0,0:27:01.79,0:27:03.79,Default,,0000,0000,0000,,速度の追加で画面内を動かす事ができます。 Dialogue: 0,0:27:07.27,0:27:10.27,Default,,0000,0000,0000,,白鳥、バス、タクシー Dialogue: 0,0:27:10.27,0:27:12.27,Default,,0000,0000,0000,,この3種のオブジェクトの生成を Dialogue: 0,0:27:12.27,0:27:14.27,Default,,0000,0000,0000,,管理するスクリプトを作成してあります。 Dialogue: 0,0:27:14.27,0:27:17.61,Default,,0000,0000,0000,,BackgroundPropsSpawnerスクリプトは Dialogue: 0,0:27:18.61,0:27:21.83,Default,,0000,0000,0000,,頻度、速度、そして最初の位置を管理しています。 Dialogue: 0,0:27:21.83,0:27:26.52,Default,,0000,0000,0000,,3種のオブジェクトに同じスクリプトを使うことができます。 Dialogue: 0,0:27:26.52,0:27:28.52,Default,,0000,0000,0000,,生成するPrefabとプロパティを変更します。 Dialogue: 0,0:27:30.52,0:27:35.85,Default,,0000,0000,0000,,詳細は、スクリプトのコメントをご覧ください。 Dialogue: 0,0:27:36.17,0:27:40.40,Default,,0000,0000,0000,,最後に、動いている雲、川の流れ、そして霧を追加しました。 Dialogue: 0,0:27:41.32,0:27:44.52,Default,,0000,0000,0000,,親オブジェクトに2つのスプライトを持たせ、 Dialogue: 0,0:27:44.52,0:27:48.00,Default,,0000,0000,0000,,ゆっくりと横に動かします。 Dialogue: 0,0:27:50.00,0:27:54.65,Default,,0000,0000,0000,,アニメーションはループで動き続けます。 Dialogue: 0,0:27:59.18,0:28:02.03,Default,,0000,0000,0000,,以上が、私たちがどのようにしてこのゲームを作ったか、の全てです。 Dialogue: 0,0:28:02.03,0:28:05.03,Default,,0000,0000,0000,,このビデオが2Dゲームの作り方の参考になれば嬉しく思います。 Dialogue: 0,0:28:05.51,0:28:07.51,Default,,0000,0000,0000,,将来的には、より基本的なプロジェクトと Dialogue: 0,0:28:07.51,0:28:08.97,Default,,0000,0000,0000,,チュートリアルをお届けしたいと考えています。 Dialogue: 0,0:28:08.97,0:28:12.68,Default,,0000,0000,0000,,私達は、Unity4.3についての感想と Dialogue: 0,0:28:12.68,0:28:14.68,Default,,0000,0000,0000,,あなたの作る素晴らしい2Dゲームが本当に楽しみです。 Dialogue: 0,0:28:14.95,0:28:16.48,Default,,0000,0000,0000,,それでは、ご清聴ありがとうございました!