46
1 第3回 「インタラクション」 あそびのデザイン講座

あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

1

第3回 「インタラクション」

あそびのデザイン講座

Page 2: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

2

ボールが当たると消えるオブジェクト

第3回の授業「インタラクション」

Page 3: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

3

今回は当たった時に相手が「消える」というコンピュータだから可能な「インタラクション」を作ります

前回はボールが当たった時には、単に跳ね返されたり、相手を倒したりしました

転がる「ボール」が当たると「インタラクション」を起こす仕掛けをつくります

Page 4: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

4

この仕組みを使うとコンピュータゲームならではのいろいろな表現をつくることができます

Page 5: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

5

2、Unityの「C#スクリプト」を書いてみよう

4、ボールが当たると消えるブロックをつくろう

3、Unityのエディター:MonoDevelopをつかう

5、消えるブロックを使ってレベルをつくろう

1、オブジェクトに「Physic Material」をセットする

今回の目標

Page 6: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

6

まずは「Unityの基本操作」のおさらいです

復習してみましょう

Page 7: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

7

1. File > New Scene でSceneをつくります

2. 「Save」で名前をつけてつくったSceneをセーブしておきましょう

Unityをひらきます

Page 8: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

8

GameObject >3D Object > Cube でCubeをつくっていきます

「GameObject」でフロア(床)をつくりましょう

Page 9: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

9

GameObject >3D Object > Cube でつくったCubeを変形させ組み合わせて、四角の枠とボールを作ります。

Cubeのサイズを変えてフロアを組みます

Page 10: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

10

ボールをつくります

GameObject > 3D Object > Sphere で「ボール」をつくります色も「Material」をつくって、セットします

Page 11: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

11

つくったボールに「Rigidbody」を追加します

Component > Physics > Rigidbody で「ボール」に「物理法則」をつけて、落下するようにします

「Use Gravity」にチェックマークを

つけると重力が働きます

Page 12: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

12

Objectの「材質」をきめます

オブジェクトにセットする「材質」によって跳ね返り方が

変化します

Page 13: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

13

ボールの材質を「Physic Material」(材質)でつくります

Asset >Create > Physic Material でつくります。「Physic Material」(材質)は「色」と同じ扱いの「Asset」です。

Asset欄にできたら名前を付けます

Page 14: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

14

「Physic Material」欄をみてみます

Physic Material(材質)欄には、5種類のパラメータがあります

アイコンをシングルクリックするとInspector欄にPhysic Materialの

設定ウィンドウが開きます

Page 15: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

15

inspector欄に「Physic Material」の設定メニューがあらわれます

・ Dynamic Friction 移動するオブジェクトにかかる摩擦 0=摩擦がない 1=すぐに停止・ Static Friction 静止してるオブジェクトにかかる摩擦 0=摩擦がない 1=動きにくい・ Bounciness 跳ね返りの大きさ 0=跳ね返らない 1=跳ね返る・ Friction Combine 衝突したオブジェクト間の摩擦・ Bounce Combine 衝突したオブジェクト間の跳ね返りの大きさ

https://docs.unity3d.com/jp/540/Manual/class-PhysicMaterial.html

摩擦を「0.6」バウンシネス「0.99」にすると

よく跳ねる「ゴムボール」のような材質になります

Page 16: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

16

作った「Physic Material」をボールにあたえます

1. Asset内にできた「Physic Material」(材質)をドラッグしてボールに与えます。(直接ドラッグすることもできます)

2. セットするとComponentの「Sphere Collider」欄にMaterial(材質)が表示されます

Page 17: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

17

跳ねるようになったか、確認してみましょう。

Physic Material(材質)欄の「Bounciness」を「1」に近づけ、Friction(摩擦)を「0」に近づけると、より跳ねるように変わります

思い通りの跳ね方になるように調整してみましょう

Page 18: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

18

追加情報 「Physic Material」をフロアにも付けると弾み方が変わります

1. Asset内にできた「Physic Material」(材質)をドラッグしてフロアにも与えます2. Componentの「Box Collider」欄にMaterial(材質)が表示されます3. フロア独自の材質をつくってみましょう

Page 19: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

19

次に「当たると消えるブロック」を作ってみよう

C#(シー・シャープ)でスクリプトを組みます

