Unity 2D 逆引き辞典
~ for Beginners ~
	
	
	
	
	
	
	
	
	
Junko Suzuki
新規プロジェクトの作成(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	
	
	
	
	
目 次
1	
新規プロジェクトの作成(2D)	
① Unity を起動
② 右上「New」をクリック
③ ↓の画⾯で「2D」を選択し、Project name に好きなプロジェクト名を⼊れ「Create Project」クリック
→ ここで⼊⼒する名前はプロジェクト名、
つまりゲーム全体につける名前
→ プロジェクト名は⽇本語でも作成できる
が英語(半⾓英数)の⽅が良い。あとで
それが原因の不都合が発⽣する場合があ
る(画像名,シーン名その他についても
同様)。
→ 1つのプロジェクトには複数のシーン
(場⾯)が⼊るので、途中で作業を保存
する時には「プロジェクト全体の保存」
と「シーン」ごとの保存があることに注
意。
スクリプト(プログラム)も使う場合
は、その保存も別途⾏う必要がある。
※Sign in 画⾯が表⽰されたら「Work
offline」をクリックし、再度 Unity を起動。
アカウントなしで作業可能
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 画⾯
シーン・ゲーム ヒエラルキー プロジェクト(アセット) インスペクター
3	
プロジェクトの保存・シーンの保存	
シーンの保存
① 「File」メニュー>「Save Scene As...」で現在のシーンを「Main」(何でも OK)として保存
プロジェクトの保存
① 「File」メニュー>「Save Project」
※シーンとプロジェクトの両⽅を保存する
→ Scene とは「3 ⾯クリアした!」などの
ゲームの「⾯」のこと。名前は⾃由だ
が、あとから使うのでわかりやすい名前
に。アルファベットの⽅があとあと使い
やすい。
→ Project とはゲーム全体のこと。
1 つのプロジェクトの中に複数のシーンが
⼊ることになります。
4	
用意した画像をプロジェクトにインポートするには	
⽤意した画像をエクスプローラ上ですべて選択(Shift キーや Ctrl キーで複数選択)し、Project ウィンドウの
Assets フォルダの上にドラッグ&ドロップ、
(別の⽅法としては「Assets」メニュー>「Import New Asset...」からファイルを挿⼊)
→ ドラッグ先は Assets フォルダのフォル
ダ名の上か、または、その右側のエリア
のどちらでも OK
→⽤意する画像は PNG 形式がよい
⽤語 インポート(Import)
プロジェクトに何かを取り込むこと
⽤語 アセット(Assets)
ゲーム内で使う材料・要素のこと
5	
画像(スプライト)を画面上に配置するには	
① Projects ウィンドウの Assets にある画像を Scene ウィンドウにドラッグ&ドロップ
② マウスでドラッグしながらサイズ調整する(Inspector ウィンドウの Scale 変更でも OK)
	
	
	
	
	
→ サイズ変更の取っ⼿が表⽰されない場合
は、変更したいスプライトの⼤きさに対
して表⽰縮尺が⼩さすぎる可能性がある
ので、マウスホイールを回して拡⼤表⽰
してみる。
注意
Inspector ウィンドウで何らかの設定を
する場合、必ず、設定対象のスプライト
を選択してから⾏うこと。
→ スプライトを選択するには、Scene ウ
ィンドウで画像をクリックするか、
Hierarchy ウィンドウでスプライト名を
クリック。
Tips
スプライト名をわかりやすく変更してお
くとあとあと便利。変更は、Hierarchy
ウィンドウ上でスプライトを右クリック
→「Rename」
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 つの間を連続して選択
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」をゼ
ロにする
8	
ゲームを動かすには(1シーンだけ)	
① 実⾏ボタン(画⾯上部中
央▶)クリック
	
	
	
	
複数シーンの遷移をする場合の設定	
使⽤するすべてのシーンをビルド対象に追加する必要があります。	
① 「File」メニュー>「Build Settings...」で表⽰されたウィンドウにシーンをすべてドラッグ&ドロップ
② 終わったら、右上×マークで「Build Settings」ウィンドウを閉じる
注意
確認が終わったら▶ボタンをもう⼀度ク
リックして停⽌しておくことを忘れず
に!押したままの状態で⾏った作業はリ
セットされてなくなってしまいます。
使⽤するシーンのアイコンを Assets からダ
ブルクリックで開き「Add Open Scenes」
ボタンで追加する⽅法もあります。
9	
キャラクタが跳ねるようにするには	
① 「Assets」メニュー>「Create」>「Physics2D Material」
② Inspector ウィンドウ(右側:Material の情報)の「Bounciness」欄を 0.9 に(通常 0〜1)
③ Project ウィンドウの Assets の下にある New Physics を跳ねるるようにしたいもの(メインキ
ャラや障害物)にドラッグ&ドロップ
(または、メインキャラの Inspector ウィンドウ上で、「Circle Collider 2D」等コライダの
「Material」欄にドラッグ&ドロップ)
④ 実⾏ボタン(画⾯上部中央▶)を押して跳ね返るかどうか確認
→ Bounciness(跳ね返り係数)を好きな
数値に調整してみる
コライダがついた相⼿に対して跳ね返る
10	
画面に文字を表示するには	
① 「Game Object」メニュー>「UI」>「Text」
② Inspector ウィンドウ(Text の情報が表⽰)の「Text(Script)」の下にゲームタイトルを⼊⼒し、
「Font Size」を 20 に変更(⼤きすぎると⽂字が表⽰されない)
③ 「Pos X」「Pos Y」を両⽅とも 0 に、下のほうにある「Color」を⾒やすい⾊に変更
11	
【困ったとき】間違ってつけたコンポーネント(コライダやスクリプト)を外すには	
① コンポーネントを外したいスプライトを選択
② Inspector ウィンドウ(右側ウィンドウ)に設定されているコンポー
ネントがすべて表⽰されているので、外したいもの(Box Collider 2D
など)の右上にある⻭⾞マークをクリックし→「Remove
Component」
	
	
	
	
	
	
	
	
	
	
	
	
【困ったとき】POJECT ウィンドウにあった ASSETS がない	
Project ウィンドウ内の Assets フォルダをクリック
注意
背景にコライダ(当たり判定エリア)を
つけてしまうと、キャラとぶつかってし
まい、キャラが重⼒で落ちません
12	
ゲームを BUILD(パッケージ化)して実行するには(BUILD	&	RUN)	
①「File」メニュー>「Build & Run」をクリックするとファイル名を⼊⼒するウィンドウが表⽰されるので
「testgame」(⾃由)など⼊⼒
②「Screen resolution」は「1280×720」とし、「Windowed」(ゲームをウィンドウ内表⽰)にチェック
を⼊れ「Play!」
※Web Player で実⾏するか、スタンドアローンで実⾏するかは「File」メニュー>「Build Settings」
「Windowed」にチェックを⼊れないと、
全画⾯プレイとなり、ゲームを強制終了し
にくくなる。
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#を使っています。
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);
}
}
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 は呼び出すシーン名
(スペルが違うと動かないので注意!)
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 は呼び出すシーン名
(スペルが違うと動かないので注意!)
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 は呼び出すシーン名
(スペルが違うと動かないので注意!)
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 は呼び出すシーン名
(スペルが違うと動かないので注意!)
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]);
}
}
	
