TOP > カジノゲームVCI

カジノゲームVCI


更新履歴

Ver1.03(2022/05/06) Ver1.02(2021/10/24) Ver1.02(2021/10/23)
Ver1.01(2021/10/17)

ダウンロード

下記のリンクよりダウンロードしてください。
CasinoTemplate.unitypackage


これで何ができるか

らーめん制作のカジノチップVCIと連携して指定のベットエリアへチップを賭け、ゲーム結果に応じて配当が支払われるようなカジノゲームVCIを作成できます。
また、ゲーム途中で「ベット額を増額」「新たに別のチップを賭ける」といった特殊なベット処理もできますが、まだサンプルができていません。(制作中)


商品化について

利用規約の範囲内であれば、有償無償問わず商品化していただいて構いません。
その代わり、多くの方にこのカジノチップで楽しんでいただきたいので、商品に固定タグの登録をお願いしたいと思っています。

が、まだタグの案が決まっていません


サンプル一覧

大小ゲーム
スロット

Unityへの導入

UnityPackageのインストール

下記のリンクよりUnityPackageをダウンロードして順番にインストールしてください。
インストール方法は、Unityへファイルを直接ドラッグ&ドロップします。


用語

アバターID ExportAvatarのGetId()で取得できる値
チップVCI らーめん制作のカジノチップVCIです
ゲームコード カジノゲームVCIの判別コードです。
成績表のスコア区分に必要になるので、他のVCIと被らないようなコードを登録します。
ベットエリア ベットを賭けれる判定のコライダーオブジェクト名


具体的にできること


~基本処理~

できること 説明
ベットエリアを
作成

専用のコライダーオブジェクトの名前に||BETAREA||を付け加えて、スクリプトで登録することでチップをベットできる空間を作成できます。
Casino.RegistBetArea("ベットエリア名")

ベット禁止状態の
切替

ゲーム開始等で全体にベットの禁止状態(ノーモアベット)を切り替えます
この状態ではベットエリアにチップを置いてもベット判定にはなりません。
Casino.StartNoMoreBet()
Casino.EndNoMoreBet()
Casino.IsNoMoreBet()

配当処理を行う

ゲームの結果から賭けた場所によって配当の倍率を決め、配当処理を行う。
Casino.StartReward()
Casino.SetRewardRate(ベットエリア名, 配当倍率)
Casino.CompleteReward()


~オプション処理~

できること 説明
賭けられている
チップ情報を
取得する

ベットエリアの情報から、賭けられているチップ情報を取得できます。
Casino.GetBetAreaData(ベットエリア名 or ベットエリアID)

プレイヤーの
現在のチップ数を
取得する

ユーザーのアバターIDを指定すると、チップVCIで現在手元にある枚数を取得する。
ブラックジャックのダブルダウン・インシュランス等で追加のチップが払えるかチェックする時に使用します。
Casino.GetCasinoPlayerData(プレイヤーのアバターID)

ゲームVCIから
賭けチップを
増額する

現在賭けられているチップを増額する。
ただし、チップVCIのテーブルに必要数のチップ数が足りない場合は無効になります。
Casino.AddBet("ベットエリア名", チップVCIのInstanceID, 増額ベット数)

ゲームVCIから
指定のベットエリアへ
ベットさせる

指定のベットエリアへ強制ベットさせます。
ただし、チップVCIのテーブルに必要数のチップ数が足りない、チップVCIのチップタワーの作成上限に達している、一度もゲームVCIへベットをしていない場合(ゲームに参加する意思が無い場合)は無効になります。
Casino.ForceNewBet("ベットエリア名", チップVCIのInstanceID, ベット額, 設置座標)



サンプル説明

サンプルシーンを開く

サンプルシーンAssets/RamenVCI/Casino/CasinoSampleを開くとカジノゲームのサンプルがあります。
CasinoSampleオブジェクトからVCI出力すると、そのまま遊べます。

カジノゲームのサンプルのゲーム内容

1~100の数値がランダムで出てくるので、出てくる値が50以下(小)か51以上(大)のどちらになるかを賭けます。
当たった時の配当は2倍になって返ってきます。
ルーレットの赤か黒かを当てるようなゲームです。

プレイの説明
1 小・大のエリアにチップを賭ける
2 StartボタンをUseしてゲームを開始する
3 ゲーム結果によって配当処理が行われる



チュートリアル:サンプルと同等のVCIを作る


Unityでの作業

テンプレートのプレハブを設置

