第01回 3Dダイスポーカー
ダイスの出目と役の判定
物理シミュレーションでダイスを振り、得られた目でポーカーの役を判定します。
学習内容
Unityの3D空間でダイス(サイコロ)を物理オブジェクトとして投擲します。
出目は三次元の幾何学を用いて判定、確定させます。
得られた出目は集計し、ポーカーの役として結果を表示します。
- 物理シミュレーションの基本的な挙動の理解と運用
- ベクトルの内積による方向判定
- 数値配列からのマッチング判定
といった、今後のゲーム制作で役立つ基礎知識に触れることを目的としています。
始める前に
UnityでSceneを開いてPlayし、Inspectorの値を見る操作と、C#の変数・条件・関数の基本的な読み方を確認してください。向きの計算はダイスの面を見ながら説明します。
前の回の受講や完成物は必要ありません。下の開始用プロジェクトから始めてください。
開始プロジェクト
Unity 6000.5.5f1を使用します。
ZIPを展開し、Unity HubからDicePokerフォルダーを開いてください。
この教材では、Unity用アセットをAssets/組織名/プロジェクト名/以下にまとめています。
今回は組織名がUNSLOW、プロジェクト名がDicePokerです。
ProjectウィンドウのAssets/UNSLOW/DicePoker以下に、役割別でScenes、Prefabs、Models、Materials、Scripts、Settingsのフォルダーが用意されています。
適時参照してください。
配布ファイル一覧
| ファイル | 役割 |
|---|---|
Assets/UNSLOW/DicePoker/Scenes/DiceFaceTest.unity | 1個のダイスを投げ、面の法線と内積を確認するScene |
Assets/UNSLOW/DicePoker/Scenes/DicePoker.unity | 5個のダイスを投げるScene |
Assets/UNSLOW/DicePoker/Scripts/DiceFaceTest.cs | 単独ダイスの操作、法線と内積の可視化 |
Assets/UNSLOW/DicePoker/Scripts/DiceGame.cs | 実装済みの投擲・停止待ち・結果表示 |
Assets/UNSLOW/DicePoker/Scripts/DiceFace.cs | 今回実装する内積による出目判定 |
Assets/UNSLOW/DicePoker/Scripts/DiceHand.cs | 今回実装する整数配列からの役判定 |
Assets/UNSLOW/DicePoker/Models/Dice.fbx | ダイスの3Dモデル |
Assets/UNSLOW/DicePoker/Models/ArrowXYZ.fbx | 矢印の3Dモデル |
README.md | ZIPに同梱された起動手順とファイルの案内 |
3Dモデルはダイスと矢印の素材から取得できます。
一般的なFBX形式の3Dモデルファイルです。
形状を調査変更したい場合などに利用してください。
配布プロジェクトの内容
各ダイスの出目を確定させ、役を求める処理を実装していきます。
まず1個のダイスからはじめて、出目の判定プログラムを作成します。
出目を正しく読めるようになったら、5個のダイスを使ったポーカーの役判定に進みます。
| Scene | 自分で実装する処理 |
| --- | --- | --- |
| DiceFaceTest.unity | DiceFace.Read:法線ベクトルの内積からダイスの1〜6の出目を求める |
| DicePoker.unity | DiceHand.Evaluate:出目の配列から役を求める |
ダイスの投擲と停止の待機、6面の内積の表示といった背景処理は実装済みです。
完成確認
- 物理衝撃でダイスを振ることができる
- ダイスの停止を判定、待機できる
- 面の方向ベクトルの内積から出目を求めることができる
- 5個のダイスを振り、役を判定できる