◎ HowToMake全部見せます企画 ~Unity版~ ◎


3ページ目

§6 ターゲットの動き
企画書を見ると
 「ランダムで配置」
 「クリックしたら消える」
 「したのを消したら上のものは落ちる」
とかややこしいことが書いてあるぞ。

1.ターゲットに重力を設定する
上のものは落ちる、ということは重力が効いてるんだ。
まずはここから。

「preA」を配置する。
右のところの「Add Component」から「physics 2D」→「Ragidbody 2D」を選択。
これで、重力が設定された。
このまま画面上部の再生ボタンを押すと、Aが、そのまま、ゆっくり、落ちていく……あー画面外に行ってしまった。
中止。とにかく重力がついたのでOK。

2.クリックしたら消えるようにする
スクリプトの出番だ!
Scriptフォルダの中に右クリック→Create→C# Scriptで新しいスクリプトを作成。
名前を「SpreA」とする(同じ名前がたくさんあったらどれを指すのかわからないので、頭にScriptのSを付けた)。
そしてダブルクリックすると……
付属のエディタ「Mono Develop」が起動する。
このエディタでスクリプトをカキカキしますよ。

えーっと、「クリックしたら」「このオブジェクトは消滅する」ということを書けば、
とりあえず消えるようになるはず。

void Updateの中に
// もしクリックされたら
if (Input.GetMouseButtonDown (0)) {
//このゲームオブジェクトを殺す
Destroy (this.gameObject);
}
と書く。
このスクリプト、毎フレーム「俺はもしクリックされたらこのゲームオブジェクトを殺す」とブツブツつぶやいているわけですな。
保存して、Unityの方にもどりましょ。
書いたスクリプトが力を発揮するには、GameObjectにくっついてないといけない。
配置済みのプレハブの「preA」をクリックして、Add Component→Scripts→preA。
もしくは、プレハブをクリックした状態で、Scriptフォルダからいきなりドラッグ&ドロップ。
お好きなほうをどうぞ。スクリプトをクリックすると、右の表示が変わっちゃうので、気を付けて。
ついたので、画面上部の再生ボタンを押して、プレハブが画面からいなくなる前にクリック。
消えた消えた! よしよし。さらに消えたときに、左のところからpreAの表示がなくなった。
これがDestroy(this.gameObject);の威力である。

最低限の動きがターゲットについたので、とりあえずヨシとする。

元のプレハブに、いま変更した「重力を付ける」「スクリプトを付ける」を反映させるため、
左の「preA」をクリック→右の上のほうにある「Apply」をクリック。
太文字だったところが細文字になった。どうやら太文字のところは変更点だったようね!
これで何個プレハブを配置しても全部に「重力」と「スクリプト」がついてる。安心。

配置に関しては、まだ先延ばしにしよう。めんどくさそうだし。

同じようにBとCもしたいけれども、まだついてない機能がありすぎるので、引き続きAのみを触ります。さわさわ。




§7 ターゲットを画面から零れ落ちないようにする
画面上にターゲットを入れておく器を作れば、落ちないよね。
器とターゲット両方にあたり判定がないとぶつかってくれないので、まずはあたり判定を付ける。

1.Colliderの設定
Colliderってコライダーって読むんだって。コリダーじゃないのか…。
1-1.ターゲット
「preA」にAdd Componentから2DのCircleColliderを加える。
Aがでかいので、ABC_0のScaleを「0.5,0.5,1」に変更しました。
preAに戻って、Colliderのサイズ Radiusを、実際の絵と同じサイズに変更します。
私の作った画像には、0.7がちょうどいいみたい。

元のプレハブに反映させておこう。
1-2.器
配置しているオレンジにぶつかって止まってもらおう。
こっちのrectにもColliderを付ける。こっちは四角いので、BOXを選ぶ。ぴったりサイズのようだな。

これで再生すれば、Aが落ちてオレンジのところで止まるはずよ。
止まらなかったりうまったりしたら設定を見直そう。


企画書によると、画面いっぱいに配置するみたいなので、横の壁を作って横から落ちないようにしたほうがいい気がする。
配置しているrectを右クリック→Duplicateで、複製してくれる。一番上に(1)付きで出てくる。
適当に細長く変形させて……壁っぽく配置すればいいんじゃない。できた。
これをさらに複製して、反対側にも設置。
3つを一つにまとめて、プレハブにしてしまおう。

空のゲームオブジェクトのpositionを「0,0,0」に設定してから、rect三つを中に入れること。
これを忘れるとあとで「妖怪 なんかちょっとずれてる」がやってくるからね……。

器ができた。
試しに沢山preAを配置して、横からこぼれないかどうか確認してみよう。
さっそく配置して…

再生!
落ちた! はみ出ない! 最高!
もうゲームはできたも同然じゃないか。ははは!


試しにクリックを……あれ? 全部消えた?
……。
………。
あ、スクリプト間違えてるわ。

void Updateの中に
// もしクリックされたら
if (Input.GetMouseButtonDown (0)) {
って書いてるんだけど、これ、画面の中どこでクリックしても効きますやん。だめですやん。

慌てずにインターネッツで調べるんだ。
「Unity C# クリック」……めっちゃ出てくる。
あと、C#ってC#がわかってる人向けだからよくわからん。
~1時間経過~
でてこねぇ!!! いや、出てくるんだけど、
わざわざ「クリックしたところから光線を飛ばしてオブジェクトにぶつかったら云々」なんて書きたくないわけですよ。
そんなまどろっこしいことをしたくない。
過去に作ったゲームでなんか簡単な奴で描いたはずだ。なんでそれが出てこないんだ!

というわけで過去のソース漁ってきました。あったあった。


void OnMouseDown(){
Destroy(this.gameObject)+
}

これだけでOK。
これをクリックされたいオブジェクトに付ければ、クリックされたら消える。
検索用に声を大きくして書きますが
UnityのC#でGameObjectをクリックして動作するなにかを書きたいときは
上記の「OnMouseDown」を使えばいいです。
ボタンが押された瞬間に反応します。

上げたときの反応が良かったら、「MouseUp」にします。
Upっていうのは、一度マウスのボタンが押されてから離されたとき、の判定だけど、
初めにクリックしたオブジェクトに対して効果があるので、
まちがえた、とかいって別のオブジェクトにドラッグしてから上げても元のオブジェクトが消えるので注意。


とにかく、えーっとなんだっけ、


void Update(){
if (Input.GetMouseButtonDown (0)) {
Destroy (this.gameObject);
}
}



void OnMouseDown(){
Destroy(this.gameObject)+
}

にすればOK。

ちゃんと一個ずつ消えた! よっしゃ、もうゲームできたも同然!(二回目)


制作時間経過を見てみよう。
1時間調べものしてたし、この記事も書きながら作ってるけど、
ここまででおおよそ3時間です。


§8 いったん休憩
おなかすいた。ごはん食べてきます。
の前に、データが飛んだら困るので、保存しましょう。
上のメニューから「File→Save Scene As...」で名前を付けてシーンを保存。
なんでもいいので、001にしておく。
シーン用のフォルダなんて作ってないけど、そんなに増えないはずだし、Assetsに保存。
そのあと、プロジェクトも保存。
これでOK。

この辺まで1時間くらいで作るつもりだったから全然途中で保存してないけど、大丈夫大丈夫。

ここから先は頻繁に適当に保存してください。ははは。






←前へ 目次 次へ→