RamenVCI/Casino/CasinoTemplateのプレハブをシーンに設置します。
現在のVCI仕様ですと、VCI所有者が複数人になる場合があるため、その制御用のサブアイテム[CasinoCore]のサブアイテムを固定で設置しています。
この所有権を持っている人がカジノスクリプトを読むように処理をしています。

ゲームのテーブルを作成

ゲームが行われるテーブルモデルを設置します。
無くても動作はしますが、ゲームの全体像が見えにくいのでテストでも作成することをおすすめします。

ベットエリアを作成

ベットエリアになる場所にコライダーオブジェクトを設置します。
CubeやSphereから作成して構いませんが、下記の条件で作成してください

  • コライダーのオブジェクト名に||BETAREA||を追記する
    ※オブジェクト名に含まれていればどこでも良いです
    ※||BETAREA||以外の文字は、ベットエリアが判別しやすいようにチップを重ねた時に表示されます
  • オブジェクトの中心座標にチップが設置されるので、中心座標をテーブルより上になるようにしてください
  • このオブジェクトは位置や角度が絶対移動しない環境にしてください。ベット後のチップは追従できません。

今回のサンプルでは||BETAREA||Big||BETAREA||Smallで作成します。



また、デバッグ時は見えやすいようにマテリアルをTransparent等の半透明にすると良いでしょう。
本番出力時はMeshFilter、MeshRendererを削除してコライダーのみを残します。



追加で賭ける場所にテキストを設置します。
※TextMeshProオブジェクトの作成方法は、Hierarchy上で右クリック→VCI→Text

ゲーム結果の表示テキストを作成

ゲームの結果を表示するためTextMeshProのオブジェクトを作成します。
テーブル上の見える位置に配置してください。オブジェクト名はResultTextとします。

ゲームのスタートボタンを作る

ゲームをスタートするボタンを用意します。
オブジェクト名はGameStartとします。

カジノライブラリの組み込み(テンプレートから作成しない場合)

VciObjectのScriptsにカジノライブラリ(Casino.lua)を組み込みます。
ファイルの場所はRamenVCI/Casino/Lua/Casino.luaにあります。



スクリプトの組み込み

カジノライブラリの初期化

カジノライブラリ(モジュール)を読み込みます。
初期化時にはゲームコードとベットエリアを登録してください。
これによってチップをベットエリアに設置することができます。

  1. --カジノライブラリ読み込み
  2. local Casino = require("Casino")
  3. --ゲームコード登録
  4. Casino.RegistGameCode("SampleGame_BigOrSmall_CreatedByXXXXX")
  5. --ベットエリア登録
  6. Casino.RegistBetArea("||BETAREA||Small")  --ベットエリア小(1~50)
  7. Casino.RegistBetArea("||BETAREA||Big")  --ベットエリア大(51~100)
  8. main.lua

ゲームの処理

GameStartオブジェクトをUseした時に、ゲーム結果を表示する。
1~100の乱数を表示するゲーム結果を表示するのみなので、チップの配当処理は入っていません。

  1. --ゲームタイマー
  2. local gameTimer = -1
  3. function onUse(use)
  4.     --ゲーム開始処理
  5.     if use == "GameStart" then
  6.         --ゲームが始まってない時だけモード変更
  7.         if gameMode ~= "PlayGame" then
  8.             --モードをゲーム中に変更
  9.             vci.state.Set("GameMode", "PlayGame")
  10.         end
  11.     end
  12. end
  13. function update()
  14.     --ゲーム中のみ処理
  15.     local gameMode = vci.state.Get("GameMode")
  16.     if gameMode == "PlayGame" then
  17.         --60フレーム後に結果を出す
  18.         gameTimer = gameTimer + 1
  19.         if gameTimer == 60 then then
  20.             --ゲーム結果発表
  21.             local gameResult = math.random(1,100)
  22.             vci.assets._ALL_SetText("ResultText", gameResult)
  23.             --モードを戻す
  24.             vci.state.Set("GameMode", "")
  25.         end
  26.     else
  27.         gameTimer = 0
  28.     end
  29. end
  30. main.lua

ゲーム中のベット禁止状態にする

