Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

まっしろ

まっしろ

すべての色が揃うと、白になる。

光の三原色を重ねる落ち物パズル

unityroom で遊ぶ

プレイ画面

ルール

6 列 × 12 段の盤面に、赤・緑・青の光る玉が 2〜4 個のかたまりで落ちてきます。 同じマスに 3 色そろえると白になって消えます。

重ねると 結果
赤 + 緑 黄(あと青で白)
緑 + 青 シアン(あと赤で白)
赤 + 青 マゼンタ(あと緑で白)
同じ色 光を失って灰色のおじゃま玉になる

かたまりは形を保ったまま積まれます。混ざるのは各列のいちばん下の玉だけで、その上の玉は光ったまま乗ります。

白ができると、上下左右に隣り合った灰色の玉が浄化されて消えます。空いたマスに上の玉が落ち、そこでまた白が生まれれば連鎖。

制限時間は 60 秒。スコアは 白 × 100 × 連鎖数 + 浄化 × 30 なので、連鎖を狙うほど伸びます。 積み切ってもその場で終わります。

操作

  • A / D、または / … 落とす列を選ぶ
  • Space / Enter でも可) … 落とす
  • マウスクリックでも、その列に直接落とせます

落とす前に出る点線の輪が、置いた結果を先に見せてくれます。白い輪なら白ができ、灰色の輪と × なら濁ります。


作り方の特徴

玉と効果音をコードで生成している

画像も音声ファイルも持っていません。 盤面の玉・着地予測・炸裂エフェクトは OrbSpriteFactory が実行時に Texture2D へ描き、効果音 24 本は ProceduralAudio がサイン波を積んで合成します。WebGL のビルドサイズを抑えるためです。

例外は画面 UI の PNG 3 枚(タイトル・ルール説明・リザルト)だけで、日本語の組版はコード生成では作れないため画像にしています。

玉は「発光するガラス玉」として描いています。球面の法線から拡散反射とスペキュラを作り、内部発光・縁の明線・底の三日月(ガラスを通った光が焦点を結ぶ弧)を重ねています。濁った玉だけは発光も光暈も持たず、周囲の光を鈍く反射するだけです。

効果音は A の純正長三和音(赤 440 / 緑 550 / 青 660 Hz = 4:5:6)に閉じ込めてあります。倍音が整数比で噛み合ってうなりが出ないので、3 音が 1 つの響きに溶けます。濁りの音だけが和音の外(495 Hz)にあり、見なくても「光を失った」と分かります。

Core は UnityEngine に依存しない

Assets/Scripts/Core/ はゲームルールだけを持ち、UnityEngine を参照しません。Unity を起動せずにテストを回せるので、ルールの検証が速く回ります。


構成

主要なファイルだけ抜き出したものです。

Assets/Scripts/
├── Core/            ゲームルール(UnityEngine 非依存)
│   ├── Board            盤面。落下・混色・濁り・浄化・重力
│   ├── ColorMixer       光の加法混色の判定
│   ├── ColorSupply      次の色の抽選。盤面を見て重みを変える
│   ├── Piece            落ちてくる玉のかたまり
│   ├── PieceShapes      かたまりの形 17 種
│   └── LightColor       RGB のビットフラグ(R=1, G=2, B=4 → 7 で白)
├── View/
│   ├── GameController     進行。Unity のライフサイクルと 1 手の順序
│   ├── GameHud            画面の文字と図(OnGUI)
│   ├── GameInput          キーボードとマウスの読み取り
│   ├── PiecePresentation  待機中のピース・ゴースト・NEXT
│   ├── DropPresentation   落下・着地・白の炸裂
│   ├── BoardRenderer      盤面に置かれた玉とグリッド
│   ├── OrbSpriteFactory   玉のスプライトをコードで描く
│   ├── GameColors         配色と発光の強さ
│   └── LandingRows        着地段の計算(ゴーストと落下で共有)
└── Audio/
    ├── ProceduralAudio    波形合成の基盤
    ├── SoundLibrary       効果音 24 本の設計
    └── GameAudio          再生と発音管理