いよいよ「プログラム」に取り組みます!

Page 20: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

20

ころがるボールがキューブに当たると、キューブが消えるようにします

当たって消すための「Cube」をつくり、ボールが転がるようにフロアをななめに傾けます

Page 21: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

21

Unityの「C#」スクリプトを書きます

C#スクリプトは「Component (訳:構成成分)」の一つです

ゲーム内の「Object」に入れて、その挙動をコントロールします

各「Component 」 は「Inspector」欄に表示されます

C# Script

C# script C# Script

Object(キャラクターなど)

Page 22: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

22

「当たるとobjectが消える」というC#のスクリプトをつくります

Asset >Create > C# Script をえらびます*スクリプトも「Material」(材質)、「色」と同じ1つの「Asset」です

Page 23: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

23

C#のファイルに名前をつけて決定します

1. 「スクリプト」の名前はとても大切です(後から変更するのが大変です)大文字から始まる名前にします(記号などは使えません)

2. ここでは「Broken」という名前にします

C#スクリプトをつくると同時に名前を付けなくてはいけません。

Page 24: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

24

C#のエディターを開きます

アセット欄の C# スクリプトをダブルクリックすると「VisualStudio」エディターが開きます

Page 25: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

25

「あそびのデザイン講座」ではMono Develop社のエディターを使ってきましたが、

現在は同梱配布が終了したため、「Visual Studio」エディターを説明に使います

お知らせ

最新のUnityをダウンロードして使ってください

Page 26: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

26

ひらくと、始めからこのように書かれています

void Start( ){ } と void Update( ){ }の部分は始めから書かれていますが、いまは使いません

消しても問題ありませんから、消しておきましょう

「//」の後ろにかかれた緑色の文章は、コメントと呼ばれ、プログラムには読み込まれない部分です一時的にプログラムを読み込ませなくしたり、説明を書いたりすることを「コメントアウト」と言います

Page 27: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

27

そして、この部分を書きます

先ほどのStart(){ }とUpdate(){ }部分を消して・・・

ここを書きたします

すべての( )や{ }は、始まりのカッコと閉じるカッコの2つで対(つい)になっています{・・・{・・・プログラム内容}・・}のように、かならずカッコは対(つい)となるカッコで

閉じられなくてはいけません

Page 28: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

28

当たると消えるスクリプトは以下のように書きます

using UnityEngine;using System.Collections;public class Broken : MonoBehaviour{

void OnCollisionEnter(Collision other){

if(other.gameObject.tag == "Ball"){

Destroy (gameObject, 0.2f);}

}}

これだけです

Page 29: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

29

このスクリプトの1行目を見てみましょう