ゲーム開始時にベット禁止状態(追加ベットができない状態)にし、ゲーム結果が出た後再びベット可能にする。

  1. function onUse(use)
  2.     --ゲーム開始処理
  3.     if use == "GameStart" then
  4.         --ゲームが始まってない時だけモード変更
  5.         if gameMode ~= "PlayGame" then
  6.             --モードをゲーム中に変更
  7.             vci.state.Set("GameMode", "PlayGame")
  8.             --ベット禁止状態にする
  9.             Casino.StartNoMoreBet()
  10.         end
  11.     end
  12. end
  13. function update()
  14.     --ゲーム中のみ処理
  15.     local gameMode = vci.state.Get("GameMode")
  16.     if gameMode == "PlayGame" then
  17.         --60フレーム後に結果を出す
  18.         gameTimer = gameTimer + 1
  19.         if gameTimer == 60 then then
  20.             --ゲーム結果発表
  21.             local gameResult = math.random(1,100)
  22.             vci.assets._ALL_SetText("ResultText", gameResult)
  23.             --モードを戻す
  24.             vci.state.Set("GameMode", "")
  25.             --ベット許可状態にする
  26.             Casino.EndNoMoreBet()
  27.         end
  28.     else
  29.         gameTimer = 0
  30.     end
  31. end
  32. main.lua

配当処理

ゲーム結果から配当のあるベットエリアに配当倍率を設定していきます。
配当未設定のベットエリアのチップは、自動的に没収となります。

  1. function update()
  2.     --ゲーム中のみ処理
  3.     local gameMode = vci.state.Get("GameMode")
  4.     if gameMode == "PlayGame" then
  5.         --60フレーム後に結果を出す
  6.         gameTimer = gameTimer + 1
  7.         if gameTimer == 60 then then
  8.             --ゲーム結果発表
  9.             local gameResult = math.random(1,100)
  10.             vci.assets._ALL_SetText("ResultText", gameResult)
  11.             --モードを戻す
  12.             vci.state.Set("GameMode", "")
  13.             --ベット許可状態にする
  14.             Casino.EndNoMoreBet()
  15.             --配当設定開始
  16.             Casino.StartReward()
  17.             --ゲーム結果から配当倍率の設定
  18.             if gameResult <= 50 then
  19.                 --小への配当を2倍に設定する
  20.                 Casino.SetRewardRate(
  21.                     "||BETAREA||Small", --対象のベットエリア名
  22.                     2 --配当倍率2倍
  23.                 )
  24.             else
  25.                 --大への配当を2倍に設定する
  26.                 Casino.SetRewardRate(
  27.                     "||BETAREA||Big", --対象のベットエリア名
  28.                     2 --配当倍率2倍
  29.                 )
  30.             end
  31.             --配当確定
  32.             Casino.CompleteReward()
  33.         end
  34.     else
  35.         gameTimer = 0
  36.     end
  37. end
  38. main.lua




関数リファレンス

カジノライブラリでゲームに使用できる関数一覧です。

データ登録系
関数名 説明
RegistGameCode(gameCode) カジノゲームVCIの判別コードを登録します。
成績表のスコア区分に必要になるので、他のVCIと被らないようなコードを登録します。
引数名 説明
gameCode string ゲームコード
RegistBetArea(areaName, enableMultiBet, maxBet) ベットエリアを登録します。コライダー判定があるオブジェクト名を指定してください。
ここで登録したベットエリアへチップを設置できます。
引数名 説明
areaName string ベットエリアのコライダーオブジェクト名
enableMultiBet boolean このベットエリアに複数人がベット可能にするか(nilの場合はtrue)
maxBet
Ver1.03で追加
number ベットの上限値を設定
(nilの場合は無制限)
ベット禁止/許可状態の処理
StartNoMoreBet() ベット禁止状態にする。この関数実行以降はベットエリアへのチップを設置できなくなる。
EndNoMoreBet() ベット可能状態にする。この関数実行以降はベットエリアへチップを設置可能になります。 ※初期状態やソースをリロードした際はベット可能状態になります。
IsNoMoreBet() ベット禁止状態を取得する。
返り値
true: ベット禁止
false:ベット許可
プレイヤーのチップ操作系
GetCasinoPlayerData(userID_or_chipVciID) 外部のチップVCIから、プレイヤーのチップデータを取得
引数名 説明
userID_or_chipVciID string ユーザーのアバターID or チップVCIのInstanceIDを指定