Assets/Editor/       開発ツール(ビルドに含まれない)
├── BuildTools           WebGL ビルドと設定の適用
├── PreviewCapture       エディタを開かずに画面を PNG で書き出す
├── OrbProbe             玉の輝度を測って明るさの序列を検証する
├── AudioProbe           効果音を WAV に書き出して数値で検分する
└── EffectPreview        演出用スプライトを並べて確認する

Tests/CoreTests.cs   ルールのテスト 94 件
Tools/serve.py       WebGL ビルドを手元で開くための配信スクリプト

開発

Unity 6000.0.45f1(WebGL モジュール)で作っています。

動かす

  1. Unity Hub でこのフォルダを開く(6000.0.45f1 / WebGL モジュール)
  2. Assets/Scenes/Main.unity を開いて Play

玉のスプライトも効果音も実行時に生成するので、初回の Play まで待ち時間があります。

ルールのテスト

Unity を起動せず、同梱の Roslyn でコンパイルして走らせます(94 件)。

UNITY=/Applications/Unity/Hub/Editor/6000.0.45f1/Unity.app/Contents   # macOS
MONO="$UNITY/MonoBleedingEdge/bin/mono"
CSC="$UNITY/MonoBleedingEdge/lib/mono/msbuild/Current/bin/Roslyn/csc.exe"

"$MONO" "$CSC" -langversion:latest -nologo -out:coretests.exe \
  Assets/Scripts/Core/*.cs Tests/CoreTests.cs
"$MONO" coretests.exe

Tests/CoreTests.csAssets/ の外にあるので、ゲームのビルドには含まれません。

WebGL ビルド

以下は macOS の例です。UNITY_BIN は環境に合わせて読み替えてください。

UNITY_BIN=/Applications/Unity/Hub/Editor/6000.0.45f1/Unity.app/Contents/MacOS/Unity

"$UNITY_BIN" -batchmode -quit -projectPath . \
  -executeMethod Masshiro.EditorTools.BuildTools.BuildWebGL \
  -buildPath Build/WebGL

BuildTools.Configure が画面サイズ(960×600)・Gzip 圧縮・例外設定をまとめて適用します。

decompressionFallbackfalse にしているので、出力は .data.gz 形式です。Content-Encoding: gzip を返すサーバーでないと起動しません(素の python3 -m http.server では読み込めない)。同梱のスクリプトを使ってください。

python3 Tools/serve.py Build/WebGL 8080

画面を見る / 数値で測る

エディタを開かずに確認できます。

# 盤面を PNG で書き出す(-nographics は付けないこと。描画できず真っ黒になる)
"$UNITY_BIN" -batchmode -quit -projectPath . \
  -executeMethod Masshiro.EditorTools.PreviewCapture.Capture \
  -outputPath preview.png -width 2560 -height 1440

# 玉の輝度を測る。原色 < 中間色 < 白、濁りが最暗、を検証する
"$UNITY_BIN" -batchmode -quit -projectPath . \
  -executeMethod Masshiro.EditorTools.OrbProbe.Run -outputPath orbs.tsv

# 効果音を WAV に書き出し、長さ・振幅・スペクトルを表にする
"$UNITY_BIN" -batchmode -quit -projectPath . \
  -executeMethod Masshiro.EditorTools.AudioProbe.Run -outputDir sounds/

OnGUI の内容は PreviewCapture に写らないので、UI の確認は WebGL ビルドで行います。

PreviewCapture-saveScene を付けると Assets/Scenes/Main.unity を作り直します。シーンの構成(GameSceneBuilder)を変えたときだけ使ってください。


ライセンス

MIT License。詳細は LICENSE を参照してください。

コード・画像・音(の生成コード)すべてを含みます。


Unity 製ゲームジャム unity1week(お題「しろ」)への投稿作を、個人の趣味として制作したものです。所属する組織とは関係ありません。

About

光の三原色を重ねる落ち物パズル。3色そろうと白になって消える。unity1week(お題「しろ」)投稿作

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages