Unityでシミュレーションっぽいものを作りたい #1
あけましておめでとうございます。
新年の挨拶が遅くなってしまい申し訳在りません。
もう年明けから1月が経ちそうですが、実は私
特に何もしてません。
はい。
巷ではGGJ2017とか開催されたりなんだりで皆さん忙しそうでしたね。
GGJとはレッドブルをガブ飲みしながら徹夜で三日二晩ゲームを作り続ける地獄のイベントです。(個人の感想です)
僕も去年参加しちゃったりなんだりしてました。
僕は寝袋で寝ました。
なんだかんだで TwitterでGGJ実況を見てたら行きたくなって来たので来年は行きたいです。
前置きが長くてすみません。
そんな訳でたまには僕もアウトプットしないと、このまま家でミイラになっている所を発見されてしまうのでちょこちょこ作っていたものを置いておきます。
作りたいもの
リアルタイムシミュレーションゲームでよくある
- ユニットクリック→目的地クリックでの移動
これを作ってみたい!
実装
まずユニット選択はEventSystemでGameObjectを選択します。
参考になるブログがあったので簡単でした。
いやー参考になるブログだなあ
テラシュールブログの次に参考になるわー
上の記事通りにマウスオーバーで色変え、クリックでまた別の色へ変更。
選択はできたので移動させます。移動はNavMeshを利用。
AIキャラクターのTargetにクリックした場所を設定します。
今回ちょっと戸惑ったのがNavMeshでの飛び降り
これできるんか?と思ったらバッチリその機能ありました。
Navigationの OffMeshLinks から設定できるんですね。初めて知りました。
飛び降りる高さを設定すると自動で飛び降りポイントを作ってくれます。
なんか絵面が気持ち悪い
ただ、OffMesh移動中は”ギュン”って感じで挙動が妙に速くなるので対策が必要です。重力に引かれて落ちたりしてくれないです。
そこはテラシュールブログ様に頼りましょう。いつもお世話になってます!!!
でも今回は面倒だったので実装してないです。すいません。じきにやります。
これで当初の目的は一通りできたんですが、シミュレーションゲームって、
こういう回り込みをどっちにするかで敵の裏をかいたりするのが醍醐味ですよね?
僕がSLGで一番好きなのはここ!!!これを実装するには目的地一個じゃ足りない!!!
という訳で、目的地を3つ保持できるようにしました。
ここは実際のゲームに実装するとしたら何個でも選択できるようにした方がいいんですかね?まあゲームデザインの事は置いておきます。
保持は配列を作って目的地に着いたら次にずらしてるだけです。
gistb9f9185d167fbcda428627639df3806d
ソースコードはこんな感じでRayを飛ばして当たったところにTarget用のGameObjectを移動。Meshを表示させます。
いちいちGameObject生成とかやってられませんからね。
それをAIが持つ目的地の配列に追加し、配列0番目を直近のターゲット(目的地)として指定します。
後は目的地に着いたら(次の目的地がある場合)配列の次の場所をターゲットとして指定するようにすれば完了!
完成
以上を組み合わせてこんな感じ
OffMeshの飛び降りの挙動も分かりますかね。
これで
- 選択
- 移動先複数指定
- 移動
ができました!やったぜ!
課題
- 目的地間のラインとか表示したい
- 攻撃とかさせたい
- OffMeshの挙動
こんなところでしょうか。モデルとアニメーションはアセットストアからのものですが、結構合ってて楽しい。
↓一応作ったの動かせます
Unity WebGL Player | StrategyTest
方向キー WASDキー : カメラ移動
Q E キー : カメラズームイン・アウト
クリック : 選択
選択後目的地クリック : 移動
ではまた〜