追加
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]);
}
}
}
“ ”の中は衝突する相⼿のスクリプト名
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);
}
}
	
衝突相手を消滅	
自分自身を消滅
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)の方向&大きさで力を加える
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 ずつ進む	
画面から見えなくなったらオブジェクトを消す
24	
弾を発射するには 〜その2/3〜	 弾を PREFAB 化する	
弾を無限に発射するには弾を Prefab にします。
① 前ページ「その1」で作成した弾オブジェクトを、Hierarchy ウィンドウから Project ウィンドウにドラッグ
し、Assets に⼊れる
② もともと Assets の中にあった弾スプライト(この例では"fire")とは別にもう 1 つ同じ名前のオブジェクトが
できているので、新しくできた⽅の名前部分をクリックし"firePrefab"など Prefab だとわかる名前に変える
③ Hierarchy ウィンドウにある、もともとあった弾オブジェクト(ここでは"fire")を削除する
弾の位置は後で変えるので適当で OK
translate( x 移動量, y 移動量, z 移動量)
→ 早く動かすには値を⼤きくする
弾は次々発射するので、画⾯から⾒えなく
なったら消しておかないと無駄が多い
Prefab とは設計図のようなもので、それを
もとに、いくつもオブジェクトを作り出せ
る
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 を宣⾔	
もとからあったコード
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);
}
}
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");
}
}
28	
【スクリプト】	 スニペット集	
⼀定時間経過後に指定関数を実⾏する
Invoke("関数名", 秒); 例:Invoke("chien", 2);
注:関数名を指定する際、引数は渡せない
⼀定⽅向に⼒を加える
GetComponent<Rigidbody2D>().AddForce (new Vector2(-500, 0));
あとから追加します・・・