void OnCollisionEnter (Collision other){

「これは値を返さないメソッドです」の意味

メソッド(命令プログラム)ですこれは当たった時(Enter)に相手の持っているデータを

Collision型の変数otherに読み込む働きをします

データを入れる変数です。

・・・void OnCollisionEnter(Collision other){

if(other.gameObject.tag == "Ball"){Destroy (gameObject, 0.2f);}

}・・・

Page 30: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

30

このスクリプトの2行目を見てみます

if(条件)もしこういうことなら・・ 変数otherに取り込んだgameObjectの「tag」が“Ball”ならば・・

if (other.gameObject.tag == "Ball")

". " (ドット)は " ~の"と読むとわかりやすいです

「= =」は「比べる」という意味です

・・・void OnCollisionEnter(Collision other){

if(other.gameObject.tag == "Ball"){Destroy (gameObject, 0.2f);}

}・・・

Page 31: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

31

このスクリプトの3行目を見てみます

Destroy( オブジェクト,時間);(これを、この秒後に)消します。

このObjectを0.2秒後に

Destroy(gameObject, 0.2f) ;

「f」は小数点以下まである数字の値を表します。

・・・void OnCollisionEnter(Collision other){

if(other.gameObject.tag == "Ball"){Destroy (gameObject, 0.2f);}

}・・・

Page 32: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

32

「Tag」ってなんだろう?

ここで「Tag」について説明します!

Page 33: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

33

「Tag」はここにあります

「ボール」をクリックすると、Inspector欄の一番上の方に「tag」欄があります

「Tag」欄はここにあります

Page 34: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

34

「Tag」の役目

「Tag」はゲーム内のオブジェクトを区別するために使います。

たとえば、シューティングゲームの場合、エネミーの弾にあたるのは「プレイヤーのTag」を持ったオブジェクトだけにできます

エネミーの弾は「エネミーのTag」のオブジェクトには当たらない(味方は破壊できない)、という処理が分かりやすく簡単にできます。

「Tag」「Tag」

相手が「Player」なら当たる

相手が「Enemy」なら当たる

Page 35: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

35

「Ball」の「Tag」をつくって用意します

「Add Tag...」新しいTagをつくる場合は

ここをクリック

Tagの三角形の印をクリックするとtagの表があらわれますそこの一番下に「Add Tag」ボタンがあります

Page 36: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

36

ボールのオブジェクトに「Ball」の「Tag」をつけます

「Add Tag...」をクリックすると そこが「Tag & Layers」の表にかわります

Page 37: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

37

ボールのオブジェクトに「Ball」の「Tag」をつけます

「New Tag Name」があらわれます

そこの「+」をクリックします

「+」をクリックすると・・・

「Ball」と書いてSaveします

Page 38: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

38

ボールのオブジェクトに「Ball」の「Tag」をつけます

Tagの三角形の印をクリックするとtagの表があらわれますつくられた「Ball」のTagをボールにセットします

Page 39: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

39

「Broken」スクリプトを、消したいGameObjectにセットします

つくったスクリプトをセットしましょう!

Page 40: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

40

「Broken」スクリプトを消したいブロックにセットします

Inspector欄にセットしたスクリプトがあるか確認します

Page 41: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

41

ボールに当たるとブロックが消えることを確認してみましょう。

Page 42: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

42

工夫するポイント

1、台の傾斜角度や跳ね返る割合を変えてみる

2、「消す」ことを連続させたり、たくさん作ってみる

3、転がすものをボール以外のモノに変えてみる

かんたんなインターラクションを使ってボールのコースを作ろう

第3回の講義 実習の時間!

Page 43: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

43

作例

黄色いブロックが消えることで、ボールと赤い棒とのインタラクションを起こします

Page 44: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

44

1、 作った「コース(レベル)」をみんなにみてもらいましょう

2、 自分が工夫した箇所をみんなに伝えましょう

3、 他の作品の良い点や、気になる部分、自分ならこうする、・・・というポイントを忘れずにメモしましょう

第3回の講座 実習の発表の時間!

Page 45: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

45

実習項目

・ スロープをつくり、Rigidbody、Material、Physic Materialを持たせたオブジェクトをセットする・ コリジョンの判定を行う基本的な「C#スクリプト」を書いて、それによってオブジェクトを消す・ 「Tag」の概念を理解する

UnityのC#スクリプトを書いて、実際にインターラクトさせてみる

第3回 授業内容 「インターラクション」

目的

ボールとスロープ

1. キューブでステージを作り、プレイヤーのボール、ゴールを設置する2. 当たると消える、倒して他のものを動かす、というC#スクリプトを書いてゲームメカニックをつくる3. 実際に当たると消えるブロックを使ったコースをつくる

Page 46: あそびのデザイン講座 - Tiny Tech Turtles...5 2、Unityの「C#スクリプト」を書いてみよう 4、ボールが当たると消えるブロックをつくろう 3、Unityのエディター:MonoDevelopをつかう

46

・ ステージにUnityの物理シミュレーションで大切な「Rigidbody」「Material」「Physic Material」をもたせたオブジェクトをセットしてボールとインターラクトさせる「あそび」を作れているか?

・ インターラクションの種類と使い方(消えることで何があらわれたのか)を評価- ボールを誘導する工夫 (ブロックの配置、図形のサイズ、カメラ位置)- 見た目の魅力と世界観とストーリー性など(色使い、UIの意匠、ゴールまでの工夫など)- インラクションのさせ方、方法、ユニークさ、タイミング、同期の工夫など- 複数のボールを用いることなど、努力がみとめるものは高評価

https://unity3d.com/jp/learn/tutorials/topics/physics

チュートリアル>物理演算:Unity の物理ベースのオプションを学んで、力学的な作用を発生させてみましょう

「Unity」の該当参照箇所

学習到達の指標と評価ポイント