【開発日誌】2日目:アセット購入とフィールドの準備【UnityでRTS作るお】

今日やったことなどをつらつらと書いていきますぅ

購入したアセット

まずは、現状購入したアセットについてメモ

拡張系


  • UIでおなじみのアセットです。
    タッチ入力などは全てNGUIにあわせて実装していきます。

マップモデル


  • モバイル向けのマップアセット。
    2D風の見た目なので、上にスプライトを乗せても違和感ないのが良さそうです。

  • 【全部タダ!】無料で使える Unity Asset 50選 -3Dモデル編-
    こちらに紹介されていて良さそうだったのでDLしてみました。
    1マテリアルにまとまっているのでモバイルにもいい感じです。

  • こちらも、同じく紹介されていた無料アセットです。
    無料版だけでも60+assets、

    有料版になると、2013/12/03現在55$しますが、700 assetsとのことなので、様子見つつ買ってしまおうかと考えてます。
    モバイル向けは有料版にし入ってないようなので、さっさと買っちゃった方がいいかもしれません。
    オリジナルに拘らなければ、このアセットさえあれば一通りのマップは作れちゃいそうですね。

パーティクル


  • トゥーン調の爆発エフェクト
    Shuriken使ってなくてサイズなど細かく弄れる

  • 光物の魔法系エフェクト
    Shuriken使用
    ほかにもFlyingTeapotさんのパーティクルにはお世話になる予定です。

カメラの操作

  • スワイプするとスクロール
  • ピンチイン/アウトで拡大縮小

NGUIとの兼ね合いとしては、
[Unity]NGUIで何もないところの入力を受け取る方法
こちらに書いてあるようにMain CameraにもUICameraをアタッチし、UICamera.fallThroughで受け取るようにしました。
あとは、OnPressやOnDragに必要な処理を書いて完了です。

実際のスクリプトはここでは載せませんが、やったことは大したことなくて、
スクロールはPlane.Raycastで座標を取って移動させるだけ。
ピンチイン/アウトはスクリーン上の2点のタッチ位置の距離によってorthographicSizeを変更するだけです。

仮スプライトの作成

SpriteStudio for Indieのライセンスが来たので、まずは仮のスプライトを作成します。
4方向で、それぞれ待機、移動、攻撃の12アニメーション+死亡(向き固定)の計13アニメーションになります。
左右反転で使いまわせるところも多いので、パーツやアニメーションはほぼ半分で済むと思います。

作成手順

  • ラフをSAIで描く
    パーツごとにレイヤーを分けて、どこで区切るかこの段階で考える。
    SAI使ってるのはそっちのほうがラフ描きに慣れているってだけ。
    (最近更新がないのが残念。FireAlpacaとかフリーであるけどどうなんざんしょ)
    SpriteBase
    最終的にこんな感じに
  • PhotoShopCCにてパス取り
    これもパーツごとにレイヤーを分ける
    輪郭はつけないで、基本ベタ塗り
    Sprites
    細かいところは後回し~
    ここまで完了。残りは明日に。
  • パーツごとにばらして、角度を調整する
  • パーツごとにpng出力
  • TexturePackerでまとめる
    TexturePacker To SSを使用。
    SpriteStudioの公式ダウンロードページから入手できます
  • SpriteStudio上でセルを配置してアニメーション組む
    左右反転で済むところは反転するだけ。
  • SS5Player for Unityでインポート

ユニット管理

先におおまかな仕様決めだけ済ませておきます

  • ユニットのマスターデータフォーマット決める(詳細はヒミツ)
  • ユニット固体の処理はUnitControllerに実装。
    生成するときにユニットのマスターデータを受け取って、スプライトやHPなどの設定を行う。
    UnitControllerは敵味方共通で実装。
    違いはターゲット指示をプレイヤーがするかAIがするかだけなので、内部的な処理は全て共通で済む。
  • 全体のユニットやマップとの連携部分はFieldSceneControllerに実装。
  • ユニットをタッチするとFieldSceneControllerにメッセージを飛ばして選択処理など
  • ユニット選択中にクリックすると、その位置が移動先に。

オブジェクト配置&移動処理の考察

要件としては以下のとおりです。

  • オブジェクトごとに何マス占有するかの設定
  • グリッド単位でオブジェクトを配置
  • グリッド単位でのA*移動処理(斜めマス移動しない原始的なタイプ)
  • オブジェクトをランタイムで消したら通行可能になる(壊れるオブジェクト)

これらの条件を満たすようなエディタ拡張系アセットを探していたのですが見つからず・・・
しかたないので自作する方向で考えます。
別にアセットストアなどで公開して販売するものではないので、
ざっくり作ってしまって多少の使いにくさは目をつぶります。

作り方は

  • オブジェクトのPrefabにマス幅を指定(中心から何マスか)
    中心ですでに1マス。実際は奇数しか受け付けない。
  • MapRootスクリプトを作っておいて、マップのルートオブジェクトにアタッチ
  • オブジェクトをMapRoot以下に普通に配置。調整がめんどいけど、MapRootの位置を0.5ずらしといたりしてなるべく簡略化。
    Transformのエディタ拡張して、小数点以下切捨てボタンとか付けるとさらに楽かも。
  • MapRootはゲーム開始時に、自分の子オブジェクトをすべて見てグリッド単位の移動可否リストを作る。
  • 始点と終点を指定すると、前後左右のどの方向に移動するかを返す。
    移動単位はマスごとなので、1マス分の移動補間中はA*での探索を省略できるのと、
    ターゲットが移動中の敵ユニットでも臨機応変に移動してくれる。
  • オブジェクトを破棄すれば、マップのリストからも消して通行可能に。

ざっとこんなもんでしょうか。

ちなみに、UnityのNavMesh使って360度自由に動かせば?という案もあると思いますが、
スプライトを4方向作るのがが精一杯なので難しいですね。
なにせ一人で作ってるもんで・・・

楽にクォータービュー作れる方法あったら教えてほしいです!

振り返り~

SpriteStudioのライセンス取得で基本的な作業環境が整いました。
整ったのはいいのですが、仕様を詰めつつの平行作業だったので、これという成果物ができなかったのは失敗だったかもしれません。
ただ、やはりどんなに頑張っても途中で集中力が切れてしまうので、
ひとつのことに拘るよりも満遍なく作業していくほうが自分としては合っている気もします。

実はあまり寝付けなくてぶっ続けで作業してたんですよねぇ。
途中ちょっと昼寝したのですがすでに眠気マックス・・・
もしや一番の敵は生活サイクルなのか!?

Unityのアセット販売中!

ステートマシンの状態遷移やパラメータはエディタで編集でき、
ゲームロジックに依存するステートの挙動はスクリプトで記述可能なエディタ拡張。

詳細はこちら

RPGツクールVXやWOLF RPGエディターのオートタイルに準拠したエディタ拡張。

詳細はこちら

オススメ!