593 Views
September 19, 19
スライド概要
2019/9/14に開催されたUnity道場 幕張スペシャル3 -Education編-の講演スライドです。
講師:安原広和(ユニティ・テクノロジーズ・ジャパン合同会社/東京工科大学メディア学部)
Unityのイベント資料はこちらから:https://www.slideshare.net/UnityTechnologiesJapan/clipboards
リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。
1
Unity道場 幕張スペシャル - Education編 - 「Playground」を魔改造!? ゲームデザイン授業への活用 Unity Technologies Japan合同会社/ 東京工科大学メディア学部特任准教授 安原広和 (この講演スライドは後ほどアップされます) 2
「Playground」を魔改造!? ゲームデザイン授業への活用 1、 Playgroundのご紹介 2、 実際の授業について 3、 まとめ ポストモーテム 3
1、 Playgroundのご紹介 用意された2Dアセットとスクリプトを使って、 Unity初心者のための入門ゲームエディター 4
「Playground」を演習に使おうと思った動機 ・ 使い勝手の良い、「スクリプト」が用意されている ・ グラフィックのアセットが用意されている 31種類 (同じ素材の、使い方の違いを参加者同士が比較しやすい) ・ Unityをはじめて触れる学生にも有効 ・ 学生に「Unity2D」に触れる機会をつくる (下からは当たらないプラットフォームなど、2D独特のエフェクターなど) 5
Project 「Playground」は「Learn Unity」の「Project」内に置かれています 1 2 3 6
「Playground」は「AssetStore」から無料でダウンロードできます 7
「Playground」にはあらかじめ、作例が6種類用意されています 「FootBall」 「Defender」 「Adventure」 「Roguelike」 「Maze」 「Lander」 8
作例のプロジェクトを開いてみるだけで、 用意されたスクリプトがどのように使われるのかが分かります 9
「Playground」には31種類のスクリプトが用意されています これらをキャラクターオブジェクトに入れるだけで 基本的なゲームのアクションをつくることができます 10
各スクリプトの機能と使い方は「Playground」の Reference Guideのページに説明されています 「オブジェクトを常に一定の方向に移動させる」 11
「Unity Learn」に順を追って各スクリプトの説明が書かれています 「出現させる」 「キー操作でジャンプ」 「キー操作で出現させる」 「キー操作で移動」 12
習熟度にあわせて各スクリプトの説明が続きます 「アイテム効果」 「何かが起きたら、あることが起きる」 (if~、then・・・) 13
動くものをすぐにつくって、授業中にプレゼンすることが可能です 14
使われているスクリプト グラフィック アセット スクリプト アセット 「出現させる」 「オブジェクトを常に一定の方向に移動させる」 「空のオブジェクト」 「惑星」 「キー操作で移動」 「宇宙船」 「弾」 「キー操作で出現させ飛ばす」 「一定時間後に壊す」 「何かが起きたら、あることが起きる」 「宇宙船」 「惑星」 爆発 「爆発パーティクル」 15
2、 実際の授業について その場で2Dゲーム(?)を作って動かせる! ・・できるかも ・ ・ 学齢期の子どもや初心者の興味を惹きやすい! プログラムの教育に欠かせない即時性 Unity「Playground」の強み 16
ゲーム教育の難しさは 「プログラム教育」で終わらないところ 回路を組み合わせて 行う表現活動 回路(プログラム) アランケイ:コンピュータは ファンタジーアンプリファイア(増幅器) 17
そして、鍛えたいものは 職業としての「現場力」 予算がない! けど、新しい企画作れ! 今あるものを使って 新しいモノを作る ・使いまわせるプログラム ・どこかで使ったグラフィック 制約がある中で、「正解」を提示するのがゲームデザイナー 18
今期の受講生 15人 Unityの基本的な機能と「キャラクター操作」することができる学生 ・・3年生 6人 そして、Unityをほぼ触ったことがない学生 9人 授業に 使ってみよう・・ 想定外の事態・・ で、お決まりの というエピソードを交えて お話しします 19
90分授業の時間配分 授業の解説資料とC#スクリプトとは事前に学内サーバーに上げておきました 25~35分 : 提出された課題の各自発表と評価 20~30分 : 資料を見ながらゲームデザインの講義 30~45分 : 各自がUnityで実習、質問 3分 来週までの課題の説明 : 20
課題の提出方法 課題はPC用にビルドしたファイル(6種類ほど)を 用意したGoogleドライブにzip圧縮して上げてもらいました 毎週15本の新作ゲーム×15週 = 225本のゲームができあがる! 教師は大変! だけど、学生は多くのアイデアを見ることができる 21
第1回 「Playgroundのインストール」 エディターの操作 第2回 「Game Overの表示」 第3回 「Platform」 第4回 「Joint」 第5回 「キーを押す 第6回 「Shooter」 第7回 「UI」 第8回 「エネミーの動き」 エネミーはあそび相手 第9回 「リソース」 コイン消費 第10回 「制限」 第11回 「持つ運ぶ投げる、そしてアニメーション」 Animatorの使い方 第12回 「攻撃するエネミー」 オブジェクト間のフラグの受け渡し 第13回 「索敵」 第14回 「索敵・トップダウンヴュー」 第15回 「カウントダウンとゲージ」 当たってはいけないオブジェクト 下からすり抜ける床 「キー操作」 Push」 傾ける ゴールを置く ベルトコンベア 浮力 2Dのジョイント各種 ゴール表示 上から落ちてくるオブジェクト 流体 磁力 斥力 リプレイをつくる 単純なキー操作 キーを押すだけで「様々な動き」を作る 何かを撃ちだす スコア 武器 撃つことからの創造 集めた数の表示 索敵範囲 動きでつくるあそび 説明の表示 残弾数 コルーチン アイテム = 壊すもの 報酬の獲得 アイテムでつくるあそび はまりをなくすための救済策 追跡攻撃するエネミー 巡回パトロール 危険を知らせるアニメーション 防具の装備 さまざまなアイテムによるリソース管理 22
始めは「Playground」提供のアセットで前期すべてをやり抜くつもりだった・・ 第1回 「Playgroundのインストール」 第2回 「Game Overの表示」 第3回 「Platform」 第4回 「Joint」 第5回 「キーを押す 第6回 「Shooter」 第7回 「UI」 第8回 「エネミーの動き」 第9回 「リソース」 第10回 「制限」 第11回 「持つ運ぶ投げる、そしてアニメーション」 第12回 「攻撃するエネミー」 第13回 「索敵」 第14回 「索敵・トップダウンヴュー」 第15回 「カウントダウンとゲージ」 「キー操作」 Push」 「Playground」 「Playground」+足しました 「Playground」ちょっと変更 「Playground」・・なのかな? 「Unity」って・・C#便利ですね 「Unity」です 23
各回に使用したスクリプトと内容 第1回 「Playgroundのインストール」 エディターの操作 ・ 第2回 「Game Overの表示」 Tag 傾ける ゴールを置く ゴール表示 「ゴールオブジェクト」に当たったら、「Goal」サインをOnにする いわゆる「ピタゴラ装置」 当たってはいけないオブジェクト 上から落ちてくるオブジェクト ・ 「Killエリア」に入ったら、「GameOver」サインをOnにする ・ 「当たってはいけない」オブジェクトを出現させて落下させます 24
第3回 「Platform」 下からすり抜ける床 ベルトコンベア 浮力 流体 ・ Unityの「Physics2D」機能を使ってみる (「Playground」とは直接関係のないものです) ・ 「リプレイ」のスクリプトをつくる 磁力 斥力 リプレイをつくる 学生の課題として、つくったシーンを提出してもらったのですが、毎週15本のゲーム作品を 採点するのが大変だったので、すべての作例に「リプレイ」機能を必須としました 25
第4回 「Joint」 「キー操作」 2Dのジョイント各種 上下左右、 単純な押すだけのキー操作 ・ 第5回 「キーを押す Push」 単純なキー操作でプレイヤーが能動的にオブジェクトを動かす 「プレイヤー」の出現! キーを押すだけで「様々な動き」を作る ・ ・ 断続的なキー操作で動きを制御する ほかの「Joint」などと組み合わせる 学生がUnity2019インストールして動かなくなる事案発生! 26
第6回 「Shooter」 何かを撃ちだす 撃つことでつくる 弾撃ちたいです 撃ちだす方向を変える Jump 「もっと能動的に動かしたい!」という学生の要望 ・ 決められた範囲の角度だけ回転するように改造 ・ ジャンプするキャラクター 「ジャンプ」して攻撃するキャラクターの誕生 27
第7回 「UI」 スコア加算 集めた数の表示 アイテム を集める ・ 「Health」が0になった時に爆発エフェクトを出すように改造 ・ アイテムを取った時に効果エフェクトを出すように改造 ・ エネミーオブジェクトのHP 28
どのくらいの改造なのかといえば・・
using UnityEngine;
using System.Collections;
[AddComponentMenu("Playground/Attributes/Health System")]
public class HealthSystemAttribute : MonoBehaviour
{
public int health = 3;
private UIScript ui;
private int maxHealth;
// Will be set to 0 or 1 depending on how the GameObject is
tagged
// it's -1 if the object is not a player
private int playerNumber;
public ParticleSystem deathEffect;
1
private void Start()
{
// Find the UI in the scene and store a reference for later use
ui = GameObject.FindObjectOfType<UIScript>();
// Set the player number based on the GameObject tag
switch(gameObject.tag)
{
case "Player":
playerNumber = 0;
break;
case "Player2":
playerNumber = 1;
break;
default:
PlayerNumber = -1;
break;
}
このように数行を書きたすだけです
// Notify the UI so it will show the right initial amount
if(ui != null
&& playerNumber != -1)
{
ui.SetHealth(health, playerNumber);
}
//DEAD
if(health <= 0)
{
deathEffect.transform.position = this.transform.position;
deathEffect = Instantiate(deathEffect);
deathEffect.Play();
maxHealth = health;
//note down the maximum health to avoid going over it when the player
gets healed
}
}
}
}
// changes the energy from the player
// also notifies the UI (if present)
public void ModifyHealth(int amount)
{
//avoid going over the maximum health by forcin
if(health + amount > maxHealth)
{
amount = maxHealth - health;
2
Destroy(gameObject);
「HealthSystemAttribute」に
①、②の青い部分を付け足しました
爆発パーティクルを入れられるようにして
HPが「0」になった時にパーティクルをPlay()させます
}
health += amount;
// Notify the UI so it will change the number in the corner
if(ui != null
&& playerNumber != -1)
{
ui.ChangeHealth(amount, playerNumber);
}
29
第8回 「エネミーの動き」 エネミーはあそび相手 動きでつくるあそび ・ パトロール プラットフォームに付ければエレベータなども作ることが可能 ・ wonder ・ 追いかける エネミー以外のものに入れることも考える ・ 回転 ランダムに動き回る エフェクトなどにも利用 完全に違うスクリプトをつくりました 回転中心が決められないため「位置決め」が難しい 30
第9回 「リソース」 コイン消費 説明の表示 報酬の獲得 アイテムでつくるあそび ・ 集めたリソース量を表示する ・ 当たると、「吹き出し」に情報が表示される ・ エリアに入ると、リソースが「消費」される (買い物) ・ HPが0になると、爆発してアイテムが表示されるように改造しました 「Playground」のリソース・UI関連の スクリプトは改編が難しい システムの根っこの部分で 関連しあってるためクラスだけを 書き換えても動かなくなります 31
第10回 「制限」 武器 ・ 回数制限のある攻撃 残弾数を制限したあそび はまりをなくすための救済策 「Shooter」を改造して、弾数の制限を加えました 失敗しても救済策のある仕組み 32
第11回 「持つ運ぶ投げる、そしてアニメーション」 ・ モノをつかんで運ぶ 投げる Animatorの使い方 「PickUpAndHold」を改造して、オブジェクトの持つ位置を変えます 壁にアイテムを押しつけると不具合が起きるため アニメーション したいです この講義回でほぼ「Playground」のスクリプトの説明をし終えました 学生からの要望を聞きました 簡単な2パターンチェンジのアニメーション 33
第12回 「攻撃するエネミー」 コルーチン 連射 オブジェクト間のフラグの受け渡し 「Playground」では扱われない領域に突入! アニメーションは 「Playground」では できない領域 ・ ・ 「Shooter」を改造して、コルーチンを組み込みました ・ 「Animator」のフラグを組み込みました 別オブジェクトにあるクラスの「Aminator」のフラグを受け渡すスクリプト Robot オブジェクト 発射場所 オブジェクト エネミー オブジェクト C#スクリプト C#スクリプト C#スクリプト フラグ Animato r ファイル フラグ フラグ Animato r ファイル 34
第13回 「索敵」 索敵範囲 追跡攻撃するエネミー 危険を知らせるアニメーション ・ 「PickUpAndHold」を改造して、オブジェクトの持つ位置を変えます ・ 「Patrol」を改造して、巡回を止めるフラグを入れます ・ 「索敵範囲」のフラグを受け渡すスクリプト ・ 「Shooter」を改造して、索敵フラグで発動するスクリプト ・ 「索敵範囲」のアニメーションのためのスクリプト 「Playground」のスクリプトを 組み合わせてもできないから スクリプトを新しく書き直します 1週間では新しいゲーム制作は困難 35
第14回 「索敵・トップダウンヴュー」 巡回パトロール 防具の装備 ・ ・ 2Dシーンでの「LookAt」スクリプトをつくります ターゲットの方向に弾を撃つスクリプト ・ 索敵範囲のフラグ ・ 索敵範囲に入ったターゲットを攻撃するスクリプト ・ 防具を進行方向に向けるスクリプト ・ 攻撃を防具で消すスクリプト 「Playground」にないから スクリプトをつくる領域に突入! もうUnityの授業! 36
第15回 「カウントダウンとゲージ」 さまざまなアイテムによるリソース管理 ・ 「GameManager」スクリプトを用意して、時間を管理します ・ 獲得した「時間」を足すスクリプト ・ 残り時間によってゲージの色を変えるスクリプト 普通にUnityのUIの授業! 「Playground」での表示を UnityのUIを使って置き換える 37
3、 まとめ ポストモーテム ・ 年齢を問わず、初心者にはとても適した教材だと思います これを入り口にしてUnityを本格的に学ぶ道につなげられます ・ 大学生はどんどん「スクリプト」を書けるようになる、すぐにUnityがほしくなる やがて「Playground」の堅牢なシステムがネックになる ・ グラフィックのアセットは便利だが好き嫌いも大きい 自分でキャラクターを描きたくなる学生が多かった (授業方針によって、「あるもので作る」という「しばり」を入れることも「あり」かも) ・ サウンド・SEがない (音関連の講義を入れるべきだった) 38
全授業の資料公開します 使える部分を授業などに取り入れていただければ幸いです https://drive.google.com/drive/u/2/folders/1nzZtsaQ5DEUjkj5CiUoJLCqLf_zYXTPf より良いスクリプトの組み方や、自分ならこうする等、 みなさんのおチカラとアイデアのご協力を、よろしくお願いします 39
Unity道場 幕張スペシャル - Education編 「Playground」を魔改造!? ゲームデザイン授業への活用 ありがとうございました 40