
gashaan
APPOverview
「脳死でできる、究極のストレス解消体験」。現実のレイジルーム(破壊部屋)のカタルシスを手のひらの上でいつでも再現する、超リアルな破壊シミュレーション。
Tech Stack
- iOS
- Unity 6 (URP)
開発中のため、まだ公開していません
手のひらの上の「破壊部屋」
世の中には「レイジルーム(破壊部屋)」という場所があります。お金を払って部屋に入り、お皿やグラスや古い家電を、バットで思いきり叩き割ってストレスを発散する。一度やってみたいと思いつつ、そうそう行けるものでもありません。
gashaan(がしゃーん)は、そのカタルシスを手のひらの上でいつでも再現するための iPhone アプリです。コンセプトは「脳死でできる、究極のストレス解消体験」。アプリを開くと、目の前の台座にワイングラスが1つ置いてある。画面をタップすると、割れる。それだけです。チュートリアルもゲームオーバーもなく、起動してから最初の1回を割るまで1〜2タップで届くことを目標にしています。
名前は、ものが割れる音の擬音から付けました。最初は「ポケットレイジ」という仮の名前でしたが、「レイジ(怒り)」だと怒りの発散に意味が寄りすぎます。パキパキと割れる音を楽しむ ASMR のような遊び方も同じくらい大事にしたかったので、どちらの気分にも寄らない擬音にしました。
今はまだ開発中で、ストアには出していません。
差別化は「手触り」
割る系のアプリは、すでにたくさんあります。その中で gashaan が勝負しようとしているのは、スクリーンショットには写らない部分、つまり手触りです。
- 振動 — ただブルッと震えるのではなく、ガラスならガラスの、陶器なら陶器の割れ心地を、振動の強さと鋭さの時間変化で作り分けます
- 物理 — 決まったアニメーションを再生するのではなく、物理演算で割るので、二度と同じ割れ方をしません。飛び散った破片は床や壁にぶつかって、もう一度跳ねます
- 音 — 割れた瞬間の音と、破片が床に散らばる余韻の音
この3つが、同じ瞬間にずれずに届くこと。これが一番難しく、一番大事なところです。「1ミリ秒のずれもない」と言いたいところですが、画面の1コマ自体が120Hz の画面でも8.3ミリ秒あるので、物理的には不可能です。そこで、映像・音・振動の3つを同じフレームで同時に発火させ、全体の遅れを20ミリ秒未満に収めることを実際の目標にしています。人間の感覚では、これで「ずれゼロ」に感じられます。
なぜ Unity なのか
最初に悩んだのは、何で作るかでした。候補は3つありました。
- Web(Three.js) — ブラウザの振動 API は「震える・止まる」くらいしか表現できず、「振動の極致」という看板が成り立ちません
- iOS ネイティブ(Swift) — 振動は最高ですが、破壊やパーティクル、アイテムの量産まわりを全部自分で作るのは重すぎます
- Unity 6(URP) — 物理と破壊の資産が豊富で、iPhone の振動エンジン(Core Haptics)もフルに使えます。将来 Android に広げる道も残ります
結果、Unity 6 と iOS の組み合わせにしました。
ただ、計画どおりにはいきませんでした。振動に使うつもりだった Apple 公式の Unity 用プラグインは、ビルドの途中で止まってしまって使いものにならなかったのです。結局、Core Haptics を直接呼ぶ小さなネイティブのコードを自分で書き、ビルドのたびに必要なフレームワークが自動でリンクされるようにしました。遠回りでしたが、振動の表現力は削らずに済んでいます。
グラスの割り方を、一度まるごと作り直した
最初の目標は「ワイングラス1個を、気持ちよく割る」ことだけに絞りました。何種類ものアイテムに手を広げる前に、1つを極めるためです。
事前に割っておく作戦
物理演算で毎回その場でガラスを粉々にするのは、スマホには重すぎます。そこで最初は、ゲームの世界でよく使われる定石に従いました。Blender で、あらかじめグラスを細かく割ったモデルを作っておき、叩かれた瞬間に「無傷のグラス」を「割れたグラス」に差し替える方法です。
Blender をコマンドだけで動かすスクリプトを書き、厚さ1.5ミリの薄いグラスを旋盤のように回転させて作り、叩く高さごとに5つのゾーンに分けて、叩いた点の周りほど細かく割れるようにしました。何度も叩けるように、破片をさらに細かく割った状態まで、木構造で全部用意しておきました。
実機で2つの問題が出た
見た目はよくなったものの、実際の iPhone で動かすと2つの問題が出ました。
- 重い。 叩いた瞬間に、約3,200個の破片のもとを1フレームで一気に生成していたので、ガクッと止まる
- 2回目以降に網目が見える。 1回目に割れる殻はきれいに作り直したが、2回目以降に見える深い階層の破片には、つなぎ目が残っていた
厄介だったのは、この2つが相反することでした。2回目以降の網目を消すために全部の階層をきれいに作り直すと、生成する量が増えて、1つ目の問題がもっと悪化します。「深い階層まで事前に割っておく」という作戦そのものが行き詰まっていました。
1回目だけ事前に、2回目からはその場で切る
そこで作戦を変えました。事前に割っておくのは1回目の割れ方だけにして、叩いた位置に合わせた25〜40個ほどの破片を用意しておきます。2回目以降は、叩いたその1つの破片だけを、その場で平面で切ることにしました。
このために、任意の形のメッシュを1枚の平面で2つに切り、切り口にふた(断面)を貼る処理を自作しました。一度にたくさん作らないので、1回の切断はコンマ数ミリ秒で終わります。実機に入れる前に、コマンドだけで動かす検証で、ある1つの割れ方から出た33個の破片を再帰的に切り続け、1,105回の切断が1度も失敗しないことを確かめました。
結果は大成功でした。
- 叩いた瞬間のガクつきが消えた
- 何回叩いても、網目のつなぎ目が出なくなった
- 気が済むまで、どこまでも細かく割り続けられるようになった
おまけに、1つの割れ方のデータは15MB から1MB 弱に、Blender での生成時間は1回あたり250秒から3秒になりました。
光らせすぎない
割れた瞬間の細かいきらめきも作り込みました。最初は派手なフラッシュや、星形にきらきら光るエフェクトを入れていたのですが、実機で見ると嘘っぽく感じました。現実のガラスは、割れた瞬間に発光したりしません。肉眼で見えるのは、鋭い小さな光の点です。
そこで方針をはっきりさせました。物理の見た目はとことんリアルに、派手な演出はスコアの表示だけに。 スコアは勝ち負けを決めるものではなく、数字が飛び交ったりコンボが続いたりする「脳汁が出る演出」として出します。決して罰しません。
これから
ワイングラスの割れ心地は、ひとまず納得できるところまで来ました。これから、割れた破片の音を本物の録音に差し替え、スコアの演出やアイテムを選ぶ画面などのアプリとしての機能を作っていきます。アイテムは、お皿、空き瓶、花瓶、キーボード、ブラウン管テレビ、スイカ、石膏像など、割ってみたいものを少しずつ増やしていく予定です。
gashaan を触ってみる
「脳死でできる、究極のストレス解消体験」。現実のレイジルーム(破壊部屋)のカタルシスを手のひらの上でいつでも再現する、超リアルな破壊シミュレーション。
開発中のため、まだ公開していません




