unity 2d 逆引き辞典 for beginners
TRANSCRIPT
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));
あとから追加します・・・