洛中ピンボール

© CC BY 4+ visibility464
© CC BY 4+
visibility464

洛中を舞台としたピンボールゲーム。
実際の街の3Dデータを用いたゲーム盤を採用。
コンセプトは【洛中に球をブチ当てながら、「街を知る」】

link https://takeruyufune.github.io/pinBallKyotoHackathon/
動画
開発素材

ツール

コンテンツ

システム構成

コード

GitHubにPublicで公開しています。
*Readmeをいじる時間はありませんでした。ユルシテ。
https://github.com/TakeruYufune/pinBallKyotoHackathon


ピンボールテストプレイ

WebGL で Github Pages に デプロイしました。
https://takeruyufune.github.io/pinBallKyotoHackathon/


WebGL build

WebGLでビルドすると

  • reset が効かない。
  • 重すぎる。
  • Plateau データを入れると重すぎて GitHub Actions のビルドが通らない。

大人しく Unity room を使いましょう。


キーコンフィグ

スペースキー:ボールを弾く
R:ボールを初期位置に戻す
→:右フリッパーの作動
←:左フリッパーの作動


ピンボールゲームロジック


ボールを動かす

Input.GetKeyUp (KeyCode.Space) で スペースキーを取得。
その時にピンボール台の傾きに合わせてベクトル計算した上で、RigidBodyに力を加えます。

Input.GetKeyUp (KeyCode.R) で r キーを取得。
ボール座標を初期位置に戻します。


*スニペット効かないのかよ!

/*
 import や 初期化は割愛
*/

    void Update()
    {
        if (Input.GetKeyUp (KeyCode.Space)) {
			// デバックログの表示
			Debug.Log ("x,y=" + xVector(angle) + "," + yVector(angle));
			// ピンボール台の傾き(20度)に合わせたベクトルを計算
			Vector3 Pos1 = new Vector3 (xVector(angle), yVector(angle) ,0f);
			// ボールに力を加える
			ballRigidBody.AddForce (Pos1*pinPower*105f);
		}

        //reset
        if (Input.GetKeyUp (KeyCode.R)) {
            ball.transform.position = new Vector3(-1.55f,4.41f,-8.85f);
            ballRigidBody.velocity = Vector3.zero;
        }
        
    }

    private float yVector (float angle) {
		// 角度(angle)に対する、y軸のベクトルを計算します。
		float y = (float)Math.Sin(angle * (Math.PI / 180));
		return y;
	}

	private float xVector (float angle) {
		// 角度(angle)に対する、x軸のベクトルを計算します。
		float x = (float)Math.Cos(angle * (Math.PI / 180));
		return x;
	}
}

フリッパーを動かす

玉を弾くフリッパーを動かします。
こいつがちょっと曲者。


Hinge Joint という Component を用いて、
2 つの リジッドボディ をグループ化し、互いにヒンジで連結されているかのように制約します。
ドアや鎖や振り子などのモデル化でよく使われるやつです。


Hinge Joint
こんな感じで軸を基準に動く角を制御できるようになります。


コードはこんな感じ。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Flipper : MonoBehaviour
{
    // Inspecterで値を変更する
    public float spring = 400;
    public float openAngle = 80; // 開く角度
    public float closeAngle = 0; // 閉じる角度

    // Hinge Joint
    private HingeJoint hjL; // axisL
    private HingeJoint hjR; // axisR

    // JointSpring
    private JointSpring jL; // axisL
    private JointSpring jR; // axisR

    void Start()
    {
        // AxisLとAxisRを探す
        GameObject flipperL = GameObject.Find("axisL");
        GameObject flipperR = GameObject.Find("axisR");

        // HingeJointを受け取る
        hjL = flipperL.GetComponent<HingeJoint>();
        hjR = flipperR.GetComponent<HingeJoint>();

        // Springを受け取る
        jL = hjL.spring;
        jR = hjR.spring;
    }

    void Update()
    {
        // ←を押す
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            jL.spring = spring;
            jL.targetPosition = openAngle;
            hjL.spring = jL;

        }
        // →を押す
        if (Input.GetKey(KeyCode.RightArrow))
        {
            jR.spring = spring;
            jR.targetPosition = -openAngle;
            hjR.spring = jR;
        }
        //すぐさま戻す
        if (Input.GetKeyUp (KeyCode.LeftArrow) || Input.GetKeyUp (KeyCode.RightArrow)) {

            jL.spring = spring;
            jL.targetPosition = closeAngle;
            hjL.spring = jL;

            jR.spring = spring;
            jR.targetPosition = closeAngle;
            hjR.spring = jR;
        }
    }   
}

ゲームBGM『古都に駆ける』

和楽器を用いて京都をイメージさせ、ミニゲームらしいアップテンポでシンプルな曲にしました。
https://youtu.be/bZYd0mMtEnE?si=YTzi2EaVmFiB298u


3Dデータ/テクスチャ

UnityのPlateauSDKv1.1.6.1を用いてフィールドデータを作っています。
image


本来は洛中すべてを舞台として使いたいと思って、
QGISを用いてLOD1モデルを出力したりもしたが、
これがかなり時間の無駄だった。
image


せめてテクスチャとして国土交通省の航空写真を貼り付けるなどしないとステージの床の様子が伝わらない。


あと1日あれば・・・

  • スコア加算判定
  • バンパー的な跳ね返り値が高いオブジェクトの作成
  • Gameマネージャーを用いたゲームの開始・終了判定について
  • オブジェクトの破壊演出(パチンコみたいな)

ストーリー

top


京都の3Dモデルで公序良俗に反することがしたい!


ピンボール盤にしてメチャクチャにしたくない?


洛中を舞台としたピンボールゲーム。
実際の街の3Dデータを用いたゲーム盤を採用。


コンセプトは**【洛中に球をブチ当てながら、「街を知る」】**


クソデカフィールド
image

メンバー

平安京イノベーター

  • user
    どりー_ハックツ @friedrich_hackz
    • エンジニア(Unity,ソフトウェア)
    • 雑用
    • バーキン
  • user
    ちいたべあ @space_tiger
    • エンジニア(Unity,ソフトウェア)
    • サウンドエンジニア
    • おにぎり
  • user
    おだやか @alt9800
    • リーダー兼開発者
    • 企画、プログラム、データ作成
    • ドーナツ

関連イベント
  • event KYOTO PLATEAU HACK 20232023-11-18 開催

同じニオイがする作品
  • event sobayaz - その場にいるみんなで楽しめるヤバいゲーム絶対 - by sobayaz.com
  • event マッスルドーム
  • event ほさかオンジエッヂ(仮)
  • event ECO Liver Stick Game Controller

作品を登録しよう

モノづくりしている人に、つくった作品を見てもらえ、リアクションがもらえるかも?

close

目次