...

講演ファイル(コースB):大野 功二(PDF)

by user

on
Category: Documents
6

views

Report

Comments

Transcript

講演ファイル(コースB):大野 功二(PDF)
【コースB】 Unity2Dではじめる2Dゲーム作り
初心者徹底ガイド
&
ゲームアプリのUI考え方と実装
自己紹介
お手元にあるUSBメモリから
Unite2016Tokyo_TrainingDay_CourseBフォルダを
お持ちいただいたパソコンのデスクトップに
コピーしてください。
コピーが終わったら、Unity2D_Ohno.zip
を解凍してください。
6時間のワークショップです。
3分間ほど時間を設けますので、
お隣の方にご挨拶、どうぞ!
アンケート
• 学生の方
• Windowsの方
• Unityでゲームを1本でも作ったことがある方
(どんなものでもいいです)
• Unityでスクリプトを使ってプログラムをした経験のない方
このワークショップの内容は、
後日、ビデオ・スライド・プロジェクトファイルのすべてが
公開されます。
何かわからないこと、
お困りのことが発生したら、
手をあげて、お近くのTAにご相談ください
コースBの内容
• 12:00 Unity2Dではじめる2Dゲーム作り初心者徹底ガイド
(大野 功二)
• 15:00 ゲームアプリのUI考え方と実装
(池和田 有輔)
Unity2Dではじめる2Dゲーム作り
初心者徹底ガイド
12:00∼ Chapter 1:
Unity2Dの基本について解説(お話中心)
13:50∼ 休憩
13:00∼ Chapter 2:
MecanimとPhysics2Dを使って、アクションゲームに挑戦!
13:50∼ 休憩
14:00∼ Chapter 3:
レベルデザインしてみよう!
14:45∼ コースB前半終了・休憩
15:00∼ コースB後半・ゲームアプリのUI考え方と実装
なお、プログラムはC#で実装します。
また、C#の基礎知識については、深く解説しません。
今日は、完全に理解することよりも、
「このような処理をしている」という全体的な視野が持てるように
解説します。
ファイルのコピーと展開はできましたか?
UnityとUnity2Dの基本を知ろう!
Q.Unityとは?
A.ゲームに必要な複数の機能の集合体です!
ア
2Dグ
2D
セット
ラフィック
物理
(Unity2D)
バンドル
3Dグラ
uGUI
エンジン
Unity
フィック
サウンド
Engine
3D
SpeedTree
物理
アニメーショ
エンジン
ン
AI
Q.Unity2Dとは?
A.2Dゲーム制作に必要な機能の総称です
2D
2D物理
グラフィック
エンジン
表示
(Box2D)
2Dグラフィック
アニメーション
Mecanim
データ管理
Unity2Dゲームの作り方の流れ
Step.1・「プロジェクト」の作成
Step.2・「アセット」を作る
Step.3・「シーン」を作成する
→実行して確認
Step.4・「スクリプト」を作成する
→実行して確認
これから、この4ステップについて解説しますが、
「解説」「実装」の手順で説明します。つまり2回説明します。
「解説」は聞くだけでも大丈夫です。
Step.1・「プロジェクト」の作成
「プロジェクト」とは?
1本のゲームを作るための大きな管理ファイルやフォルダ
解説
Unityの起動
②
①
解説
プロジェクトの作成
③
④
⑤
解説
成功・失敗
Unity2Dプロジェクト
Unity3Dプロジェクト
(シーンビューが平面で表示される)
(シーンビューが立体で表示される)
レイアウトはDefaultで行います
解説
Gameビューの設定を確認
①
②
③
編集モード
トランスフォームツールバーの
一番右端の「2D編集ボタン」で編集
「Unityエディタ」の各ウィンドウの名称
Unity
エディタ
プロジェクト作成・実演
・プロジェクトの作成
・シーンビューの簡単な操作(移動・拡大縮小・カメラをダブルクリック)
Step.2・アセットを作る
「アセット」とは?
ゲームを作るための「素材(資産)」
グラフィックや音楽などのでデータなど
(この後に作られるスクリプトファイルなども含まれます)
グラフィックデータを作る
画像ツールで作成したり、アセットストアで購入したり
①
②
画像データをプロジェクトブラウザに
ドラッグ&ドロップするだけ
データのインポート・実演
・データをプロジェクトブラウザからドラッグ&ドロップ
・インスペクタでドラッグしたデータの内容を確認
Step.3・「シーン」を作成する
「シーン」とは?
ゲームの1場面を構成する管理単位です。
1ステージを1シーンで作るのが一般的です。
空のシーンに名前をつけて保存する
②
①
③
OR
ショートカット
「Command + S」「CTRL+S」
落ちたときのために、
こまめにCOMMAND+S,CTRL+Sで
セーブを!
シーンのセーブ・実演
キャラと地形でシーンを作る
「ゲームオブジェク」と「コンポーネント」で
プレイヤーキャラを作る
ゲームオブジェクト
コンポーネント コンポーネント
コンポーネント
コンポーネント
コンポーネント
ゲームオブジェクト
Transform
位置と向きと大
きさ
SpriteRend
ere
スプライト
表示
「Transformコンポーネント」
位置(Position)
回転(Rotation)
大きさ(Scale)
を管理するコンポーネント
Unityエディタと座標
「SpriteRenderコンポーネント」
2Dグラフィック表示の仕組みを
「スプライト」という
実際に作るのは、Projectビューからシーンビューへ
ドラッグ&ドロップするだけ
①
シーンの作成・実演
重なりの問題
地形のOder in layerを−1に設定
ソーティングレイヤー
ソーティングレーイヤー
オーダーインレイヤー
実行してみよう!・実演
Mecanimでキャラクタをアニメーションさせる
Mecanmとは?
アニメーションを行うためのアニメーションエンジン
本来は3D用アニメーションエンジンだったが、
Unity2Dの採用にあわせて、
2Dスプライトもアニメーションできるようになった
アニメーションさせる
ゲームオブジェクト
Transform
位置や向き
SpriteRend
ere
スプライト
表示
Animator
アニメーション
アニメーション
簡単な方法
複数の画像を、シーンビューにドラッグ&ドロップさせるだけ
アニメーションの作成・実演
Physics2D
キャラクターを動かしたり、アタリ判定を行うには、
物理演算エンジンを使うのがオススメ!
2DゲームならUnityに搭載されている2D物理エンジン
「Physics2D」を使います。
Rigidbody2Dコンポーネントを使って、
キャラクタを動かす
ゲームオブジェクト
Transform
位置や向き
SpriteRend
ere
スプライト
表示
RigidBody2D
物理エンジン
Animator
アニメーショ
ン
「Rigidbody2Dコンポーネント」
剛体(硬い物体)の
運動をシミュレートする
コンポーネント
Rigidbody2Dコンポーネントの新規追加
①
③
②
Rigidbody2Dコンポーネントの作成・実演
・Rigidbody2Dを作成
ConstrainのZの設定
「Collider2Dコンポーネント」
アタリ判定を実現する
コンポーネント
BoxCollider2Dは
矩形のアタリ判定が取れる
コライダーコンポーネントの新規追加
①
③
②
BoxCollider2Dを追加
BoxCollider2Dコンポーネントの作成・実演
[キャラクタ]
・BoxCollider2Dを作成
・EditColliderボタンでこりジョンの大きさを調整
[地形]
・キャラクタと同様の手順でアタリ判定をつける
・なお、Rigidbody2Dは不要(地形は動かないので)
「プレハブ」を作って、楽をしよう
「プレハブ」とは、シーンを超えて再利用できる
ゲームオブジェクトです。コンポーネント情報も維持されます。
[プレハブ]
ステージA
プレイヤー
[プレハブ]
地形A
ステージB
「プレハブ」はハンコ!
Projectブラウザにドラッグ&ドロップするだけで、
そのゲームオブジェクトはプレハブになります。
①
プレハブから作成した複数のゲームオブジェクと
は、プレハブを編集するだけで、それらのゲームオ
ブジェクとに反映されます。
プレハブの作成・実演
・地形のプレハブを作成
・スケールを変更してプレハブの機能を確認
Step.4・スクリプトを作成する
Unityにキャラをジャンプさせるコンポーネントはあ
りません。ジャンプさせるにはスクリプト(プログ
ラム)を作成する必要があります。
複雑な制御は
スクリプトでプログラムする
ゲームオブジェクト
Transform
位置や向き
キー入力でジャンプ
Script Component
SpriteRend
ere
スプライト
表示
SPACEキー
RigidBody2D
物理エンジン
Animator
アニメーショ
ン
今回プログラムで使うクラス(API)
・Rigidbody2D
物理エンジンの剛体を管理するクラス
・GetComponent
コンポーネントを取得するクラス
・Input.GetKeyDown
キー入力を取得できるInputクラスとGetKeyDownメソッド
・Vector2
「座標」や「速さ」や「力」を表現するための2次元ベクトル
Rigidbody2Dをスクリプトで制御する
Velocity,AddForce
rigidbody2D.Velocity(速度)
速さベクトル
Vector(x,y) = (5,0)
rigidbody2D.AddForce(力)
SPACEキー
力ベクトル
Vector(x,y) = (0,300)
スクリプトエディタの作成まで
Step.1・Projectブラウザからスクリプト作成
Step.2・ファイル名変更
Step.3・スクリプトエディタ起動→クラス名確認
Step.1・Projectブラウザからスクリプト作成
①
②
③
Step.2・ファイル名変更
③
④
Step.3・スクリプトエディタ起動→クラス名確認
⑤ダブルクリック
失敗している場合は、
“NewBehavioursScript”というクラス名になる
この場合は、”Player”に書き直す
スクリプトエディタ
Mono
Visual
Develop
Studio
エディタ
エディタ
ジャンプスクリプトを作ってみる
スクリプト入力が苦手な人は、
Unite2016Tokyo_TrainingDay_CourseB/Unity2D_Ohno/Samples/Player.cs
をUnityのプロジェクトブラウザにドラッグ&ドロップして、そのまま使ってください。
スクリプトをゲームオブジェクとに設定
ゲームオブジェクとを選択して、
スクリプトファイルをドラッグ
&ドロップする
①
③
スクリプトファイルの作成
スクリプトの作成・実演
・スクリプトをゲームオブジェクトにアタッチ
・PlayerのRigidbody2DのGravityScaleを10に修正し、
さらにジャンプパワーも1500に修正
イベントとは?
「イベント」とは、Unityエンジンが任意の条件や段階で呼
び出す処理です。よく使うのは、次の4つです。
・Awake シーン開始時に呼び出される
・Start ゲームオブジェクト作成後に呼び出される
・FixedUpdate 物理エンジンの1ステップ処理ごとに呼び出
される
・Update 描画タイミングごとに呼び出される
http://docs.unity3d.com/ja/current/Manual/ExecutionOrder.html
休憩10分
13:00から再開です
Unity2Dではじめる2Dゲーム作り
初心者徹底ガイド
12:00∼ Chapter 1:
Unity2Dの基本について解説(お話中心)
13:50∼ 休憩
13:00∼ Chapter 2:
MecanimとPhysics2Dを使って、アクションゲームに挑戦!
13:50∼ 休憩
14:00∼ Chapter 3:
レベルデザインしてみよう!
14:45∼ コースB前半終了・休憩
15:00∼ コースB後半・ゲームアプリのUI考え方と実装
MecanimとPhysics2Dを使って、
アクションゲームに挑戦!
Chapter1で、ここまで追いつかなかった方は、
下記のフォルダをご利用ください。
Chapter1の完成版は、下記のフォルダにあります。
Unityエディタの「FIle」メニューから、「OpenProject」を選択して、
下記のプロジェクトファイルを開いてください。
/Unity2D_Ohno/Samples/Chapter1End_UnityChanGun
Unity2D_Ohno/Chapter2/Sprite/の中の
画像データをAssets/Spritesへインポートしてください
①
②
画像データをプロジェクトブラウザに
ドラッグ&ドロップするだけ
ガンシューティング
「Unity Chan Gun!」を作ってみましょう
Unityちゃんを左右に移動させる
スクリプトを作成する
1・左右移動
2・カメラにも対応
キャラを反転さて反対方向に移動させる
transform.localScale(-1.0,1.0,1.0)
transform.localScale(1.0,1.0,1.0)
rigidbody2D.Velocity(速度)
rigidbody2D.Velocity(速度)
速さベクトル
Vector2D(-5,0)
速さベクトル
Vector2D(5,0)
今回プログラムで使うクラス(API)
・transform
ゲームオブジェクトのトランスフォームコンポーネント
・GameObject.Find
ゲームオブジェクトを検索するメソッド
・Vector3
「座標」や「速さ」や「力」を表現するための3次元ベクトル
移動スクリプトを作ってみる(Chapter2-1)
スクリプトの作成・実演
・スクリプトの編集
撃つアニメーションを作成する
(新規アニメーションの追加)
Step.1・新規アニメーションとステートの登録
Step.2・トランジションの作成
Step.3・スクリプトの作成
Animator
・アニメーションを管理するためのコンポーネント
Animation Clip
・アニメーションデータ
Mecanimの仕組み(各コンポーネントとの関係)
Mecanimの仕組み(スクリプトからの制御)
Animator
今回のゲーム用に、打つアニメーションの構造を作る
アニメーションステートとは?
新規ステートの追加
①
アニメーションの作成・実演
・スプライト画像のインポート
・攻撃アニメーションを複数選択して、
Playerゲームオブジェクトにドラッグ&ドロップ
・AnimatorにFireトリガーを追加
トランジションとは?
トランジションのプロパティ
①
③
②
今回プログラムで使うクラス(API)
・Animator
Animatorコンポーネント
Animator.SetTriggerでトリガーをセットできる
攻撃遷移スクリプトを作る(Chapter2-2)
スクリプトの作成・実演
・スクリプトの編集
弾を発射する
1・弾の作成
2・弾のスクリプトの作成
弾の作成
1・弾のゲームオブジェクト作成
2・Rigidbody2DとCirle Collider 2D
コンポーネントを追加
3・スクリプトを作成・設定
4・プレハブ化
5・シーンにある元の弾は削除
今回プログラムで使うクラス(API)
・Instantiate
ゲームオブジェクトを生成する
・OnTriggerEnter2D
トリガータイプのコライダーの接触を検知したときに
呼ばれるイベント
・Collider2D
上記のタイミングで取得するコライダーのクラス
・DestroyObject
ゲームオブジェクトの削除
弾スクリプトを作ってみる(Chapter2-3)
弾スクリプトを作ってみる(Chapter2-3)
タグの設定
スクリプトの作成・実演
・スクリプトの編集
・プレイヤーのゲームオブジェクトに
プレハブ化した弾のゲームオブジェクトを設定
・タグの設定
アニメーションイベントで弾を発射する
アニメーションイベントの作り方
1・スクリプトを作成
2・アニメーションイベントを設定
今回プログラムで使うクラス(API)
とくになし
弾スクリプトを作ってみる(Chapter2-4)
弾スクリプトを作ってみる(Chapter2-4)
スクリプトの作成・実演
・スクリプトの編集
・アニメーションイベントの実装
敵を作る
1・スプライトを複数選んで、
シーンにドラッグ&ドロップ
敵の移動アルゴリズムを作る
1秒ごとにRigidbody2D.AddForceでジャンプさせる
Rigidbody2D.Addforce(力)
力ベクトル
Vector3D(0,300)
敵のコンポーネント設定
今回プログラムで使うクラス(API)
・Time.time 時間を取得できる
・OnWillRenderObject
カメラで映ったか(描画したか)取得できる
・SceneManager
シーン遷移の管理クラス
敵を作ってみる(Chapter2-5)
スクリプトの作成・実演
・スクリプトの編集
休憩10分
14:00から再開です
Unity2Dではじめる2Dゲーム作り
初心者徹底ガイド
12:00∼ Chapter 1:
Unity2Dの基本について解説(お話中心)
13:50∼ 休憩
13:00∼ Chapter 2:
MecanimとPhysics2Dを使って、アクションゲームに挑戦!
13:50∼ 休憩
14:00∼ Chapter 3:
レベルデザインしてみよう!
14:45∼ コースB前半終了・休憩
15:00∼ コースB後半・ゲームアプリのUI考え方と実装
レベルデザインしてみよう!
Chapter2で、ここまで追いつかなかった方は、
下記のフォルダをご利用ください。
Chapter1の完成版は、下記のフォルダにあります。
Unityエディタの「FIle」メニューから、「OpenProject」を選択して、
下記のプロジェクトファイルを開いてください。
/Unity2D_Ohno/Samples/Chapter2End_UnityChanGun
Unity2D_Ohno/Chapter2/Sprite/の中の
画像データをAssets/Spritesへインポートしてください
①
②
画像データをプロジェクトブラウザに
ドラッグ&ドロップするだけ
作業ステップ
• 10分 レベルデザインの基本について説明
• 15分 お手本作成
• 15分 ゲームジャムに挑戦!
「レベルデザイン」ってなに?
• 「難易度調整」のことではなく、
「ゲームの場(レベル)や流れ」の設計のこと
• ゲームのおもしろさは、ゲームシステムも重要だが、
レベルデザインは、それと同じかそれ以上に重要
• ゲームシステムの問題はレベルデザインで補えることもあるが、
レベルデザインの問題はゲームシステムでは補えない
レベルデザインのよくある失敗アルアル
• 変化がすくない
• グラフィックは違うけど、遊びは同じに見える
• ドラマッティックではない
• 初見殺しが多い
• もう一度プレイしたいと思わない
対策
• 変化がすくない
→コントラストを作る
• グラフィックは違うけど、遊びは同じに見える
→遊びの「幅」と「深さ」の違いを知る
• ドラマッティックではない
→序破急やインタレストカーブを感じない
• 前に進みたくなる動機がない、初見殺しが多い
→フックがない
• もう一度プレイしたいと思わない
→失敗した理由(原因)がわかりにくレベルデザイン
「くやしい」ではなく、ゲームが悪いと思わせるレベルデザイン
コントラストとは?
• コントラストは「物事の差」
• レベルデザインのうまいレベルデザイナーは、
コントラストを考えてテンポ・リズムを作っている
• コントラストを強くすると「アクションが明確になる」
• コントラストを強烈にすると、
プレイヤーに「驚き」「ショック」を与えられる
レベルデザインでのコントラスト
コントラストを明確にすると「アクション」ハッキリがする
レベルデザインでのコントラスト
コントラストを強いと、プレイヤーに驚きを与える
コントラスト・捕捉
• 派手にしたければ、コントラストを常に強めに
• 落ち着きのある体験を演出したいなら、コントラストを弱めに
レベルデザインにおける「幅」と「深さ」
• ゲームの遊びには「幅」と「深さ」がある
• 「幅」は、目新しいチャレンジ
例えば、新しい敵やギミックなど
• 「深さ」は、応用した遊びの楽しさ
例えば、AとBという敵がいた場合、AとBを順番に出すのは「幅」
を生かした遊び。AとBを組み合わせて同時に戦わせるのは「深
さ」の遊び
簡単な戦闘バリエーションの作り方
[幅]
• 体力を増やす、減らす
• 体を大きくする、小さくする
• 移動を早くする、遅くする
[深さ]
• 敵の組み合わせ
• 敵と地形の組み合わせ
構成
[ステージとしての構成]
・重力
・横構成、縦構成、斜め構成
[おもしろさとしての構成]
・このあと説明
[物語としての構成]
・今回は説明しません
序破急・インタレストカーブ
• おもしろいレベルデザインを作りたい場合、
もっとも簡単な方法は「序」「破」「急」の展開を作ること
• これで作られるゲームのおもしろさが「インタレストカーブ」
• インタレストカーブは「コントラストの差」で作られる
レベルデザインダイアログを作る
具体的に設計する
難易度は一気にあげない。必ず休憩できる場所を作る
• 難易度を上げるだけにすると、プレイヤーは作れる
• ある程度あげたら、一旦休憩を挟む。そして、下げる
• 難易度にも「幅」と「深さ」がある
「フック」を作る
• 「フック」とは、前兆
• フックがあれば、プレイヤーは学習する
• フックがあれば、プレイヤーは失敗の原因を知ることができる
• フックがあれば、レベルデザイナーがゲームの進行を誘導して
も、プレイヤーは「自分で選択」したと感じる
「くやしい!」と思わせる
• 失敗の理由を明確にプレイヤーに分からせる
(フックなど)
• 失敗の理由がわかりにくいレベルデザインをしない
( 失敗の理由がわかりにくいギミックを作らない)
• 「簡単にできる1つのことから、同時に2つのことをさせる」
展開
難易度と高低差を同じにしている
敵の種類を増やす
スケール2倍
スケール3倍
ブロックを追加
実際に作ってみます!
最後に15分だけ、自由にレベルデザインしてみてください。
できたら、隣の人にあそんでもらいましょう!
本日使ったUnity Chan!データは、
WEBでも公開しています。
http://unity-chan.com
休憩15分
15:00から
「 ゲームアプリのUI考え方と実装」
スタートです!!
次のワークショップで使うzipファイルを
休憩中に解答お願いします。
Fly UP