Unity 2D 逆引き辞典 for Beginners

31
Unity 2D 逆引き辞典 ~ for Beginners ~ Junko Suzuki

Transcript of Unity 2D 逆引き辞典 for Beginners

Page 1: Unity 2D 逆引き辞典 for Beginners

Unity 2D 逆引き辞典 ~ for Beginners ~

Junko Suzuki

Page 2: Unity 2D 逆引き辞典 for Beginners

新規プロジェクトの作成(2D)............................................................................1

画面の調整........................................................................................................2

プロジェクトの保存・シーンの保存...................................................................3

用意した画像をプロジェクトにインポートするには.........................................4

画像(スプライト)を画面上に配置するには....................................................5

【困ったとき】 画像が見えなくなったときの対処方法.....................................6

重力など(物理挙動)をつけるには..................................................................7

当たり判定エリア(コライダ)をつけるには.......................................................7

ゲームを動かすには(1シーンだけ)...............................................................8

複数シーンの遷移をする場合の設定..............................................................8

キャラクタが跳ねるようにするには..................................................................9

画面に文字を表示するには...........................................................................10

【困ったとき】間違ってつけたコンポーネント(コライダやスクリプト)を外すに

は......................................................................................................................11

【困ったとき】Poject ウィンドウにあった Assets がない..................................11

ゲームを build(パッケージ化)して実行するには(Build&Run)..................12

【スクリプト】 スクリプトについて 全般..........................................................13

【スクリプト】 キーボードの矢印キーで動くようにする.................................14

【スクリプト】 スペースキーを押されたら、別のシーンを呼び出す..............15

【スクリプト】 特定のオブジェクトに衝突したら別のシーンを呼び出す.......16

【スクリプト】 タグがつけられたオブジェクト(複数可)に衝突したら別のシー

ンを呼び出す...................................................................................................17

【スクリプト】 オブジェクトが画面外に出たら別のシーンを呼び出す..........18

【スクリプト】 何かに衝突したら音を鳴らす...................................................19

【スクリプト】 特定のオブジェクトに衝突したら音を鳴らす...........................20

【スクリプト】 何かに衝突したら消滅する......................................................21

【スクリプト】 蹴られて飛んでいくボールの動き...........................................22

弾を発射するには 〜その1/3〜 弾の準備...............................................23

弾を発射するには 〜その2/3〜 弾を Prefab 化する................................24

弾を発射するには 〜その3/3〜 弾を発射する........................................25

【スクリプト】 画面タップ(マウスクリック)位置へ移動する..........................26

【スクリプト】 スクリプトに慣れてきたら・・・...................................................27

【スクリプト】 スニペット集...............................................................................28

目 次

Page 3: Unity 2D 逆引き辞典 for Beginners
Page 4: Unity 2D 逆引き辞典 for Beginners

1

新規プロジェクトの作成(2D)

① Unity を起動

② 右上「New」をクリック

③ ↓の画⾯で「2D」を選択し、Project name に好きなプロジェクト名を⼊れ「Create Project」クリック

→ ここで⼊⼒する名前はプロジェクト名、つまりゲーム全体につける名前

→ プロジェクト名は⽇本語でも作成できるが英語(半⾓英数)の⽅が良い。あとでそれが原因の不都合が発⽣する場合がある(画像名,シーン名その他についても同様)。

→ 1つのプロジェクトには複数のシーン(場⾯)が⼊るので、途中で作業を保存する時には「プロジェクト全体の保存」と「シーン」ごとの保存があることに注意。

スクリプト(プログラム)も使う場合は、その保存も別途⾏う必要がある。

※Sign in 画⾯が表⽰されたら「Work offline」をクリックし、再度 Unity を起動。アカウントなしで作業可能

Page 5: Unity 2D 逆引き辞典 for Beginners

2

画面の調整

① 右上の「Layout」ボタンから「2 by 3」を選択しておく

② Game ウィンドウの「Free Aspect」を「16 : 9」に変更しておく

