まいにち、いっぽ

物事を理解するための出力装置

タワーディフェンステンプレートを改造してみた

概要

www.asset-sale.net

イベントという事なので、解析したかったアセットを解析&お題の「3」に合わせて3点改造してみました。元の状態と比べて、Waveの最後まで楽しく見ていられるくらいになっています。 公式で解説されていない部分を書き換えているので、アセットをダウンロードしてチラ見しては如何でしょうか(^ω^)ノ

assetstore.unity.com

以下が改造点です。

  • 改造1.テキストの日本語化
  • 改造2.攻撃した感を出す
  • 改善3.マウス+キーボード操作を私にとってやりやすくする

アセットを解析する際のアドバイス

  • 気になる挙動に注目して調べる事。調べていて気になった単語、処理は別途まとめる事で脱線を防ごう。
  • 公式ドキュメントを一通り読んでおくことで、どういう機能があるかを前もって把握出来る。
  • 全部を詳細まで理解するよりも、1つのコンポーネントが受け持っている内容を理解していく方が解析スピードが上がる。
  • 作り方の違いからデータの管理方法、UIの挙動、Prefab の構造は違う物と考えておく。「いつもの」は存在しない。
  • この作り方が絶対ではないはずなので、良い点悪い点を考える必要がある。

改造1.テキストの日本語化

タワーの情報をパッと見たときに分かり辛く感じてしまったので、日本語化を行った。
書き換えたファイル達は以下の通り。

  • Assets\Data\Levels にレベル別の詳細テキスト
  • Assets\Data\Tower にタワー情報
  • Assets\Prefabs\Towers の各タワーのプレハブの Tower コンポーネントのタワー名
  • Assets\Scenes の各シーンの UI の英語(個別に書くのは辛い…)

テキストを変えた事でレイアウトが狂うので、サイズ調整が必要でした。 こんな感じです。 f:id:syuuki_kisaragi:20180422134538p:plain f:id:syuuki_kisaragi:20180422134602p:plain

改造2.攻撃した感を出す

改造した動機

  • 攻撃した感が薄く、何が起きたのか分かり辛く感じた
  • scene 上では色々と動いているように見えるが、画面上に反映されていないように見えていた
  • 各パラメータを見る限りでは異常を感じる物が見つからず、不思議に感じていた

結果

  • 「Directional Light」の intensity を 1 に変更し、各レベルのライトマップをベイクしなおす
  • 攻撃エフェクト、ヒットエフェクトが見えるようになり楽しく見えるようになった
  • 最初はダメージ数値を表示しようと思ったが、エフェクト達が見える事で十分に楽しくなったw

エフェクトが見えやすくなりました(^ω^) f:id:syuuki_kisaragi:20180422135311p:plain

改善3.マウス+キーボード操作を私にとってやりやすくする

操作し辛いと感じた部分

  • マウスポインタを画面端に移動させるとカメラが移動する為、ポーズボタンなどを押すとカメラが移動する
  • マウスの右ボタンを押しながらドラッグでカメラが移動するが、カメラの移動方法が逆に感じる(windows ユーザーだからとか?)
  • マウス左ドラッグでカメラを動かしたいと感じた
  • 配置するコストの表示を見落としがち

コードの解析

  • level 1 の Scene の GameCamera オブジェクトの TowerDefenseKeyboardMouseInput コンポーネントで処理を行っている様なのでコード確認
  • 継承元の KeyboardMouseInput の DoScreenEdgePan()と DoRightMouseDragPan() が該当部分だった

画面端ではカメラが動かないようにする

  • 画面端の処理を無効化するためのプロパティを追加
  • DoScreenEdgePan() に判定処理を追加して無効化!

ドラッグ方向を逆にする

  • 反転させるためのプロパティを追加
  • DoRightMouseDragPan() で panVector を求めた後にプロパティに応じて反転させる

マウスの左クリックでドラッグさせる

  • DoRightMouseDragPan() の mouseInfo.mouseButtonId で ID を指定して判断を行っているのでコメントアウト
  • ID の判定が無くなり、左右どちらのボタンでもドラッグが可能になる
  • 関数名から「Right」を削除して完了

コスト表示を分かり易い位置に移動させる

  • UI を動かして、サイズ調整
  • UIによって基準となる位置が違ったりするので、不思議な挙動が見られた。極力基準は揃えた方が分かり易そう

最後、解析をした感想

  • 結果として全体の雰囲気はつかめてきたが、思ったより内部が複雑なので新規拡張には時間がかかりそう。
  • チュートリアルに書いてある事以上に色々な技術が詰まっており、非常に有用なコンポーネントがあった
  • 普段はタワー情報などは1ファイルにまとめて管理していたため、タワー名とタワーの詳細が別のファイルにあり動作を追い辛かった
  • Key 操作はかなり分かり易い状態。InputController でイベント発行、処理は TowerDefenseKeyboardMouseInput。Key のクラスが少し継承数が多いかな?
  • 公開しようと web gl で書き出してみたら、シーン切り替えで止まる。4時間くらい動作検証をして、すぐに解決できなさそうなのでステージ1のみに切り替えた(´・ω・`)
  • unity room にサンプルと見た目が変わらない物を置くのはどうなの?、と悩んだので公開はしませんでした。
  • 実は大体1日で終わろうと考えていたが、合計で3日くらいかかりました(^o^)

公開しなかった実行ファイル

2018/05/11 頃までアップしています。ソースコードも公開しようか迷ったのですが、何か権利に引っかかると面倒だと思いましたので諦めました、すみません(´・ω・`) bin.zip - Google ドライブ