返り値名 説明
hasChipNum number 対象のチップVCIで、まだ使用できる所持チップ数
AddBet(areaName_or_areaID, userID_or_chipVciID, addChipNum) チップVCIへ設置済みチップの増額を申請をする。
所持チップ数が増額分無ければ無効になります。
引数名 説明
areaName_or_areaID string ベットエリアのコライダーオブジェクト名 or ベットエリアIDを指定
userID_or_chipVciID string ユーザーのアバターID or チップVCIのInstanceIDを指定
addChipNum number 増額するチップ数を指定
ForceNewBet(areaName_or_areaID, userID_or_chipVciID, betChipNum, betAreaPos) 新しいベットエリアへチップの設置申請をします。
所持チップ数がベット額分無い、またはチップタワーの作成上限に達している場合は無効になります。
RegistBetAreaで登録していない仮想のベットエリアを指定できます。
引数名 説明
areaName_or_areaID string ベットエリアのコライダーオブジェクト名 or ベットエリアIDを指定
userID_or_chipVciID string ユーザーのアバターID or チップVCIのInstanceIDを指定
betChipNum number ベットするチップ数を指定
betAreaPos Vector3 ベット位置
ChangeChipNumByRate(areaName_or_areaID, userID_or_chipVciID, rate) 現在ベットしているチップを、指定した倍率分掛けた額に変更します。
所持チップに関係なくチップ額が増減するため、スコアに影響します。
引数名 説明
areaName_or_areaID string ベットエリアのコライダーオブジェクト名 or ベットエリアIDを指定
userID_or_chipVciID string ユーザーのアバターID or チップVCIのInstanceIDを指定
rate number 変化するチップ額の倍率
AddChipNumByFixedValue(areaName_or_areaID, userID_or_chipVciID, addChipNum) 現在ベットしているチップを、指定したチップ分増減します。
所持チップに関係なくチップ額が増減するため、スコアに影響します。
引数名 説明
areaName_or_areaID string ベットエリアのコライダーオブジェクト名 or ベットエリアIDを指定
userID_or_chipVciID string ユーザーのアバターID or チップVCIのInstanceIDを指定
addChipNum number 増減するチップ額
ベットエリア処理系
GetBetAreaData(areaName_or_areaID) ベットエリア名からベットエリアの情報・賭けられているチップの情報を取得する。
引数名はベットエリア名、ベットエリアIDどちらでも取得できます。
引数名 説明
areaName_or_areaID string ベットエリアのコライダーオブジェクト名 or ベットエリアIDを指定

返り値名 説明
areaName string ベットエリア名
obj ExportTransform コライダーオブジェクト
enableMultiBet boolean このベットエリアに複数人がベットできるか
betChipData usertype[] 現在ベットされているチップ情報一覧
(詳細はGetBetChipDataの返り値を参照)
GetBetChipData(areaName_or_areaID, userID_or_chipVciID) ユーザーID、またはチップVCIのInstanceIDから、ベットエリアに賭けられているチップ情報を取得する
引数名 説明
areaName_or_areaID string ベットエリアのコライダーオブジェクト名 or ベットエリアIDを指定
userID_or_chipVciID string ユーザーのアバターID or チップVCIのInstanceIDを指定

返り値名 説明
chipVciID string チップVCIのInstanceID
userID string チップVCIのVCI所有者のアバターID
chipNum number ベットされているチップ数
chipHeight number ベットされているチップの物理的な高さ[m]
IsBettingThisAreaFromUserID(areaName_or_areaID, userID_or_chipVciID) ユーザーID、またはチップVCIのInstanceIDから、ベットエリアに賭けられているチップ情報を取得する
引数名 説明
areaName_or_areaID string ベットエリアのコライダーオブジェクト名 or ベットエリアIDを指定
userID_or_chipVciID string ユーザーのアバターID or チップVCIのInstanceIDを指定

返り値
true: 対象ユーザーがベットしている
false:対象ユーザーがベットしていない
配当処理
StartReward(isGetResultForAllBetArea) 配当処理の準備をします。
ベットエリアに対しての配当データを全てクリアする
引数名 説明
isGetResultForAllBetArea boolean 全てのベットエリアに配当処理を行う場合はtrue
一部のベットエリアにチップを残したい場合はfalseにして個別にSetRewardRateで設定します
(nilの場合は自動でtrue)
SetRewardRate(areaName_or_areaID, rewardRate) ベットエリアに対しての配当倍率を設定する。
ゼロの場合はチップ没収になります。
全てのベットエリアの配当倍率設定が完了後、CompleteRewardの実行で配当処理が行われます。
引数名 説明
areaName_or_areaID string ベットエリアのコライダーオブジェクト名 or ベットエリアIDを指定
CompleteReward() 配当処理を確定します。
SetRewardRateで設定したデータを元に、全てのチップVCIへ配当処理が行われます。
「SetRewardRateで値をゼロに設定」「または未設定」のベットエリアのチップは没収されます。