③ 左上「Scene(シーン)」ウィンドウ上でマウスホイールを回し、⽩い枠が⾒えるように調整する

※ ⽩い枠=ゲーム画⾯の外枠

→ Layout を 2 by 3 にするのは、この説明冊⼦と同じ表⽰にするため。下記 5 つのウィンドウ配置が変わるだけなので、実際は何でも OK。

ウィンドウ ⽤途

Scene ゲームを作る作業場所

Game 実際のゲームの⾒え⽅

Hierarchy 配置済み要素⼀覧

Project 素材・スクリプト等

Inspector 要素情報の表⽰・編集

→ Aspect(アスペクト⽐)を 16 : 9 にする理由は、スマホでのプレイを考えた場合に縦横⽐ 16 : 9 が多いため。

Scne 画⾯・Game 画⾯ Hierarchy 画⾯ Project 画⾯(Assets 含む) Inspector 画⾯ シーン・ゲーム ヒエラルキー プロジェクト(アセット) インスペクター

Page 6: Unity 2D 逆引き辞典 for Beginners

3

プロジェクトの保存・シーンの保存

シーンの保存

① 「File」メニュー>「Save Scene As...」で現在のシーンを「Main」(何でも OK)として保存

プロジェクトの保存

① 「File」メニュー>「Save Project」

※シーンとプロジェクトの両⽅を保存する

→ Scene とは「3 ⾯クリアした!」などのゲームの「⾯」のこと。名前は⾃由だが、あとから使うのでわかりやすい名前に。アルファベットの⽅があとあと使いやすい。

→ Project とはゲーム全体のこと。

1 つのプロジェクトの中に複数のシーンが⼊ることになります。

Page 7: Unity 2D 逆引き辞典 for Beginners

4

用意した画像をプロジェクトにインポートするには

⽤意した画像をエクスプローラ上ですべて選択(Shift キーや Ctrl キーで複数選択)し、Project ウィンドウのAssets フォルダの上にドラッグ&ドロップ、

(別の⽅法としては「Assets」メニュー>「Import New Asset...」からファイルを挿⼊)

→ ドラッグ先は Assets フォルダのフォルダ名の上か、または、その右側のエリアのどちらでも OK

→⽤意する画像は PNG 形式がよい

⽤語 インポート(Import)

プロジェクトに何かを取り込むこと

⽤語 アセット(Assets)

ゲーム内で使う材料・要素のこと

Page 8: Unity 2D 逆引き辞典 for Beginners

5

画像(スプライト)を画面上に配置するには

① Projects ウィンドウの Assets にある画像を Scene ウィンドウにドラッグ&ドロップ

② マウスでドラッグしながらサイズ調整する(Inspector ウィンドウの Scale 変更でも OK)

→ サイズ変更の取っ⼿が表⽰されない場合は、変更したいスプライトの⼤きさに対して表⽰縮尺が⼩さすぎる可能性があるので、マウスホイールを回して拡⼤表⽰してみる。

注意

Inspector ウィンドウで何らかの設定をする場合、必ず、設定対象のスプライトを選択してから⾏うこと。

→ スプライトを選択するには、Scene ウィンドウで画像をクリックするか、Hierarchy ウィンドウでスプライト名をクリック。

Tips

スプライト名をわかりやすく変更しておくとあとあと便利。変更は、Hierarchyウィンドウ上でスプライトを右クリック →「Rename」

Page 9: Unity 2D 逆引き辞典 for Beginners

6

【困ったとき】 画像が見えなくなったときの対処方法

① 描画順序を変更したいスプライトを選択(Hierarchy ウィンドウかScene ウィンドウで)

② Inspector ウィンドウ(右側:選択したスプライトの情報が表⽰されている)で「Order in Layer」(レイヤの順序)変更

レイヤ番号の例

スプライト Order in Layer 背景 0 障害物いろいろ 1 メインキャラ 2