Unity 2D 逆引き辞典 for Beginners

  • 1.
    Unity 2D 逆引き辞典 ~for Beginners ~ Junko Suzuki
  • 2.
    新規プロジェクトの作成(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 目 次
  • 4.
    1 新規プロジェクトの作成(2D) ① Unity を起動 ②右上「New」をクリック ③ ↓の画⾯で「2D」を選択し、Project name に好きなプロジェクト名を⼊れ「Create Project」クリック → ここで⼊⼒する名前はプロジェクト名、 つまりゲーム全体につける名前 → プロジェクト名は⽇本語でも作成できる が英語(半⾓英数)の⽅が良い。あとで それが原因の不都合が発⽣する場合があ る(画像名,シーン名その他についても 同様)。 → 1つのプロジェクトには複数のシーン (場⾯)が⼊るので、途中で作業を保存 する時には「プロジェクト全体の保存」 と「シーン」ごとの保存があることに注 意。 スクリプト(プログラム)も使う場合 は、その保存も別途⾏う必要がある。 ※Sign in 画⾯が表⽰されたら「Work offline」をクリックし、再度 Unity を起動。 アカウントなしで作業可能
  • 5.
    2 画面の調整 ① 右上の「Layout」ボタンから「2 by3」を選択しておく ② 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 画⾯ シーン・ゲーム ヒエラルキー プロジェクト(アセット) インスペクター
  • 6.
    3 プロジェクトの保存・シーンの保存 シーンの保存 ① 「File」メニュー>「Save SceneAs...」で現在のシーンを「Main」(何でも OK)として保存 プロジェクトの保存 ① 「File」メニュー>「Save Project」 ※シーンとプロジェクトの両⽅を保存する → Scene とは「3 ⾯クリアした!」などの ゲームの「⾯」のこと。名前は⾃由だ が、あとから使うのでわかりやすい名前 に。アルファベットの⽅があとあと使い やすい。 → Project とはゲーム全体のこと。 1 つのプロジェクトの中に複数のシーンが ⼊ることになります。
  • 7.
    4 用意した画像をプロジェクトにインポートするには ⽤意した画像をエクスプローラ上ですべて選択(Shift キーや Ctrlキーで複数選択)し、Project ウィンドウの Assets フォルダの上にドラッグ&ドロップ、 (別の⽅法としては「Assets」メニュー>「Import New Asset...」からファイルを挿⼊) → ドラッグ先は Assets フォルダのフォル ダ名の上か、または、その右側のエリア のどちらでも OK →⽤意する画像は PNG 形式がよい ⽤語 インポート(Import) プロジェクトに何かを取り込むこと ⽤語 アセット(Assets) ゲーム内で使う材料・要素のこと
  • 8.
    5 画像(スプライト)を画面上に配置するには ① Projects ウィンドウのAssets にある画像を Scene ウィンドウにドラッグ&ドロップ ② マウスでドラッグしながらサイズ調整する(Inspector ウィンドウの Scale 変更でも OK) → サイズ変更の取っ⼿が表⽰されない場合 は、変更したいスプライトの⼤きさに対 して表⽰縮尺が⼩さすぎる可能性がある ので、マウスホイールを回して拡⼤表⽰ してみる。 注意 Inspector ウィンドウで何らかの設定を する場合、必ず、設定対象のスプライト を選択してから⾏うこと。 → スプライトを選択するには、Scene ウ ィンドウで画像をクリックするか、 Hierarchy ウィンドウでスプライト名を クリック。 Tips スプライト名をわかりやすく変更してお くとあとあと便利。変更は、Hierarchy ウィンドウ上でスプライトを右クリック →「Rename」
  • 9.
    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 つの間を連続して選択
  • 10.
    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」をゼ ロにする
  • 11.
    8 ゲームを動かすには(1シーンだけ) ① 実⾏ボタン(画⾯上部中 央▶)クリック 複数シーンの遷移をする場合の設定 使⽤するすべてのシーンをビルド対象に追加する必要があります。 ① 「File」メニュー>「BuildSettings...」で表⽰されたウィンドウにシーンをすべてドラッグ&ドロップ ② 終わったら、右上×マークで「Build Settings」ウィンドウを閉じる 注意 確認が終わったら▶ボタンをもう⼀度ク リックして停⽌しておくことを忘れず に!押したままの状態で⾏った作業はリ セットされてなくなってしまいます。 使⽤するシーンのアイコンを Assets からダ ブルクリックで開き「Add Open Scenes」 ボタンで追加する⽅法もあります。
  • 12.
    9 キャラクタが跳ねるようにするには ① 「Assets」メニュー>「Create」>「Physics2D Material」 ②Inspector ウィンドウ(右側:Material の情報)の「Bounciness」欄を 0.9 に(通常 0〜1) ③ Project ウィンドウの Assets の下にある New Physics を跳ねるるようにしたいもの(メインキ ャラや障害物)にドラッグ&ドロップ (または、メインキャラの Inspector ウィンドウ上で、「Circle Collider 2D」等コライダの 「Material」欄にドラッグ&ドロップ) ④ 実⾏ボタン(画⾯上部中央▶)を押して跳ね返るかどうか確認 → Bounciness(跳ね返り係数)を好きな 数値に調整してみる コライダがついた相⼿に対して跳ね返る
  • 13.
    10 画面に文字を表示するには ① 「Game Object」メニュー>「UI」>「Text」 ②Inspector ウィンドウ(Text の情報が表⽰)の「Text(Script)」の下にゲームタイトルを⼊⼒し、 「Font Size」を 20 に変更(⼤きすぎると⽂字が表⽰されない) ③ 「Pos X」「Pos Y」を両⽅とも 0 に、下のほうにある「Color」を⾒やすい⾊に変更
  • 14.
    11 【困ったとき】間違ってつけたコンポーネント(コライダやスクリプト)を外すには ① コンポーネントを外したいスプライトを選択 ② Inspectorウィンドウ(右側ウィンドウ)に設定されているコンポー ネントがすべて表⽰されているので、外したいもの(Box Collider 2D など)の右上にある⻭⾞マークをクリックし→「Remove Component」 【困ったとき】POJECT ウィンドウにあった ASSETS がない Project ウィンドウ内の Assets フォルダをクリック 注意 背景にコライダ(当たり判定エリア)を つけてしまうと、キャラとぶつかってし まい、キャラが重⼒で落ちません
  • 15.
    12 ゲームを BUILD(パッケージ化)して実行するには(BUILD & RUN) ①「File」メニュー>「Build &Run」をクリックするとファイル名を⼊⼒するウィンドウが表⽰されるので 「testgame」(⾃由)など⼊⼒ ②「Screen resolution」は「1280×720」とし、「Windowed」(ゲームをウィンドウ内表⽰)にチェック を⼊れ「Play!」 ※Web Player で実⾏するか、スタンドアローンで実⾏するかは「File」メニュー>「Build Settings」 「Windowed」にチェックを⼊れないと、 全画⾯プレイとなり、ゲームを強制終了し にくくなる。
  • 16.
    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#を使っています。
  • 17.
    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); } }
  • 18.
    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 は呼び出すシーン名 (スペルが違うと動かないので注意!)
  • 19.
    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 は呼び出すシーン名 (スペルが違うと動かないので注意!)
  • 20.
    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 は呼び出すシーン名 (スペルが違うと動かないので注意!)
  • 21.
    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 は呼び出すシーン名 (スペルが違うと動かないので注意!)
  • 22.
    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]); } } 追加
  • 23.
    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]); } } } “ ”の中は衝突する相⼿のスクリプト名
  • 24.
    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); } } 衝突相手を消滅 自分自身を消滅
  • 25.
    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)の方向&大きさで力を加える
  • 26.
    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 ずつ進む 画面から見えなくなったらオブジェクトを消す
  • 27.
    24 弾を発射するには 〜その2/3〜 弾をPREFAB 化する 弾を無限に発射するには弾を Prefab にします。 ① 前ページ「その1」で作成した弾オブジェクトを、Hierarchy ウィンドウから Project ウィンドウにドラッグ し、Assets に⼊れる ② もともと Assets の中にあった弾スプライト(この例では"fire")とは別にもう 1 つ同じ名前のオブジェクトが できているので、新しくできた⽅の名前部分をクリックし"firePrefab"など Prefab だとわかる名前に変える ③ Hierarchy ウィンドウにある、もともとあった弾オブジェクト(ここでは"fire")を削除する 弾の位置は後で変えるので適当で OK translate( x 移動量, y 移動量, z 移動量) → 早く動かすには値を⼤きくする 弾は次々発射するので、画⾯から⾒えなく なったら消しておかないと無駄が多い Prefab とは設計図のようなもので、それを もとに、いくつもオブジェクトを作り出せ る
  • 28.
    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 を宣⾔ もとからあったコード
  • 29.
    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); } }
  • 30.
    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"); } }
  • 31.
    28 【スクリプト】 スニペット集 ⼀定時間経過後に指定関数を実⾏する Invoke("関数名", 秒);例:Invoke("chien", 2); 注:関数名を指定する際、引数は渡せない ⼀定⽅向に⼒を加える GetComponent<Rigidbody2D>().AddForce (new Vector2(-500, 0)); あとから追加します・・・