- マウスや画面のタッチ判定を用いて画面上に線を引くやつ
- Unity2021.3.4f1
- Microsoft Visual Stdio 2022
線の引き方
- LineRendererを使った
- マウスの判定を取り、生成したオブジェクトにタッチで撮った座標を反映させる
- 生成時にLineRendererコンポーネントのpositions項目に対する生成時からの経過時間を記録する事で、一定時間後に視点から消えていく様にする
当たり判定
- EdgeCollider2Dを使った
- 線の生成と同時にEdgeCollider2DコンポーネントのPoints項目にも座標を反映させる
遭遇した問題点
-
描いた線を始点から消せない問題
- LineRendererはVector3型配列、EdgeCollider2DはVector2型Listであるため、相互の同期した管理や、LineRendererのPosition配列を先頭から消す方法に苦戦した
解決方法 : 線のPoint座標をListとして保持し、精製や抹消をList上で管理、各種項目に反映させることで解決
- LineRendererはVector3型配列、EdgeCollider2DはVector2型Listであるため、相互の同期した管理や、LineRendererのPosition配列を先頭から消す方法に苦戦した
-
EdgeCollider2Dコンポーネントを使用する際、使用ユーザーのレポートサイトが極端に少なく、些細な不具合の修正に時間を取った
- 本当にUnityマニュアルくらいしか引っ掛からない
- 以下に使用したEdgeCollider2Dの項目をまとめておく
EdgeCollider2D概要(本当はこういう使い方らしい)
※EdgeCollider2D同士では衝突判定を取らないので注意
本プロジェクトで使用した項目
float EdgeCollider2D.edgeRadius{get; set;}
: 本コライダーは円形に取られる。そのコライダーの半径を指定する。bool EdgeCollider2D.SetPoints(List<Vector2> points)
: 当たり判定の頂点座標をまとめて指定する。
ちょっと ムカついた 使いにくいと思ったところ
- 必ずSetPoints関数を呼ばないとColliderが新しく反映されない : 頂点座標(Point)の要素数を更新(減)しても最後にSetPointが呼ばれた状態でモノ言わない。LineRendererでは要素の後ろから消えたのに。
- 曰く、EdgeCollider2Dはアクセスを受けるたびにその配列が更新される仕組みらしい。
- 横スクロール型アクションゲーム
- ゲーム開始と同時にキャラクターに合わせて画面がスクロールする
- キャラクターは地面や描かれた線の上を走ることが出来る
- ゲーム画面に点在するコイン(アイテム)を集めていく
- 強化アイテムを取るとキャラクターが強化される
シーン
●タイトルシーン
- ゲーム開始ボタン
→ゲームシーンへ - スキンオプションボタン
- 選択画面
- オプションボタン
- 音量
●ゲームシーン
- 一時停止ボタン
- 再開ボタン
- やり直しボタン
- タイトルへ戻るボタン
- リザルト画面
- 終了ボタン →タイトルへ
キャラクター
- ゲームの開始と同時に自動で右に進み続ける
- 地面や線の上を走り、コインやスターを集める。
- 様々なスキンがあり、着せ替えが出来る。
アイテム
- ゲームシーン上に適当に配置される。
- キャラクターに成長をもたらす。
コイン
- ゲームシーン上に適当に配置される。
- 集めることでユーザースキンやUIと交換できる。
ライン
- プレイヤーを誘導するための線。
- 当たり判定を付ける。
- 書かれたラインは指定秒後に書いた始点から消えていくようにする。
イケた 思ってたよりいい動きした
横画面より縦画面の方がハイカジュっぽく見えるのは気のせいだろうか
アイテムの配置諸々は横画面のを無理矢理縦にしたから、これでやるなら追々調整が必要。
こんな感じ
- 個人的には面白くなりそうだと思った
- ただ、ゲームとするにはまだ課題が多いかも
- アイテムが一色単なので、もう少し増やすとか
- Voodooの「Color Road!」 みたいなゲームをイメージすれば面白くなりそう
- このゲームを面白くする要として、”線を引く”という要素をどう出すか という大きな課題が見えた。(横画面の時から意識していたが、改めて実感した)
時々考えてた最近のハイカジュに多い形態を検証する
動機として、線を引くことに重要度を持たせるにはやはり数なのでは...と思った。
- 引く線を歪めた時のランナーの波打つ動きや、ランナーの数が増えた時の視覚的効果は面白さに繋がるかも
- 敢えて取りにくい位置にアイテムを置いて、数を増やすことのメリットに繋げる
課題
- 最初のランナーの数をどうするか
- ランナー同士の当たり判定もつけるか否か
- 道中に設置するランナー増減等のアイテムの仕様をどうするか
- ここに手を出すと、場合によっては一部アイテムを作り直す必要があるかも???
- コインは続投でいいかも(+αで頑張りたい人向けの何か)
- 線の描画に制限付けるか否か迷う
- 完全主観的発想だけど、無限に線を引けた方が楽しかったからそうしたい
- 無制限だと、フィールドが無法地帯と化しかねないから、いろんな人のフィードバックが必要かも
- 線を引くと何が面白くなるのか?
- アイテムを取るたびにプレイヤーが増える → ワタワタ感
- 障害物をよける線引き → やってはいけないことを避ける
- ゴールを目指す目標におけるリスクリターン
- ハイカジュにおける制限はあまりよろしくない...?
- 死の要素は極力なくしたい → 失敗を与えない
- あくまで必ずクリアできる → ハイスコアを狙いたい人は狙える
- アイテムだけがスコアではない
- 最終的なゲームのゴールを考える
- 無段階性のゴール → マリオのゴール旗みたいなもの?
- ギリギリの戦い感を出す
- ボスを置く → 視覚効果
- スピード感
- 線の上を走ることでスピードアップ → 線を引く意味
- 失敗に対するリスク → 障害物
- 完璧主義者のための+α
- クリアとは別の何か(ハイスコアとかレアアイテムとか)
- 現状のデザインを残すならポイント形式をとる
- 昨今のハイカジュによくある形式
- マップの生成問題
- 大量のマップを扱うならば、アイテムの生成方法を考える必要がある。
- 適当な数のアイテムの配置パターンを作成して、複数のスポーン地点にランダムに出す。
- ステージごとの難易度をどうするか問題 → とりあえず1(低難易度)と100(高難易度)を作る
- これらの問題を全て押さえたマップ管理(スポナー)を作る
- ゲームの広がりを考える
- 線を引くギミック(意味合い)の広がり
- 飽きられないギミック(あそびの幅)を作る
- スリルを出すには制限がなさすぎる問題
- スピードを出す、線の描画量に制限を付けるetc.