→ スプライトは、配置した時点で表⽰順(Order in Layer)がすべて 0、つまり、どれが奥でどれが⼿前かの指定がされていないので、背景の奥に隠れてしまったりします。「Order In Layer」は数字が⼤きいほど⼿前に表⽰されます。

Tips

複数のスプライトを選択するには、下のどちらかの⽅法で。

・Ctrl キーを押しながら複数選択

→ ⾶び⾶びに選択

・Shift キーを押しながら 2 つ選択

→2 つの間を連続して選択

Page 10: Unity 2D 逆引き辞典 for Beginners

7

重力など(物理挙動)をつけるには

① 重⼒をつけたいもの(メインキャラや障害物)を選択

② Inspector ウィンドウ(右側ウィンドウ)で

「Add Component」>「Physics 2D」>「Rigidbody 2D」

③ 実⾏ボタン(画⾯上部中央▶)を押して重⼒で下に落ちるか確認

当たり判定エリア(コライダ)をつけるには

① ぶつかるようにしたいもの(メインキャラや障害物)を選択

② Inspector ウィンドウ(右側ウィンドウ)で

「Add Component」>「Physics 2D」>「B ox collider 2D」

(または「Circle Collider」等)

③ 実⾏ボタン(画⾯上部中央▶)を押して、重⼒で落ちてくるものを障害物で⽌められるか確認(落ちてくるものと受け⽌めるものの両⽅にコライダをつける)

→ 「Box collider 2D」「Circle Collider」等の違いは、当たり判定エリアの形の違いなので、フィットする⽅を使う

→ ぶつかるもののどちらかが「Rigidbody 2D」付きでないとダメ(衝突しない)

注意

「Polygon collider」は、画像の形にフィットするが、転がり⽅にも影響してくるので注意

→ 「実⾏」は次ページ参照

Tips

コライダ⽤などで Rigidbody 2D をつける場合(下⽅向への⼒は不要の場合)、つけた Rigidbody 2D の「Gravity Scale」をゼロにする

Page 11: Unity 2D 逆引き辞典 for Beginners

8

ゲームを動かすには(1シーンだけ)

① 実⾏ボタン(画⾯上部中央▶)クリック

複数シーンの遷移をする場合の設定

使⽤するすべてのシーンをビルド対象に追加する必要があります。

① 「File」メニュー>「Build Settings...」で表⽰されたウィンドウにシーンをすべてドラッグ&ドロップ

② 終わったら、右上×マークで「Build Settings」ウィンドウを閉じる

注意

確認が終わったら▶ボタンをもう⼀度クリックして停⽌しておくことを忘れずに!押したままの状態で⾏った作業はリセットされてなくなってしまいます。

使⽤するシーンのアイコンを Assets からダブルクリックで開き「Add Open Scenes」ボタンで追加する⽅法もあります。

Page 12: Unity 2D 逆引き辞典 for Beginners

9

キャラクタが跳ねるようにするには

① 「Assets」メニュー>「Create」>「Physics2D Material」

② Inspector ウィンドウ(右側:Material の情報)の「Bounciness」欄を 0.9 に(通常 0〜1)

③ Project ウィンドウの Assets の下にある New Physics を跳ねるるようにしたいもの(メインキャラや障害物)にドラッグ&ドロップ

(または、メインキャラの Inspector ウィンドウ上で、「Circle Collider 2D」等コライダの「Material」欄にドラッグ&ドロップ)

④ 実⾏ボタン(画⾯上部中央▶)を押して跳ね返るかどうか確認

→ Bounciness(跳ね返り係数)を好きな数値に調整してみる

コライダがついた相⼿に対して跳ね返る

Page 13: Unity 2D 逆引き辞典 for Beginners

10

画面に文字を表示するには

① 「Game Object」メニュー>「UI」>「Text」

② Inspector ウィンドウ(Text の情報が表⽰)の「Text(Script)」の下にゲームタイトルを⼊⼒し、「Font Size」を 20 に変更(⼤きすぎると⽂字が表⽰されない)

