MATH|UNITY

知財 × プログラミング × デザイン

横断型Unityゲーム開発授業

🤖 AIアシスタント Gem

あなたの学習をサポートする6つのツール

全て
👨‍💻 生徒
👨‍🏫 教員

Unity開発のヒント

🧩

Unityの基本構成

Unityのすべてのモノは「ゲームオブジェクト」です。そして、その機能は「コンポーネント」が担います。

  • ゲームオブジェクト: シーンに配置するキャラクター、壁、ライトなどの「からっぽの箱」。
  • コンポーネント: 箱に入れる「機能」や「道具」。形を決める`Mesh Renderer`、物理演算の`Rigidbody`、自作の`C#スクリプト`などがあります。

💡 Inspectorウィンドウでコンポーネントを追加・編集しよう。

⚙️

物理演算の基礎

オブジェクトにリアルな物理挙動をさせるには、2つのコンポーネントが基本になります。

  • Rigidbody: オブジェクトに「質量」を与え、重力や外部からの力の影響を受けるようにする。
  • Collider: オブジェクトに「当たり判定」の形状を設定する。これがないと他のオブジェクトをすり抜けてしまう。

💡 プレイヤー操作には`Rigidbody.AddForce()`が便利。

📜

スクリプトの初歩

C#スクリプトはUnityの頭脳です。決まった「イベント関数」の中に行動を記述します。

  • `Start()`: ゲーム開始時に一度だけ呼ばれる。初期設定に使う。
  • `Update()`: 毎フレーム(1秒間に何十回も)呼ばれる。プレイヤーの入力受付や、常に監視したい処理に使う。

💡 `Debug.Log("メッセージ");` でコンソールに情報を表示して、変数の値などを確認する癖をつけよう。

♻️

プレハブ (Prefab)

「プレハブ」は、設定済みのゲームオブジェクトを保存しておける設計図のような機能です。

  • 敵キャラクターや、ステージに配置するコインなど、同じものを何個も使いたい時に便利。
  • プレハブ本体を編集すれば、シーンに配置したすべてのオブジェクトに一括で変更が反映される。

💡 ヒエラルキーからプロジェクトウィンドウにドラッグ&ドロップするだけでプレハブが作れる。

Unity公式ブログ 初心者向け記事一覧 Unity公式ラーニング 初心者向けチュートリアル

コピペで使える!コードスニペット

プレイヤーを動かす

キーボードの矢印キー(またはWASD)でプレイヤーを動かす基本的なスクリプトです。`Rigidbody`コンポーネントが必要です。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5.0f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        rb.velocity = movement * moveSpeed;
    }
}

敵の追尾

指定したターゲット(プレイヤー)を追いかけるスクリプトです。Inspectorで`target`にプレイヤーオブジェクトを設定してください。

using UnityEngine;

public class EnemyChaser : MonoBehaviour
{
    public Transform target; // 追いかける対象
    public float speed = 3.0f;

    void Update()
    {
        if (target != null)
        {
            // ターゲットの方向を向く
            transform.LookAt(target);

            // 前に進む
            transform.Translate(Vector3.forward * speed * Time.deltaTime);
        }
    }
}
🎲

確率でアイテムを出す

設定した確率(`dropChance`)でアイテムをドロップ(生成)する関数です。敵を倒した時などに呼び出します。

using UnityEngine;

public class ItemDropper : MonoBehaviour
{
    public GameObject itemPrefab; // 生成するアイテムのプレハブ
    [Range(0, 1)]
    public float dropChance = 0.3f; // 30%

    public void TryDropItem()
    {
        // 0.0から1.0の間のランダムな値を生成
        float randomValue = Random.value;

        if (randomValue < dropChance)
        {
            // アイテムを生成する
            Instantiate(itemPrefab, transform.position, Quaternion.identity);
        }
    }
}

数学B × ゲーム開発テーマ

数列 × レベルアップ

経験値の増加パターンを数学で設計!等比数列の漸化式を使って、成長スピードを調整します。

💡 発展:AnimationCurveで感覚的に調整

コードで公比を調整するだけでなく、Unityの`AnimationCurve`を使えば、グラフを直接編集して「レベルが上がるほど、次のレベルまでが急に大変になる」といった経験値カーブを感覚的に作ることもできます。

確率 × ガチャ

レアアイテムが出る確率を制御!乱数を使い、確率的な処理をゲームに導入します。

💡 発展:重み付き抽選(Loot Table)

「ノーマル70%、レア25%、激レア5%」のように、複数のアイテムに異なる確率を設定するにはどうすれば良いでしょう?全確率の合計値までの乱数を生成し、どの範囲に入ったかでアイテムを決める「重み付き抽選」が一般的な手法です。

ベクトル × 敵の追尾

敵をプレイヤーに向かって動かすロジックを設計!位置ベクトルや正規化を活用します。

💡 発展:ベクトルの応用

  • 差ベクトル: `目標位置 - 現在位置` で「向かうべき方向と距離」がわかる。これが追尾の基本!
  • 正規化: `.normalized` でベクトルの長さを「1」に揃えること。これにより、純粋な「方向」だけを取り出せる。
  • 内積: `Vector3.Dot()` を使うと「敵がプレイヤーの前方・後方のどちらにいるか」を角度で判定できる。索敵範囲の実装に応用可能。

プロジェクト概要

目的

目的と特徴

聖学院の教育理念5つの柱に基づき、生徒主体の学び、実践的な技術教育、学外の経験を重視。大学生・企業と協働し、成果物制作を通じて自律と成長を促進します。

概要

実施概要

対象は高2GIC。2025年10月~11月にかけて、全10コマの授業を実施。対面を基本とし、最終回には外部講評者を招いた成果発表会を行います。

TEAM

チーム構成

高校生3名(プログラマー、UI/UXデザイナー、ゲームプランナー)と、技術伴走を行う大学生1名でチームを編成。役割を分担し、協力して開発を進めます。

授業スケジュール

日程 内容 主な学び・活動
第1回 10/3 (金) 13:30-15:20 オリエンテーション/Unity基礎/知財講座・企画立案 LOTTEキャラ紹介/Unity基本操作/著作権/ゲーム仕様策定
第2回 10/4 (土) 8:50-10:40 大学生紹介/スクーミー体験/プロトタイプ制作⓪ 顔合わせ/目標設定/制作開始
第3回 10/24 (金) 13:30-15:20 プロトタイプ制作① 基礎実装・UI初期デザイン
第4回 10/25 (土) 8:50-10:40 プロトタイプ制作② 機能実装/ゲームバランス調整
第5回 11/7 (金) 13:30-15:20 プロトタイプ制作③ 機能実装/ゲームバランス調整
第6回 11/8 (土) 8:50-10:40 プロトタイプ制作④ 機能実装/ゲームバランス調整
第7回 (日程未定) 成果発表会 発表スライド制作/プレゼン/企業講評