読者です 読者をやめる 読者になる 読者になる

こたつにっき

Unityで遊びつつメモとか書きます

Unityでシミュレーションっぽいものを作りたい #2

皆さんこんばんは。

このブログでこんなに更新ペースが早いのは前代未聞ですね。

暇なんです。

 

さて、シミュレーションゲームの続きです。

前回はユニットを移動させる所まででした。

kotatu99.hateblo.jp

 

お次は

作りたいもの

  • 占領エリア

を作っていこうと思います。エリアにユニットが入るとゲージがギューンと伸びてパァッ!となる奴です。

伝わってるか不安なので出来上がったものがこちらとなります。

これを作ります。

f:id:kotatu99:20170130220131g:plain

実装

 エリアの設定はまず、SphereColliderつけたオブジェクトに入ってきた(OnTriggerEnter)ゲームオブジェクトが「team1」か「team2」のタグを持ってればそれぞれteam1配列とteam2配列に追加します。これが占領エリアとなります。

 エリアから出る(OntriggerExit)と、配列から消去。これでエリア内にいる各チームのユニット一覧が完成。以下参考。

teratail.com

 

 次に、占領ゲージを実装します。こいつが曲者・・・条件分岐でグダグダやってました。まず、ゲージの条件は以下。

  1. ユニット数の多いチームのゲージが上昇
  2. ユニットが同数の場合ゲージはストップ
  3. ユニット数が逆転した時、相手のゲージを減らし、中立状態にしてから自軍が占領
  4. 占領途中でユニットがいなくなった場合元の状態へ復元

ゲージのUIはuGUIのスライダーを利用。ゲージの操作はコルーチンでやっています。

また、エリアがビクンビクンしてますが、これはParticleSystemでやっています。

↓こんな感じのテクスチャを貼り付けて、

f:id:kotatu99:20170130220656p:plain

Size over Lifetimeでビクンビクン。

f:id:kotatu99:20170130220629p:plain

色の変更はスクリプトからStartColorを変更しています。

中立→灰色(Color.gray)

team1→シアン(Color.cyan)

team2→マゼンタ(Color.magenta)

 

ソースコードはこちら。

OccupyController2.cs · GitHub

 "2"なのはブログ書いてる途中で色々書き直したためです。

 

本来ならここでソースコードの解説をしたいんですが、

正直なんでこれで動いてるのかよく分かっていない

そもそもコードが汚すぎるので誰か直してください。

ので、とりあえず置いておくだけにします。

コメントにわかり次第書き足していくと思いますが…。

 メソッドの流れだけ一応しておくと、ユニットの出入りがあるとAreaOccupy()が呼び出されて、それによってゲージの上下がされます。そこからコルーチンOccupyかDeOccupyを起動します。

 

完成

まだまだ改善の余地ありですが、一応実装したいものは実装できました。

f:id:kotatu99:20170130214557g:plain

 

課題

  • 占領途中でユニットがいなくなった場合元の状態へ復元←これ出来てないブログ書いてたらできるようになりました
  • コードが汚い
  • そもそも何がどうなってるのかよく分かってない
  • エリアの占領の演出とか欲しい

それと、現状のユニット操作システムだと、1体の操作はまあいいんですが、複数になると混乱しまくるのでそっちも直したい所。

 

 

↓今回作ったもの

Unity WebGL Player | StrategyTest2

方向キー WASDキー : カメラ移動

Q E キー : カメラズームイン・アウト

クリック : 選択

選択後目的地クリック : 移動