③ 「Pos X」「Pos Y」を両⽅とも 0 に、下のほうにある「Color」を⾒やすい⾊に変更

Page 14: Unity 2D 逆引き辞典 for Beginners

11

【困ったとき】間違ってつけたコンポーネント(コライダやスクリプト)を外すには

① コンポーネントを外したいスプライトを選択

② Inspector ウィンドウ(右側ウィンドウ)に設定されているコンポーネントがすべて表⽰されているので、外したいもの(Box Collider 2Dなど)の右上にある⻭⾞マークをクリックし→「Remove Component」

【困ったとき】POJECT ウィンドウにあった ASSETS がないProject ウィンドウ内の Assets フォルダをクリック

注意

背景にコライダ(当たり判定エリア)をつけてしまうと、キャラとぶつかってしまい、キャラが重⼒で落ちません

Page 15: Unity 2D 逆引き辞典 for Beginners

12

ゲームを BUILD(パッケージ化)して実行するには(BUILD&RUN)

①「File」メニュー>「Build & Run」をクリックするとファイル名を⼊⼒するウィンドウが表⽰されるので「testgame」(⾃由)など⼊⼒

②「Screen resolution」は「1280×720」とし、「Windowed」(ゲームをウィンドウ内表⽰)にチェックを⼊れ「Play!」

※Web Player で実⾏するか、スタンドアローンで実⾏するかは「File」メニュー>「Build Settings」

「Windowed」にチェックを⼊れないと、全画⾯プレイとなり、ゲームを強制終了しにくくなる。

Page 16: Unity 2D 逆引き辞典 for Beginners

13

【スクリプト】 スクリプトについて 全般

