Unityでシミュレーションっぽいものを作りたい #2
皆さんこんばんは。
このブログでこんなに更新ペースが早いのは前代未聞ですね。
暇なんです。
さて、シミュレーションゲームの続きです。
前回はユニットを移動させる所まででした。
お次は
作りたいもの
- 占領エリア
を作っていこうと思います。エリアにユニットが入るとゲージがギューンと伸びてパァッ!となる奴です。
伝わってるか不安なので出来上がったものがこちらとなります。
これを作ります。
実装
エリアの設定はまず、SphereColliderつけたオブジェクトに入ってきた(OnTriggerEnter)ゲームオブジェクトが「team1」か「team2」のタグを持ってればそれぞれteam1配列とteam2配列に追加します。これが占領エリアとなります。
エリアから出る(OntriggerExit)と、配列から消去。これでエリア内にいる各チームのユニット一覧が完成。以下参考。
次に、占領ゲージを実装します。こいつが曲者・・・条件分岐でグダグダやってました。まず、ゲージの条件は以下。
- ユニット数の多いチームのゲージが上昇
- ユニットが同数の場合ゲージはストップ
- ユニット数が逆転した時、相手のゲージを減らし、中立状態にしてから自軍が占領
- 占領途中でユニットがいなくなった場合元の状態へ復元
ゲージのUIはuGUIのスライダーを利用。ゲージの操作はコルーチンでやっています。
また、エリアがビクンビクンしてますが、これはParticleSystemでやっています。
↓こんな感じのテクスチャを貼り付けて、
Size over Lifetimeでビクンビクン。
色の変更はスクリプトからStartColorを変更しています。
中立→灰色(Color.gray)
team1→シアン(Color.cyan)
team2→マゼンタ(Color.magenta)
ソースコードはこちら。
"2"なのはブログ書いてる途中で色々書き直したためです。
本来ならここでソースコードの解説をしたいんですが、
正直なんでこれで動いてるのかよく分かっていない
そもそもコードが汚すぎるので誰か直してください。
ので、とりあえず置いておくだけにします。
コメントにわかり次第書き足していくと思いますが…。
メソッドの流れだけ一応しておくと、ユニットの出入りがあるとAreaOccupy()が呼び出されて、それによってゲージの上下がされます。そこからコルーチンOccupyかDeOccupyを起動します。
完成
まだまだ改善の余地ありですが、一応実装したいものは実装できました。
課題
- 占領途中でユニットがいなくなった場合元の状態へ復元←これ出来てない←ブログ書いてたらできるようになりました
- コードが汚い
- そもそも何がどうなってるのかよく分かってない
- エリアの占領の演出とか欲しい
それと、現状のユニット操作システムだと、1体の操作はまあいいんですが、複数になると混乱しまくるのでそっちも直したい所。
↓今回作ったもの
Unity WebGL Player | StrategyTest2
方向キー WASDキー : カメラ移動
Q E キー : カメラズームイン・アウト
クリック : 選択
選択後目的地クリック : 移動