Overriding-メイキング

Arduino Leonardoでコントローラー自作

投稿日:
“完全オリジナルキーボード” の備忘録

自作キーボードに興味がある素振りをしていたらいつの間にか作っていました. 部長は御輿を担がせるのが上手い.

チャタリング対策

  • チャタリング中“待つ”処理を実装した.
  • millis()で同時押しに対応させた.
  • 参考資料を読めばわかる.

  • 参考資料

  • チャタリング対策概論
  • millis()をdelay()っぽく使う方法
  • 最初に参考にした情報

  • "最初に参考にした情報"と異なり, 今回実装した"変化を検知するまで細かい入力監視をしない方法"には弱点があります. 入力の判定を間違えた場合, 次の変化が起こるまで入力の間違いが訂正されません. "フェイント"と呼んだこの問題は誤り訂正用のフラグを用意して解決しました.

    ファームウェア

  • 変化を検知してからネストに入るプログラムを書いた.
  • 入出力レジスタを統一した. 1 byteの参照で済む.
  • 2つのバッファを循環させた. 管理が大変なのでやめた. 参考:循環レジスタ

  • 入力監視について, ネストを回し続ける方法のシンプルな良さが知られています(例:Arduino Leonardで作るピンボールコントローラー). 割り込み処理をせずに入力監視処理を省略し, 他の複雑な処理をさせられるようにやっていこうとしました. 割り込み処理をさせた場合, millis()の戻り値が増加せずチャタリング時間を正確に測れず不適当なのでほかの方法をやっていく必要があります.

    2つのバッファの排他的論理和を用いて変化を検知させました. 人間はマイクロ秒オーダーの時間を認知できませんし, 特に厳密で重い処理でなければシンプルな方法の方がいいかと思いますし, あえて難しくする必要はないのかもしれません. ここでいう重い処理とはマイクロスイッチの最短ON時間より長い処理のことを指します. そんな重い処理にArduino使わないやんけ, などの意見は甘んじて受け入れようと思います. 役に立つ特殊な状況を想像できないので敗北です. 厳密なことをするなら電気的にチャタリングを処理してガンガン割り込みを使えばいいと思います. どんな工夫をしようと入力監視の処理を回し続ける必要があるので意味ないです. マイコンを複数使ったりして頑張ってください.

    これはうわさですが, 人間は±80ミリ秒以上の操作感のズレから違和感を感じ始め, 少しズレてる方が心地よく感じるらしいです. しかし音ゲーは正確さが命, 速さが善, 速を上げるのは楽しいという気持ちでやっていきましょう.

    電装

  • 電球明滅を正論理, ボタン入力を負論理にした. Arduinoから明滅を制御できない.
  • 電球を光らせるための直流電源装置がなくてもコントローラーとして機能する.
  • 青い塗料を電球に塗った.
  • スズメッキ線とシリコンチューブで作ったテスト回路はメンテナンスが大変でした. 面倒ですが被覆剥きはちゃんとした方がいいです.

    本番回路ではんだと複線を使ったら電極の濡れ性が悪くて大変でした. 圧着端子を使うのが正解だったようです.

    電球の塗装が難しかったです. 塗装のムラが偶然オープニングのテーマっぽくなり好評でした. 部長が光らせる用の直流電源装置を怖がっていておもしろかったです. 電球の定格電圧はサイドが12 V, 正面が14 Vでしたが15Vかけても大丈夫でした. 完全に雰囲気でやってます.

    入出力レジスタを直接いじるとオンボードのLEDを制御できたりします. 今回レジスタをPBに統一しました.

    材料

  • 木材(焼桐と適当な角材)と釘:レトロっぽい焼桐を選びました.
  • 5 mmアクリル板:奇しくも横幅が『SOUND VOLTEX』の天板の幅と同じだったので楽でした.
  • 結束バンド:針金より使いやすかったので途中から使うようになりました.
  • マイクロスイッチ:オムロン製. 指圧25 gと50 gのものを買いました. 50 gの方が評判がよかったです.
  • 三和ボタンとサイドボタン:部長がこだわってました.
  • すべり止め:ホームセンターにあった. 焼桐が接着剤を弾くので大変でした.
  • Arduino Leonardo:たまたまあったので使いました.
  • 構造

  • アーケードゲーム『SOUND VOLTEX』に準じる配置をとる.
  • 天板を箱で支えた.
  • 天板は結束バンドで箱に固定した.
  • 強度について, アクリルは天板として実用上問題なかった.
  • 側面にボタンがある.
  • サイドボタンの干渉はペンチで電極を曲げて解決した.
  • 正面内側のボタンはボルトとの間にワッシャーがある.
  • ワッシャーは補強材に支えられており, 天板中央にかかる力を逃す.
  • サイドボタンと正面の左右外側のボタンは結束バンドの張力で固定した.
  • ボルトと結束バンドがそれぞれ天板と補強材にワッシャーを固定し, コントローラーを成す.

  • 海底電信黎明期の箱をイメージして作ったら茶箱になりました. サイドボタンをねじれの位置に収めるのが大変でした. 構想段階で意見出来ればよかったと思います. 企画者はエンジニアと一緒に要件定義しましょう. 目測と細かい調整を繰り返したので諸元は省きます.

    ※サイドボタンの位置は不正確です. ワッシャー, サイドボタンのマイクロスイッチ, 角材はこのモデルに含まれません. トリマ(そういう工具がある)で溝を掘った場合のモデルです. 実際溝を掘りませんでした.

    ボロい問題

    位置調整するなどの試行錯誤が発生し, 加工しやすい焼桐で箱を急造したらゴミっぽくなりました. 焼桐は傷が目立つので注意しましょう. 補強材の色を焼桐に統一しなかったのもパッとしない原因だと思います. 天板のみの状態は格好良いので記事の最初に貼りました. サイドボタンいらないのでは?

    運悪く大学共用の卓上糸鋸が壊れていて使えず, ふさわしくない工具(順に卓上ボール盤, はんだ, 鑿)で加工し, 天板を作りました. 鑿(のみ)で加工したアクリル独特のテクスチャは結構良くて可能性を感じました. 面取に使えるかもしれません. それはそうとレーザーカッターを使うのが最高だと思います.

    提案

    静電容量センサをサイドボタンに用いる計画があったのですが, チップ抵抗しか手元になくてアになりながらリード線を生やしてたら学祭公開に間に合いませんでした.

    【Arduino】抵抗1本で作る静電容量式のタッチセンサ

    チュウニズム風のコントローラーが作れそうですね

    テクスチャ, 豆腐っぽい見た目をトリマ(そういう工具がある)でなんとかする案もあったのですが, 当時のotori334はアクリルを鑿(のみ)でうがつのに疲れてて, 新しい工具を揃えるバイタリティは残っていませんでした. トリマがあったら箱に天板を嵌め込む構造になって実際より完成度が高くなっていたかもしれません.

    各自やっていってください.

    Overriding-メイキング

    Overridingメイキング第4回: Unityで音楽ゲームのUIデザイン

    投稿日:

    こんにちは、Boltzです。

    長大祭はいよいよ明日ですね!

    今回ばかりは前日に書いたものを予約投稿をしています……。
    多分明日の今頃は、現地で準備をやっていると思うので。

    ということで、本編に入ります!

    今回はPC向け音楽ゲームであるOverriding制作過程を連載する企画の第4回目!

     

    UIデザインについて書いていきたいと思います!

     

    この記事をご覧になっている方で、UIデザイン、
    またはUI(ユーザインタフェース)といった言葉を聞いたことがある方はいますか?

     

    最初に自分が認識しているUIデザイン、
    UIという言葉についてざっくりと解説していきたいと思います。

    流れでUIデザインまでやることになってしまったような人の説明なので、
    違っている部分も多いとは思いますが……。

     

    UIとは何か検索してみると、だいたい「ユーザとデバイスの接点のこと」というような
    結果が表示されるのではないでしょうか。
    これでは抽象的なので、ゲームに置き換えて表現してみます。

    すると「ゲームプレイヤーとゲームの接点のこと」となります。

     

    この接点には何があるのか?
    代表的なものとして、操作説明のパネルや画面の解説文、
    画面の構成といったものが挙げられるのではないでしょうか。

     

    前回の記事で、音楽ゲームOverridingに必要なものはオープニング画面と
    モードセレクト画面、曲選択画面、リザルト画面という状況になりました。

     

    これらを作っていくのが今回のUIデザインだと言えそうです
    (画面間のデータの受け渡しを含むプログラム的な話は、
    UIデザインと離れた内容になってしまうためパスしておきます)

     

    まず、UIデザインに優れたゲームと言われて、
    私が真っ先に思いつくのが「3Dゼルダシリーズ」です。

     

    具体的に言えば、時のオカリナ64や風のタクト、トワイライトプリンセスなどの作品を指しています(ワイルドな最新作は趣が異なるので、今回の記事では話題に上げません)

     

    どこが優れているかというと、画面右上にコントローラのボタンのマークが表示されており、
    それに被さるようにして「押したら何ができるか」ということが書いてある点です。

     

    こうすればアクションゲームに慣れていない初心者でも、
    何を押したらどのような動作ができるか(ゲームの画面上で)一目で確認することができ、
    非常に親切です。

     

    私が初めてプレイしたアクションゲームは「ゼルダの伝説 風のタクト」で、
    当時は小学生でした。

    それまでRPGしかプレイしたことのない子供だったので、
    リアルタイムなゲームについていけるか不安だったのですが、
    このUIにかなり助けられた覚えがあります。

     

    なぜ優れたUIの話や思い出話が唐突に出てきたかというと、
    今作OverridingのUIは3DゼルダのようなUIを目指して作られているからです。

     

    前回の記事(リンク)で初めてメジャーなリズムゲームを遊んだ話を書きました。

    初めてゲームを遊んだとき、現在ゲームセンターで稼働しているゲームは
    わりと玄人向けの設定も多く、難易度を変える設定すら
    (画面をよく読まない私が悪い部分も多くあるのですが……)
    確認しにくいといった印象を受けました。

     

    あれもあれで機能的でかっこよくていいのですが、

    今回は「音楽ゲーム初心者が初めてプレイしてもわかりやすいUI」を目指し、
    必要な機能のみを目立たせて伝えることを重視して製作しました。

    結果、このような画面になりました。

     

    この画面を作った時に私はわかりやすい画面を作ることができたと思っていました。

    しかし、テストプレイをしてくれるという人に遊んでもらうと、そもそもサイドボタンの存在がわからないと言われました。

     

    そのため、「音楽ゲーム初心者が見てもわかりやすく、サイドボタンの存在も十分確認できるUI」に方針を変更して、以下の変更を加えました。

    サイドボタンの色が灰色になっています。

     

    これは、先程話に出てきたテストプレイをしてくれた人の意見を参考にして、
    灰色のボタンがガイドにあるという違和感をもとに、
    サイドボタンを探してもらうガイドにしました。

     

    また、ボタンを押すと、そのボタンに対応するガイドが点滅するようにしました。
    こうすることで上側の1番右のボタンをガイドでいう端のボタンだと
    勘違いさせないように修正しました。

     

    このように、いいデザインができたと自分で思っていたとしても、
    試しに遊んでもらわなければ実はわかりにくいデザインだったことに
    気づかないという結果になってしまいます。

     

    自分以外の人が触る部分をデザインするため、
    人に触ってもらいつつ意見を取り入れることがとても大切になってくる分野であることが
    再確認できました。

     

    こうしてUIデザインもひと段落つき、
    だいたい遊べるようになってきました。

    これでゲームも完成間近です!……ソフトウェア面では。

     

    UIデザインが終了したのがだいたい10月の上旬でした。
    ここからなかなか進んでいなかったハードウェア製作を一気に進めることとなります。

     

    2019/11/8 追記 / リズムゲーム制作本を作成します。

    この度、当サークルはC97という同人誌即売会にて
    「Unityで作るリズムゲーム」という本を頒布します!!

    この本は、Unityでリズムゲームを制作する際のプログラミングや譜面制作、UIデザインについて読めばまるっとわかる本を目指して作っています!

    内容は、基本的なリズムゲームの作り方に加え

    ・どうやってノーツの生成(レベルデザイン)を簡単にするか?
    ・BMSも読み方と作り方
    ・ソフラン(テンポ変化のある曲)にどうやって対応するか?
    ・実装はどうするのか
    ・UIデザインの考え方
    ・譜面制作のパターン
    ・付録「サンプルゲーム」と「Unityのプロジェクト」

    ぜひ会場(火曜日南地区 “ユ “ 26a)でお買い求めください!

    ※今後の情報発信はこちらのTwitterアカウントをご覧ください

    2020/1/1 追記 / 頒布を始めました!

    この記事で紹介している本をboothで頒布開始しました!よろしくお願いします!

    ダウンロード版
    https://ecml.booth.pm/items/1739359

    書籍版
    https://ecml.booth.pm/items/1739286

    (追記ここまで)

    Overriding-メイキング

    Overridingメイキング第3回: Unityで音楽ゲームのレベルデザイン

    投稿日:

    こんにちは、Boltzです。

    今回は、長大祭に出展する音楽ゲーム「Overriding」メイキング第3回ということで、レベルデザイン(譜面制作)の話をしていきます。

    現在、ゲーム制作の方は少しのバグ取りを残す感じです。

    システムの紹介などもこのブログやTwitterで行っていくので、
    どうぞお楽しみに!

    それでは本編です。

     


     

    ゲームセンターではよく見るゲームでありながら、
    いつ見ても威圧感を感じる筐体……。

    7つのボタンを押す動作と1つの皿を回す動作(スクラッチ)を音楽に合わせて行うDJシミュレーションゲーム。

    それは、BeatmaniaIIDXです。

     

    大学も夏休みに入ろうとしていたとき、
    私は初めてこのゲームで遊びました。

    遊び始めたのはdjの達人になるためではなく、
    Overridingの制作において大きな行き詰まりがあったからです。

    それは「ノーツが流れてくるためのプログラムはできたものの、
    譜面をどう書いていいのかわからない」というものでした。

     

    市場でメジャーなゲームを知らなかったために、
    どのような難易度調整をしていいか分からなかったのです。

     

    そして、以前から私はある先入観を持っていました。

     

    音楽ゲームを制作するなら、
    ゲームセンターの王様といわんばかりの筐体の威圧感と、
    圧倒的ボタン数を誇る(キーボードマニア?知らない子ですね……)
    BeatmaniaIIDXはいつか遊ばなければならない、
    というものです。

     

    ということで、あの筐体に突撃しました。

     

    初挑戦の結果はお察しです……。
    7つの鍵盤と1つの皿が捌けるはずもなく、終始アワアワしてました。

    ただ、ゲームそのものが面白かったという理由もあって、
    上達のため、夏休みは週2のペースでゲームセンターに
    通うようになりました。

    少しプレイを続けて気づいたことは、
    ビートマニアにはセオリーがあるということです。

    例えば右手人差し指はこの鍵盤に乗せて、
    親指はこの鍵盤で……スクラッチは小指でやればいい、
    というように運指の方法がおおかた確立されています。

    このセオリーに乗っかったプレイを続けていけば、
    若干上達がみられました。

     

    プレイを始めたのが9月半ばで、2ヶ月くらい経ったでしょうか。
    最初はレベル1の譜面ですらクリアが難しかったのが、
    レベル5を遊べるくらいにはなりました。

     

    こうして市場で人気のゲームを継続して遊んできたことで
    学ぶことがありました。

     

    ひとつは、譜面の作り方です。

    譜面をつくる上で、よく使われている音符の並べ方があります。

    音楽に合わせてキーを左から右に順番に押させる
    「階段押し」というものや、

    2つのキーを交互に押させる
    「トリル」といったものです。

    また、特定のキーで打楽器パートを叩かせながら
    残りのキーでメロディをなぞらせるといった譜面もありました。

    また、UI(プレイヤーに見せる画面のこと)や
    UX(プレイヤーにどのような体験をさせるか)に関しても
    多くの発見がありました。

    今回遊んだBeatmania IIDXに関して言うと、
    オープニング画面でコインを投入した時に
    大きな効果音が鳴ってゲームが開始することや、

    インタラクティブミュージックの手法を使い、
    プレイヤー認証~モード選択~曲選択と、
    演奏画面に近づくにつれてBGMの楽器パートが
    追加されていくことなどです。

     

    といった感じで、市場でプレイされているメジャーなゲームはゲーム制作時に一度やっておくと、
    とても得な思いをすると思います!

     

    こうして、ゲームセンターで稼働しているゲームから学んだことを念頭に置いて、
    譜面制作を進めることになりました。

     

    少しでも「本物(?)の譜面を知っている!」という自信をつけておくと、
    レベルデザインはかなり早いスピードで進みました!

     

    夏休みの時間を使って譜面制作を進めることができ、
    進捗はかなり進みました。
    (同じ学部の友人でリズムゲームのプロが見つかり、
    譜面制作を一部担当してもらったりもしました)

     

    さて、今回で譜面制作の大半が終わり、演奏画面については完成しつつあります。……演奏画面については、です。

     

    一般的なリズムゲームにはあと何画面存在するでしょうか。
    オープニング, モードセレクト, 曲選択, リザルト……とたくさんありますね。

    次回はこれらの画面をどうやって実装していったか、ということについて書いていこうと思います。

    今回も少し言葉が出てきましたが「UIデザイン編」です。お楽しみに!!

     

    今回メイキング記事で紹介しているゲーム「Overriding」は
    長大祭ゲームセンターで遊ぶことができます!!

    興味がある方はぜひ遊びに来てください!

     

    2019/11/8 追記 / リズムゲーム制作本を作成します。

    この度、当サークルはC97という同人誌即売会にて
    「Unityで作るリズムゲーム」という本を頒布します!!

    この本は、Unityでリズムゲームを制作する際のプログラミングや譜面制作、UIデザインについて読めばまるっとわかる本を目指して作っています!

    内容は、基本的なリズムゲームの作り方に加え

    ・どうやってノーツの生成(レベルデザイン)を簡単にするか?
    ・BMSも読み方と作り方
    ・ソフラン(テンポ変化のある曲)にどうやって対応するか?
    ・実装はどうするのか
    ・UIデザインの考え方
    ・譜面制作のパターン
    ・付録「サンプルゲーム」と「Unityのプロジェクト」

    ぜひ会場(火曜日南地区 “ユ “ 26a)でお買い求めください!

    ※今後の情報発信はこちらのTwitterアカウントをご覧ください

    2020/1/1 追記 / 頒布を始めました!

    この記事で紹介している本をboothで頒布開始しました!よろしくお願いします!

    ダウンロード版
    https://ecml.booth.pm/items/1739359

    書籍版
    https://ecml.booth.pm/items/1739286

    (追記ここまで)

     

    Overriding-メイキング

    Overridingメイキング第2回: Unity製音楽ゲームのプログラミング

    投稿日:

    こんにちは、Boltzです。

    今回は音楽ゲーム「Overriding」制作過程を連載する企画の第2回目!

    いよいよ音楽ゲームを成り立たせる、
    演奏画面のプログラミングの話に入ります。

    Overridingとは、Unityで制作したPC用音楽ゲームです。

    6レーンそれぞれに1つのボタンが対応しており、
    音楽に合わせてタイミングよくボタンを押すことによってスコアを獲得します。

     

    Youtubeの動画に助けられた話

    前回の記事で、音楽ゲームを制作するという企画を通したはいいものの、
    Unity/C#の体験がほとんどない私は、
    どうプログラミングしたものかと悩んでいました。

    当時の私は、音楽ゲームといえどもスマートフォン向けのゲームや
    太鼓デバイスを使って達人になるゲームくらいしか知りませんでした。

     

    また、プログラミング経験も多くはなかったため、
    「6レーンに沿って音符が流れてきて、叩いたら得点が上がる」
    というゲームをどう実現させることができるのかわかりませんでした。

     

    企画が通ったばかりの5月頃は、「Unity 音ゲー制作」などと
    Google先生に問い合わせ続けていたような気がします。

    ヒットするWebページはよくわからないQ&Aや概念的なものばかりで、
    実践的な方法を教えてくれ!と言いながらモニターをたたき割っていました。

     

    そんな中、何を思ったかYoutubeに対して「unity 音ゲー」で
    サーチを掛けました。

    そこで、まさかのYoutubeにてUnityでの音楽ゲームの作り方動画を
    見つけたのです!!

     

    アニミングさんの「Unityで音ゲーを作ってみた」です。

     

    この動画では、Unityのあたり判定などをうまく利用した
    リズムゲームの制作方法が細かく説明されています。

    初期のころは動画を数十回視聴して、設計方法の理解に努めていました。

    音楽ゲームを成立させるロジックを理解する意味で、動画が完璧すぎます。
    Unityで音楽ゲームを作りたい方はとりあえずPart.11くらいまで
    見るといいと思います。

     

    この動画で重要なのは、
    Unityでノーツが生成される始点と判定ライン、終点を決めること

    そして、ノーツを始点から判定点、判定点から終点まで同じ秒数で移動させることによってノーツが流れている感じを出すことです。

     

    動画をみて、音楽ゲームをプログラムするにあたっての基本的な考え方がわかりました。

     

    そして、動画で得た設計方法を元に一度組んでみました。

    そこで気づいたのですが、
    この動画の方法をそのままPC向け音楽ゲームにするには
    少し問題がありました。
    (スマートフォン向け音楽ゲーム制作の動画なので、それもそうなのですが……)

     


     

    1. ロングノーツの実装方法を新たに思いつく必要がある(Part.11までの動画で制作しているゲームにはロングノーツの概念がない)

     

    2. 音楽にノーツの到着が遅れる(2つ原因があります)

     

    3. 譜面作りをもっと楽にしたい

     

    4.ノーツの流れる早さ(BeatmaniaIIDXでいうFHS)をいじると判定が理不尽になるので、判定を動的に変えたい

     


     

    これらに関しては、ひとつひとつ解決を試みていきました。

    日々の生活を送っていればふと解決策が思いつくこともあれば、プログラマーの方に直接質問して教えていただいたこともあります。

     

    以下にそれぞれの問題に対してどう解決を試みたかを書いておきます。

     

    1. ロングノーツの実装方法を新たに思いつく必要がある。

    とりあえず考えた解決策が以下の通りです。

    ノーツが流れるスピードをnotesSpeedとします。

    ロングノーツの押し終わりの時間から、
    ロングノーツの押し始めの時間を引くと、
    ロングノーツのためにボタンを押下している時間になります。

    これをlongNotesTimeとします。

    notesSpeedとlongNotesTimeを掛けるとロングノーツの長さになります。

    これをUnityのScaleに換算してUnity空間の「ノーツ生成地点」に召喚してやればいいという考えに至りました。

    中学校に「道のり速さ時間」の考え方をロングノーツ生成に利用した考え方です。

     

    座標はデフォルトでロングノーツの中央を指しているので
    (positionはオブジェクトの中心を指しているというUnityの仕様に基づきます)
    正常に判定が行われません。

    判定するときには、ロングノーツの長さを2で割った値を
    判定ライン方向に足して伸ばしてやりましょう。

     

    2. 音楽にノーツの到着が遅れる

    1つめの原因はCSVデータを配列に格納した上で、「ノーツが流れるべき時間にノーツを生成していること」です。

    事前にノーツをすべて生成しておいて、
    決まった時間に流れ出すようにプログラムしておくと
    動作が速いかもしれません。

    聞くところによるとInstantiateは重い処理らしいので、
    演奏中に使いたくないですね。

    最初のロード時間あたりで、使用するノーツを
    すべて生成すればいいんじゃないでしょうか。

     

    2つめの原因はノーツの移動に線形補間: lerp関数を使っていることです。

    生成地点から判定ラインまで何秒で動くと指定すること自体はいいのですが
    (今後ギミック譜面などをつくるのであればよくないですが)
    線形補間は到着時間に厳密性を求められる音楽ゲームで
    使用すべきではありません。

    そのため、今回は「生成地点から判定ラインまでx秒で流れるとして、いまノーツはどの地点にいるべきか」という情報を、音楽の再生時間に基づいて計算しました。

    これを全ノーツ分やったらかなり重いゲームになったので(14fpsくらい?)
    直近x秒分だけ演算させておくとよいのではないかと思います。
    これでそこそこのグラフィックボードを積んでいるPCでは60fpsで動作しました。

     

    3. 譜面作りをもっと楽にしたい

    音楽に合わせてボタンを叩き、CSVデータにするのもいい方法ではあります。

    この方法をより厳密にするプログラムもネットのどこかで
    公開されていた気がします。
    (BPMを利用して、8分音符の感覚にスナップするやつ)

    しかし、これでは人間の指が追いつかない譜面
    ノーツが逆流してくるマイナス・テンポの譜面は作れません。

    (……Overridingにはそのような譜面は実装しておりませんので、安心してプレイしてください!)

    BMSエディタなど、譜面制作専用ツールで作った譜面を読む機能
    搭載すると幸せになれる気がします。

     

    4. ノーツの流れる早さをいじると判定が理不尽になるので、判定を動的に変えたい

    Perfect判定ゾーンやGood判定ゾーンが固定されているため、
    ノーツの流れが速くなればなるほど判定が理不尽に(狭く)なってしまいます。

    これを解消するために、距離をベースとした判定システムを考えました。

    あらかじめ、1フレームに進むノーツの距離を算出しておきます。これをyとします。
    yに任意の数字を掛けると、それが判定の誤差として許容されるフレームの数です。
    例えば、y*2 = perfect; y*11 = good;とします。

    ボタンが押されたとき、判定ラインと最も近い距離にある
    ノーツの距離を算出
    します。
    これがperfectに収まっていれば判定をperfectとして処理し、
    goodに収まっていればgoodとして処理します。

     

    こうしてあらかたの演奏画面の設計とプログラミングが終わりました。

    ただし、この方法にも問題があります。

    BPM(音楽の時間に習った四分音符イコールいくらみたいなの)に応じて
    ノーツが流れてくる速さが変わるわけではありません。

    BPM80を基準としてノーツが流れてくる速さを調整したら、
    BPM300とかになったとたんノーツが詰まって流れてきたりします。
    (判定には問題ないはずですが、視認性がとても悪いです)

    要するに、まだまだ改善点はあります。

    一応、今回出展する範囲ではBPMが変動する楽曲はないので、
    そのようなことは起こらないとは思いますが……。

    次回作を作るとなれば真っ先に改善したいのはそこですね。

     

    2019/11/8 追記 / リズムゲーム制作本を作成します。

    この度、当サークルはC97という同人誌即売会にて
    「Unityで作るリズムゲーム」という本を頒布します!!

    この本は、Unityでリズムゲームを制作する際のプログラミングや譜面制作、UIデザインについて読めばまるっとわかる本を目指して作っています!

    この記事の課題点にもあった点に関する補足や、さらなる解説も加えます(現在100ページを超えました)

    内容は、基本的なリズムゲームの作り方に加え

    ・どうやってノーツの生成(レベルデザイン)を簡単にするか?
    ・BMSも読み方と作り方
    ・ソフラン(テンポ変化のある曲)にどうやって対応するか?
    ・実装はどうするのか
    ・UIデザインの考え方
    ・譜面制作のパターン
    ・付録「サンプルゲーム」と「Unityのプロジェクト」

    現在、100ページを超えてきたので、とてもお買い得だと思います。

    ぜひ会場(火曜日南地区 “ユ “ 26a)でお買い求めください!

    ※今後の情報発信はこちらのTwitterアカウントをご覧ください

    2020/1/1 追記 / 頒布を始めました!

    この記事で紹介している本をboothで頒布開始しました!よろしくお願いします!

    ダウンロード版
    https://ecml.booth.pm/items/1739359

    書籍版
    https://ecml.booth.pm/items/1739286

    (追記ここまで)

     

    さて、企画通りに、ゲームの核となる部分のプログラミングは終わりました。
    この時点で、7月が終わろうとしていました。

     

    さて、企画とプログラミングが終わればゲームはもう遊べるのでしょうか?
    まだですね。ノーツは流れてくるものの譜面ができあがっていません。

     

    ということで、次回は音楽ゲーム制作におけるレベルデザイン「譜面制作」や、
    市販・市場のゲームをプレイして、ゲーム開発にフィードバックしていく体験について書いていきたいと思います。

    私が初めてゲームセンターの音楽ゲームに触れたりする話です。

     

    ここまで読んでいただきありがとうございました!
    次回もどうぞよろしくお付き合いください!!

     

    今回メイキング記事で紹介しているゲーム「Overriding」は
    長大祭ゲームセンターで遊ぶことができます!!

    Overriding-メイキング

    Overridingメイキング第1回: 企画がはじまるまで

    投稿日:

    こんにちは、Boltzです。今回はPC音ゲーであるOverriding制作過程を連載する企画の第1回目ということで、企画を始めた時の様子を書いていきたいと思います。

     

    Overridingとは、Unityで制作したPC用音ゲーです。6レーンそれぞれに1つのボタンが対応しており、音楽に合わせてタイミングよくボタンを押すことによってスコアを獲得します。

     

    今回はこのOverridingが制作されるきっかけとなった流れを順を追って説明していけたらと思います。

    このゲームには、去年のサークル活動とつながる部分もあるので、話は去年のサークル設立時に遡ります。

    このサークル「経済マルチメディア研究会」は、去年7月に私とけい、ナゾノクサの3人で立ち上げたサークルです。
    去年は「PCを用いた創作活動による問題解決」をテーマに、デザインの学習やプレゼン手法の研究、観光学、郷土研究などをしていました。

    ただ、新入生を迎えるにあたって、サークルとしてひとつの芯を持った活動をできているか?(諸活動からサークル像が見えてくるか)という疑問がありました。3人で相談した結果、サークルの活動内容から変えてみようということになりました。

     

    話は変わりますが、私は高校の頃からQpic(九大で物理を研究しているサークル)やKMC(京大でマイコンを研究しているサークル)、traP(東工大でデジタル創作をしているサークル)などの団体に憧れがありました。
    外から見て、メンバー各々の得意分野(企画、レベルデザイン、グラフィック、音楽など)を組み合わせてひとつのゲームをつくるという体験が楽しそうに思えたからです。

    高校の頃、大学に入ったら是非そのような創作系団体に所属したい!と思っていました。

    長崎大学に入学して、そんな創作のできる団体があるのか調べてみたところ、残念ながら私のサーチには引っかかりませんでした。
    そのため、前々から長崎大学にゲーム制作のサークルを自分でつくりたい!または誰か作ってくれ!と考えていました。
    ようするに、今回の転機はちょうどいい部分があったのです。

     

    ゲーム制作の活動を軸に置くとなると、これまでのサークルの活動とは整合性がとれるかという疑問もありました。
    仮に活動内容をゲーム制作に変更しても各々の得意分野を生かして、PCで「マルチメディアコンテンツ」を制作し、発表するというサークルの活動とも矛盾するものにはならないと考えられます。
    そのため、活動内容を思い切ってゲーム制作に変更しました。

    大学主催のサークル勧誘の機会や、仮入会イベントなどを行った後に6人くらい新入部員が来てくれました。

    ゲーム制作サークルとなった「経済マルチメディア研究会」はメンバーを増強しつつ制作力を鍛えていかなければなりません。
    そのために、内製のゲームを制作して対外的に発表する必要があります。

    対外的に発表する場として長大祭を選べば、それまでに内製の開発もいくらかできるのではないかと考えられました。

    斯くして4月に団体ツイッターアカウントで「長大祭にゲームセンターを出展する」と宣言。新入部員の有志にはプログラミングについて学んでもらいながら、発表するゲームの企画を立ててもらうことになりました。一通り講座が終わった後は、各々の考えたゲームの企画プレゼン会をすることにしました。

     

    一方で、後輩にばかりプランを作らせるわけにはいかず、自分も何かゲームの案を持ってこなければと思っていました。

    今年度の長大祭で発表するゲームは、当サークルにとっても初めての作品となるので、サークルのあり方や活動に関わるものなどを、何らかの形でゲームに入れられないかと思いました。

    そのため、4月時点では情報やコンピュータ、プログラミングを連想させるゲームをつくりたいと考えていました。

    当時のメモです。迷走していた感じがあります。

    やがてパリティチェックとかメモリ領域の確保を題材にしたシューティングゲームを作ろうと思いつきました。

    しかしあまりにもコアな内容になる感じがして、それは誰にヒットするんだ、などとセルフ突っ込みをやっていました。

     

    なかなかこれと言った案が出ずに悶々とした日々を送っていました。そして、あるとき(その当時新しい音楽ゲームだったCytus2を遊んでいる時だったかな)音楽ゲームをつくろ〜と閃きました

    閃くと同時に、音ゲーをこのタイミングにつくることで得られるメリットがいくつか浮かんできました。

    まず、長崎大学の他のサークルの方々とつながりが持てること。4月の新入生勧誘の時点で、サークルに作曲家はいませんでした。ゲーム制作サークルを続けるにあたって、フリー音源に頼り続けるのもどうかと思っていました。音楽ゲームを作れば、楽曲の募集などで学内の作曲家と繋がれると考えられます。

    また、長大祭に展示するアーケードゲームとして、ある手法をとれば来場者に音楽ゲームの楽しさを伝えられるのではないかと思ったからでもあります。

    当時ハマっていたゲームはスマートフォンアプリのCytus2でした。高校生の頃からRayarkのゲームはプレイしており、一見新しいタイプの音楽ゲームに見えるけれども、一般的な音ゲーの核となる部分を持っており、音ゲー(というジャンル)の楽しさを十分感じられるゲームデザインにとても惹かれていました。

    この設計思想(新しさを感じさせつつ、音楽を聴かせてノーツを叩かせるゲームデザイン)をアーケードゲームに生かすことで、プレイヤーによりダイレクトにアーケード音楽ゲームの楽しさを伝えられるのではないかと思いました。

    最初に書いたとおり、Overridingは6レーンの音ゲーです。
    中央4レーンに対応する4ボタンは一般の音ゲーと同じく上を向いています(SoundVoltexなどを想像していただけるとわかりやすいと思います)
    新しい部分としては、両サイド2レーンは操作デバイスの側面についているところです。

     

    Cytusシリーズは譜面配置から、曲のどのパートを叩かせているのかプレイヤーに考えさせるゲームデザインをしていました。

    Deemoはピアノパートを聴かせて、基本的にピアノパートをプレイヤーに演奏させるゲームデザインでした。

    Overridingでは側面ボタンはリズムパート、4ボタンはメロディパートを基本的に当てています。プレイヤーにそれぞれのパート(メロディ、リズム)を聞き分けてもらいながら、それぞれ異なるボタンで演奏してもらえば、「音楽を聴いてプレイする」という音ゲー上達の一歩を踏み出してもらうことにもつながるのではないかと考えています。

     

    ……というような主旨でプレゼン資料を作り、5月の企画プレゼンで企画を通しました。

    そのあとの専らの課題は作曲家探しでした。同じサークル棟を使用している音楽サークルにプレゼン資料を持ってお邪魔させていただいたり、部員の友達をあたったりして作曲を依頼する中で、長大生の作曲家さんにプレイ可能な楽曲を4曲前後制作していただける見通しが立ち、制作が本格的に始まりました。

     

    いま思い返してみると、かなり見切り発車で無茶な計画だったと思います。今年度のはじめから付き合ってくれた作曲家の方、グラフィック担当の方、本当にありがとうございます!!この連載中にもう何回かお礼をいうことになるだろうけど……。

     

    さて、企画が通って実現の見通しが立ったところで、第1回企画編はおしまいです。実現の見通しが立ってよかったですね!!!

     

    ……アーティストの方をみつけてくるだけで実現の見通しが立つのでしょうか?立ちませんね。これから、Unityで音楽ゲームを成立させるためにプログラミングをしていかなければなりません。第2回はプログラム編の予定です!

    第2回では、どのサイトを参考にして、どうアルゴリズムを組んでいったか書いていこうと思います。

     

    この記事で紹介している音楽ゲーム「Overriding」は、
    11/23, 24に行われる長崎大学の学祭で遊べます。

    教育学部棟2階23番講義室にて展示しています!
    ぜひ遊びに来てください!!

    Overriding-メイキング

    音楽ゲーム制作をやっています その2: 連載を始めます

    投稿日:

    こんにちは、Boltz です。

    今年入ってくれた新入生が書いてくれたブログが先週更新されました!
    九大祭から感じるものは個人的にも数多くあったのですが、
    部員もそれぞれ多くのことを感じ取っているようで嬉しいです。

    さて、今回からはOverridingの制作過程をブログに複数回に分けて連載していこうかと考えています。
    この企画は5月の新入生向けプログラム講座が終わったくらいから進めていて、
    個人的に学ぶことも多かったのでこの際纏めてネットに公開していきます。

    Overridingとは、Unityという個人利用可能なゲームエンジンで制作したPC用音ゲーです。
    6レーンそれぞれに1つのボタンが対応しており、音楽に合わせてタイミングよくボタンを押すことによってスコアを獲得します。

    制作過程を連載しようと思ったのは、個人的に需要があるのではないかと思ったからです。

    Unityで音ゲーを制作するにあたって、最初はUnityでゲーム制作すらしたことがありませんでした。
    そのため、とにかく情報が欲しかったこともあり、
    「Unity 音ゲー」などをキーワードにたくさんGoogle先生に問い合わせてみていました

    残念ながら、先生はUnityの音ゲー制作に対する体系的な情報をあまり下さらなかったので、
    ほぼすべての音ゲー制作過程をまとめることに多少の需要があるのではないかと思っています。

     

    また、サークルのブログで連載する意味もあると考えています。
    経済マルチメディア研究会はゲーム制作をするサークルだと銘打っています
    この記事を通して、普段の活動とゲーム制作の大まかな流れを知ってもらえればよいと思っています。
    ということで、この連載のターゲット層は以下の通りです。

    何かゲームを新しく作ってみたいという気持ちの方
    個人レベルの小・中規模のゲーム開発に興味がある方
    初めてのゲーム制作体験記でいろいろなエピソードを書いているので楽しめます!

    音ゲーが好きで、制作の過程も見てみたい方
    途中でBeatmaniaシリーズにハマった話・音ゲーをヒントにプログラミングを進めた話をするので、興味深いかも…!

    今から音ゲーをUnityで組んでみたい方
    (完全ではないですが)プログラム面のアルゴリズムの話や、音ゲー制作で必要になりそうなプロジェクト管理の話をするので面白いかもしれません!

    サークルへの加入を希望してくれている方
    ホームページのお問い合わせ欄からいますぐメールを!その後読み進めても遅くないですよ

     

    連載初回にあたり、自己紹介から入っていきます。
    このゲーム制作において、私は以下の役割を担いました。

    • ディレクター: ゲームの原案を書き、制作の進行をする。スケジュール管理もする。
    • プランナー: 細かなゲームの仕様を決定する。ゲームを面白くするアイデアを出して組み合わせる。
    • レベルデザイナー: ゲームの難易度などを通して、プレイヤーの体験を設計する。このゲームでは譜面制作などを主にする。
    • UIデザイナー: メニューや演奏画面などのレイアウト設計を通して、ゲームの世界観やプレイヤーの体験を形作る。
    • プログラマー: 思い描いた案を実際にコンピュータにわかる形に翻訳して、コンピュータやゲームエンジンに伝える。
    • 広報: 完成したゲームの存在をターゲット層に効果的に伝える。ゲームをさらに魅力的に見せる。

    レベルデザイナーは3人でやったのですが、それ以外の役については1人でやりました。

    これらの役割の体験を中心に、必要に応じて2Dのイラストを描いてくれた人や作曲してくれた人を召喚しつつ連載していけたらと思います。

     

    筆者はどんな状況から音ゲー制作を開始したかというと、

    本プロジェクト開始時点(5月)C言語(苦しんで覚えるC言語を流し読みした程度)と
    C#(書籍「Unityで覚えるC#」を半分くらい読んだ程度)について少しの知識を有していました。

    Unityについては「はじめてのUnity」のRoll-a-Ballとシューティングをつくりました。
    つまり、Unityのチュートリアルはやったものの実際の制作はやったことのない状態でした。

    この状態からどうやってゲームを組んできたのかなどを書いていけたらと思います。

    では今回はこのあたりで、また次回お会いしましょう。

    PC音楽ゲーム「Overriding」を展示する長大祭ゲームセンターの告知はこちら!