⽮印キーで動く、ぶつかった場合にゲームオーバー画⾯に遷移する、など、独⾃の動きをつける場合は、スクリプトを書く必要があります。動きをつけたいオブジェクト、または、カメラ(全体に動きをつける場合)を選び、Inspector ウィンドウから「Add Component」>「New Script」をクリックし、Name 欄に「MoveBox」(名前は⾃由)を⼊⼒(Language は C Sharp)し「Create and Add」。追加したスクリプトのアイコン(「C#」のマーク)が Asset ウィンドウに表⽰されるのでダブルクリックし、中⾝を書き換えます。

//で始まる行、および、 /* と */ではさまれた部分(複数行可)はコメントです。スクリプトの実行には関係ありません。スクリプト

を他の人が見たり、自分が後から読んだときに内容がわかるよう、適切なコメントをつけておくべき。

using UnityEngine;

using System.Collections; public class MoveBox : MonoBehaviour { void Start () {

}

void Update () {

}

}

最初に一度だけ実行されるコードを記述

FrameRate に応じて実行されるコード

void Start(){

}

void Update(){

}

は、中のコードが何もない場合は丸ごと削除しても OK(空っぽのまま残しておいても特に問題はない)

新規作成の別の⽅法は、Project ウィンドウの Create ボタンから"C#Script"をクリックすると作成されます。作成された C#アイコンを、つけたいオブジェクトにドラッグしすれば OK

Unity でスクリプトを記述する⾔語は、C#の他に javascript などがありますが、書籍やネットで情報を収集しやすいので、C#を使っています。

Page 17: Unity 2D 逆引き辞典 for Beginners

14

【スクリプト】 キーボードの矢印キーで動くようにする

① 動かしたいオブジェクトを選択する

② Inspector ウィンドウ(右側:オブジェクトの情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「MoveBox」(名前は⾃由)を⼊⼒し「Create and Add」

③ Project ウィンドウの Asset の中に MoveBox スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

Update(){ }の中括弧の中に記述します。左の例では Start(){ }は削除してあります。

using UnityEngine;

using System.Collections; public class MoveBox : MonoBehaviour {

void Update () {

if (Input.GetKey(KeyCode.UpArrow))

transform.position = new Vector3(transform.position.x, transform.position.y + 0.1f, 0f);

if (Input.GetKey(KeyCode.DownArrow))

transform.position = new Vector3(transform.position.x, transform.position.y - 0.1f, 0f);

if (Input.GetKey(KeyCode.LeftArrow))

transform.position = new Vector3(transform.position.x - 0.1f, transform.position.y, 0f);

if (Input.GetKey(KeyCode.RightArrow))

transform.position = new Vector3(transform.position.x + 0.1f, transform.position.y, 0f);

}

}

Page 18: Unity 2D 逆引き辞典 for Beginners

15

【スクリプト】 スペースキーを押されたら、別のシーンを呼び出す

① 呼び出す前のシーンを開いておく

② Hearchy ウィンドウから「Main Camera」を選択

③ Inspector ウィンドウ(右側:Camera の情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「OpenScene2」(名前は⾃由)を⼊⼒し「Create and Add」

④ Project ウィンドウの Asset の中に OpenScene2 スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

Update(){ }の中括弧の中に記述します。左の例では Start(){ }は削除してあります。

eyCode.Space の部分で、その他のキーを指定することも可能(補完⼊⼒時の候補参照)

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement; public class OpenScene2 : MonoBehaviour{

void Update(){

if (Input.GetKeyDown(KeyCode.Space)){

SceneManager.LoadScene("Scene2");

}

}

}

Scene を移動する場合は必ず追加

“ ”の中の Scene2 は呼び出すシーン名

(スペルが違うと動かないので注意!)

Page 19: Unity 2D 逆引き辞典 for Beginners

16

【スクリプト】 特定のオブジェクトに衝突したら別のシーンを呼び出す

① メインキャラなどの動くオブジェクト(衝突させる主となるもの)を選択

② Inspector ウィンドウ(右側:選択したオブジェクトの情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「LoadScene3」(名前は⾃由)を⼊⼒し「Create and Add」

③ Project ウィンドウの Asset の中に LoadScene3 スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

Update(){ }や Start(){ }の外に記述します。左の例では Start(){ }、Update(){ }ともに削除してあります。

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement; public class LoadScene3 : MonoBehaviour{

void OnCollisionEnter2D(Collision2D coll) {

if (coll.gameObject.name == "goal") {

SceneManager.LoadScene("Scene2");

}

}

}

Scene を移動する場合は必ず追加

“ ”の中は衝突する相⼿のスクリプト名

“ ”の中の Scene2 は呼び出すシーン名

(スペルが違うと動かないので注意!)

Page 20: Unity 2D 逆引き辞典 for Beginners

17

【スクリプト】 タグがつけられたオブジェクト(複数可)に衝突したら別のシーンを呼び出す

<準備 当たり判定の相⼿にタグをつける>

① 当たり判定の相⼿となるスプライトに Collider2D を設定

② Scene ウィンドウにドロップした画像をクリックし、Inspector ウィンドウの「Tag Untagged」>「Add Tag」を選択

③ 右下の「+」マークをクリックし、Tag 名(例えば「goal」)を作成

④ Inspector ウィンドウの「Tag Untagged」>をクリックして出てくる⼀覧から③で作成した Tag 名「goal」などを選択

<メインキャラなどの動くオブジェクト(衝突させる主となるもの)にスクリプトをつける>

Update(){ }や Start(){ }の外に記述します。左の例では Start(){ }は削除してあります(Update(){ }も削除して OK)。

name の場合はスプライト名

tag の場合はタグ名

tag は複数のオブジェクトにつけられます

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement; public class LoadScene3 : MonoBehaviour{

void OnCollisionEnter2D(Collision2D coll) {

if (coll.gameObject.tag == "goal") {

SceneManager.LoadScene("Scene2");

}

}

}

Scene を移動する場合は必ず追加

“ ”の中は衝突する相⼿につけたタグ名

“ ”の中の Scene2 は呼び出すシーン名

(スペルが違うと動かないので注意!)

Page 21: Unity 2D 逆引き辞典 for Beginners

18

【スクリプト】 オブジェクトが画面外に出たら別のシーンを呼び出す

① 呼び出す前のシーンを開いておく

② メインキャラなどの動くオブジェクトを選択する

③ Inspector ウィンドウ(右側:選択したオブジェクトの情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「DropOut」(名前は⾃由)を⼊⼒し「Create and Add」

④ Project ウィンドウの Asset の中に DropOut スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

Update(){ }や Start(){ }の外に記述します。左の例では Start(){ }、Update(){ }ともに削除してあります。

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement; public class DropOut : MonoBehaviour{

void Update(){

Vector3 view_pos = Camera.main.WorldToViewportPoint(transform.position);

if (view_pos.x < -0.5f || view_pos.x > 1.5f ||

view_pos.y < -0.5f || view_pos.y > 1.5f) {

SceneManager.LoadScene("gmover");

}

}

}

Scene を移動する場合は必ず追加

“ ”の中の gemeover は呼び出すシーン名

(スペルが違うと動かないので注意!)

Page 22: Unity 2D 逆引き辞典 for Beginners

19

【スクリプト】 何かに衝突したら音を鳴らす

① ⾳声ファイル(mp3 など)を asset に追加しておく

② ⾳を鳴らしたいオブジェクトを選択する

③ Inspector ウィンドウ(右側:オブジェクトの情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「SoundOn」(名前は⾃由)を⼊⼒し「Create and Add」

④ Project ウィンドウの Asset の中に SoundOn スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

⑤ Inspector ウィンドウ(右側:オブジェクトの情報が表⽰されている)SoundOn スクリプト下の「Audio Clip」の Size を 1 にし、「Element 0」欄に⾳楽ファイル(mp3)をドラッグする

using UnityEngine;

using System.Collections.Generic;

public class SoundOn : MonoBehaviour{

AudioSource audioSource;

public List<AudioClip> audioClip = new List<AudioClip>();

void Start () {

audioSource = gameObject.AddComponent<AudioSource>();

}

void OnCollisionEnter2D(Collision2D coll) {

audioSource.PlayOneShot(audioClip[0]);

}

}

追加

Page 23: Unity 2D 逆引き辞典 for Beginners

20

【スクリプト】 特定のオブジェクトに衝突したら音を鳴らす

① ⾳声ファイルを準備(前ページ「何かに衝突したら⾳を鳴らす」の①〜⑤を⾏う)

② コードの違いは太字部分のみ。” ”の中に衝突相⼿の名前を記述

using UnityEngine;

using System.Collections.Generic;

public class SoundOn : MonoBehaviour{

AudioSource audioSource;

public List<AudioClip> audioClip = new List<AudioClip>();

void Start () {

audioSource = gameObject.AddComponent<AudioSource>();

}

void OnCollisionEnter2D(Collision2D coll) {

if (coll.gameObject.name == "goal") {

audioSource.PlayOneShot(audioClip[0]);

}

}

}

“ ”の中は衝突する相⼿のスクリプト名

Page 24: Unity 2D 逆引き辞典 for Beginners

21

【スクリプト】 何かに衝突したら消滅する

① 消滅させたいオブジェクトを選択する

② Inspector ウィンドウ(右側:オブジェクトの情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「Crash」(名前は⾃由)を⼊⼒し「Create and Add」

③ Project ウィンドウの Asset の中に Crash スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

衝突元と相⼿の両⽅にコライダをつける

どちらか⼀⽅、または両⽅に rigid body 2D をつける

Update(){ }や Start(){ }の外に記述します。左の例では Start(){ }、Update(){ }ともに削除してあります。

using UnityEngine;

using System.Collections;

public class Crash : MonoBehaviour{

void OnCollisionEnter2D(Collision2D coll) {

Destroy(coll.gameObject);

Destroy(gameObject);

}

}

衝突相手を消滅

自分自身を消滅

Page 25: Unity 2D 逆引き辞典 for Beginners

22

【スクリプト】 蹴られて飛んでいくボールの動き

① 蹴られるボールに collider と rigidBody2D をつける(蹴る側にもつける)

② Inspector ウィンドウ(右側:オブジェクトの情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「Kick」(名前は⾃由)を⼊⼒し「Create and Add」

③ Project ウィンドウの Asset の中に Kick スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

重⼒で落ちて跳ね返る動きはスクリプトなしで実現できるが、横向きに蹴る⼒などはスクリプトで記述(「重⼒」は rigidbodyでつけられるが、横向きに加わるような「⼒」は AddForce で記述要)

衝突元と相⼿の両⽅にコライダをつける

どちらか⼀⽅、または両⽅に rigid body 2D をつける

Update(){ }や Start(){ }の外に記述します。左の例では Start(){ }、Update(){ }ともに削除してあります。

using UnityEngine;

using System.Collections;

public class Kick : MonoBehaviour{

void OnCollisionEnter2D(Collision2D coll) {

if (coll.gameObject.name == "obake")

GetComponent<Rigidbody2D>().AddForce (new Vector2(-500, 0));

}

}

もし、蹴った物体の名前が"obake"だったら

ベクトル(-500,0)の方向&大きさで力を加える

Page 26: Unity 2D 逆引き辞典 for Beginners

23

弾を発射するには 〜その1/3〜 弾の準備

① 発射する物体のスプライトを Assets に追加し、画⾯上に配置し、選択する

② Inspector ウィンドウ(右側:選択したオブジェクトの情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「Shoot」(名前は⾃由)を⼊⼒し「Create and Add」

③ Project ウィンドウの Asset の中に Shoot スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

④ 実⾏ボタン(画⾯上部中央▶)を押して弾が出るかどうか確認

弾の位置は後で変えるので適当で OK

translate( x 移動量, y 移動量, z 移動量)

→ 早く動かすには値を⼤きくする

弾は次々発射するので、画⾯から⾒えなくなったら消しておかないと無駄が多い

using UnityEngine;

using System.Collections; ublic class Shoot : MonoBehaviour{

void Update () {

transform.Translate (-0.2f, 0, 0);

}

void OnBecameInvisible() {

Destroy (gameObject);

}

}

x 軸マイナス⽅向に 0.2f ずつ進む

画面から見えなくなったらオブジェクトを消す

Page 27: Unity 2D 逆引き辞典 for Beginners

24

弾を発射するには 〜その2/3〜 弾を PREFAB 化する

弾を無限に発射するには弾を Prefab にします。

① 前ページ「その1」で作成した弾オブジェクトを、Hierarchy ウィンドウから Project ウィンドウにドラッグし、Assets に⼊れる

② もともと Assets の中にあった弾スプライト(この例では"fire")とは別にもう 1 つ同じ名前のオブジェクトができているので、新しくできた⽅の名前部分をクリックし"firePrefab"など Prefab だとわかる名前に変える

③ Hierarchy ウィンドウにある、もともとあった弾オブジェクト(ここでは"fire")を削除する

弾の位置は後で変えるので適当で OK

translate( x 移動量, y 移動量, z 移動量)

→ 早く動かすには値を⼤きくする

弾は次々発射するので、画⾯から⾒えなくなったら消しておかないと無駄が多い

Prefab とは設計図のようなもので、それをもとに、いくつもオブジェクトを作り出せる

Page 28: Unity 2D 逆引き辞典 for Beginners

25

弾を発射するには 〜その3/3〜 弾を発射する

① 弾を発射するもとになるキャラクタや戦闘機などをクリック

② a) ⽮印移動などのスクリプトが付いている場合 → そのスクリプトを開き、修正

b)スクリプトが付いていない場合 → 新しいスクリプトをつけて開き(「スクリプトについて全般」ページ参照)、修正

s

③ 弾を発射するもとになるキャラクタや戦闘機などをクリックし、Inspector ウィンドウから

②のスクリプトを探すと Prefab 設定欄があるので、弾の Prefab をドラッグして設定

④ 実⾏ボタン(画⾯上部中央▶)を押して弾が出るかどうか確認

弾のスピードや向きを変えたい場合は、弾につけた⽅のスクリプトを変更する

KeyCode.Space の部分で、その他のキーを指定することも可能(補完⼊⼒時の候補参照)

←発射の衝撃でキャラが後退するのを避けるにはキャラの isTrigger をオンにする

using UnityEngine;

using System.Collections; public class Run : MonoBehaviour {

public GameObject firePrefab; void Update () {

if (Input.GetKey(KeyCode.UpArrow))

transform.position = new Vector3(transform.position.x, transform.position.y + 0.1f, 0f);

if (Input.GetKey(KeyCode.DownArrow))

transform.position = new Vector3(transform.position.x, transform.position.y - 0.1f, 0f); if (Input.GetKey(KeyCode.Space))

Instantiate(firePrefab, transform.position, Quaternion.identity);

}

}

Prefab を宣⾔もとからあったコード

Page 29: Unity 2D 逆引き辞典 for Beginners

26

【スクリプト】 画面タップ(マウスクリック)位置へ移動する

① 動かしたいオブジェクトを選択する

② Inspector ウィンドウ(右側:オブジェクトの情報が表⽰されている)で「Add Component」>「New Script」をクリックし、Name 欄に「MoveByTap」(名前は⾃由)を⼊⼒し「Create and Add」

③ Project ウィンドウの Asset の中に MoveByTap スクリプトファイル(「C#」のマーク)ができているのでダブルクリックして開き、下↓のコードを書く

using UnityEngine;

using System.Collections; public class MoveByTap : MonoBehaviour {

float speed = 5f;

Vector2 posi;

void Update () {

if(Input.GetMouseButtonDown(0)){

posi =Camera.main.ScreenToWorldPoint(Input.mousePosition);

}

transform.position = Vector2.MoveTowards(transform.position, new Vector2(posi.x, posi.y), speed*Time.deltaTime);

}

}

Page 30: Unity 2D 逆引き辞典 for Beginners

27

【スクリプト】 スクリプトに慣れてきたら・・・

これまでの例では、理解しやすくするため、1つの⽬的に対して1つのスクリプトを作成していますが、本来、1つのオブジェクトにつける複数の動きは1つのスクリプトにまとめます。

下の例は、⽮印キーで左右に動き、画⾯外に出たら gameover シーンを呼び出し、スペースキーで弾を発射し、goal にぶつかったら clear シーンを呼び出すキャラクタにつけるスクリプトです。

これまでにでてきたバラバラのスクリプトをまとめた形になっています

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement;

public class LoadScene3 : MonoBehaviour{

public GameObject firePrefab;

void Update () {

if (Input.GetKey(KeyCode.LeftArrow))

transform.position = new Vector3(transform.position.x - 0.1f, transform.position.y, 0f);

if (Input.GetKey(KeyCode.RightArrow))

transform.position = new Vector3(transform.position.x + 0.1f, transform.position.y, 0f);

if (Input.GetKeyDown (KeyCode.Space))

Instantiate (firePrefab, transform.position, Quaternion.identity);

Vector3 view_pos = Camera.main.WorldToViewportPoint(transform.position);

if (view_pos.x < -0.5f || view_pos.x > 1.5f || view_pos.y < -0.5f || view_pos.y > 1.5f)

SceneManager.LoadScene("gameover");

}

void OnCollisionEnter2D(Collision2D coll) {

if (coll.gameObject.tag == "goal")

SceneManager.LoadScene("clear");

}

}

Page 31: Unity 2D 逆引き辞典 for Beginners

28

【スクリプト】 スニペット集

⼀定時間経過後に指定関数を実⾏する

Invoke("関数名", 秒); 例:Invoke("chien", 2);

注:関数名を指定する際、引数は渡せない

⼀定⽅向に⼒を加える

GetComponent<Rigidbody2D>().AddForce (new Vector2(-500, 0));

あとから追加します・・・