FC2ブログ

記事一覧

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサーリンク

育成ゲームが作りたい その3 ~お前、消えるのか~

こちらの続きです


Unity 161005 1

うわあああああああイモムシだらけだああああああああ!!!!!!!


きゅうりのキューちゃんみたいですね。

こやつらイモムシは消えることなく、いつまでも彷徨い続けるのだ・・・
という設定にするつもりもないので、生成したキャラクターを削除できるようにしてみます。

やり方は色々あるかと思いますが、今回は以下の手順でやってみます。

・toggleボタンをON/OFF
・それに応じて削除モードON/OFF
・削除モードON時にキャラクタークリックで削除


こんな感じでやってみましょう!


まずはtoggleの設置からですね。
UI関係は前回少し触れましたので大丈夫でしょう。
「Create」→「UI」→「Toggle」を追加です。

そしてこれまた前回のボタンのように、パネル上に設置します。
位置サイズ調整もご自由に。

このToggleというやつの構成は以下のような感じです。(デフォルト時)

・チェックボックス背景画像+チェックマーク画像
・ラベル(表示されるテキスト)


この二つがまとまってひとつのToggleとして表示されています。
今回、ボタンとデザインを統一したかったので少しだけ手を加えました。

「Create」→「UI」→「Image」でImageを追加、Toggleの子オブジェクト化します。
恐らく子オブジェクトは下にあるものほど手前に描画されるようなので、Imageは一番上に配置しました。

Unity 161005 2

上の画像のようにしたらOKです。

Imageのコンポーネント「Image(Script)」というところにある「Color」を調整して、ボタンと同じ色にしましょう。
スポイトアイコンをクリックすれば画面上から色を拾えるので簡単ですね。

Toggle内の「Background」、「Checkmark(Backgroundの中にあります)」、「Label」をそれぞれ調整します。
サイズと位置の調整はシーンビューでいい感じにやっておきます。
「Label」の「Text(Script)」コンポーネントからフォントサイズや表示位置等を調整できますのでここも好みで。

Unity 161005 3




UIの設置調整が終わったらスクリプトを書いていきます。


Unity 161005 4



これが今回用意するスクリプトです。
大まかにどんな動きをしているのかというところを書いていきます。

まずUIのToggleはON/OFF切り替えされた時(On Value Changed)にスクリプトを呼び出します。
呼び出されるのが
public void StateChange() の部分ですね。

削除機能の本体はdestroyCpu(このスクリプト)のUpdate()の中にあります。
削除機能のON/OFFをするのがStateChange()の部分です。
ToggleON/OFF → StateChange()呼び出し、削除機能ON/OFF という感じです。

では順番に詳しく見ていきます。

最初に呼び出される StateChange()の部分です。

public void StateChange(){
if(state) state = false;
else state = true;
}


ifは条件式(この場合stateと書いてあるところ)が真(true)であれば中身が実行されます。
変数stateはbool型で宣言してありますので
if(state) state = false; これはstateがtrueであればfalseに変更。

else state = true;  elseは上の条件に当てはまらなかった場合に実行されますので
stateがtrueでなかった場合(つまりstateがfalseであった場合)、stateをtrueに変更です。

※bool型変数はtrue , false どちらかの値を持ちます。
trueが真、falseが偽で、今回のようにON/OFFの判断などで使えますね。


文字で説明すると少しややこしい感じがしますが、考え方は簡単です。
スイッチがONならOFFへ、OFFならONへ変更しますよということです。


では次にUpdate()の部分を見てみます。

void Update () {

if(state && Input.GetMouseButtonDown(0)){
Vector2 point = UnityEngine.Camera.main.ScreenToWorldPoint(Input.mousePosition);
Collider2D col = Physics2D.OverlapPoint(point);
if(col != null && col.tag != "Player")  Destroy(col.gameObject);
}
}

if(state && Input.GetMouseButtonDown(0)) この部分から。
キャラクターの削除はクリックで行うので、Input.GetMouseButtonDown(0)で左クリックがされたときに実行するという条件を設定しています。
これにstateと付け加えてありますから、stateが真であることも条件になります。
今回この2つの条件が同時に満たされる場合のみ、キャラクターの削除を実行したいので
2つの条件の間に && という記号を入れています。
複数条件を設定、その全てを満たす必要がある場合 &&で条件を区切って記述します。
今回の場合

stateが真であり 且つ マウスがクリックされた場合  

という意味になるわけですね。

次にこの条件が満たされる場合にどんな処理がされるのかというところを。

Vector2 point = UnityEngine.......   この部分は前回も出てきたものですね。
イモムシを生成する場所を決めるのに使いました。
クリックした地点の座標を取得して、pointに格納しています。

Collider2D col = Physics2D.....
Physics2D.OverlapPoint()で指定座標にあるコライダーを取得できます。
取得したコライダーをCollider2D型のcolに格納しています。


またしてもifです。
if(col != null && col.tag != "Player") &&が出てきましたね。以下の条件を満たす場合にのみ先の処理に進みます。

colにはクリックされた場所にあったコライダーが格納されているはずですが、何もない場所をクリックした場合には
コライダーが取得できませんから col != null(空っぽ)に引っかかります。

col.tagで取得したコライダーについているタグを確認しています。もしプレイヤーキャラクターをクリックしていた場合
削除するわけにはいきませんから、 col.tag != "Player" で引っかかるようにしておきましょう。
タグの設定方法は下の画像に。

Unity 161005 4


数々の条件を乗り越え、いよいよ削除です。

Destroy(col.gameObject);

Destroy()で削除するオブジェクトはオブジェクト型で指定する必要があります。

col.gameObject とすることで取得したコライダーのgameObjectを指定できます。

以上でスクリプトは完成です!

スクリプトをToggleにアタッチ、ToggleのインスペクタからOn Value Changedの設定をしておきます。
前回のボタンの設定と同じですね。

Unity 161005 4


Toggleの初期状態はオフにしておきたいので、Is On のチェックを外しておきます。

(画像に印つけ忘れました・・・On Value Changed の少し上あたりです。画像でも外してありますね。)


これですべての準備が完了しました。
実際に動かしてみましょう。

前回作ったボタンでイモムシ君を生成、今回作ったToggleで削除モードをON!!!



寂しそうなプレイヤー君


Unity 161005 5


今回はここまでです。
ありがとうございました。
スポンサーサイト

スポンサーリンク

コメント

コメントの投稿

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。