TOP > テキスト転写VCIのテンプレート

テキスト転写VCIのテンプレート


概要

キーボードVCIの内容を別のVCIに転写するスクリプトです。

ダウンロード

下記のGoogleDriveリンクよりダウンロードしてください。
キーボードVCI関連のテンプレート



必要なオブジェクト説明

PaperRoot

転写する紙のサブアイテム

MainText

転写先のTextMeshProオブジェクト

TextFixTutorialPanel

文章を確定する操作説明パネル
※こちらは無くても動作します


簡易実装

スクリプトをそのまま使う場合、カスタムの部分を自分のVCI内のオブジェクト名に合わせれば使えます。

  1. -------------------------------------
  2. --- カスタム
  3. -------------------------------------
  4. ---転写するアイテムを登録(アイテム名, アイテムの大体の半径サイズ)
  5. KeyboardPrintManager.RegisterPrintSubItem("PaperRoot", 0.2)
  6. ---本文を固定化できるか(falseなら何度も書き換えが可能)
  7. KeyboardPrintManager.SetEnableFixText(true)
  8. ---転写先のテキストオブジェクト名
  9. local MAIN_TEXT = "MainText"
  10. ---オプション
  11. ---確定方法の説明パネルオブジェクト名(未確定時に表示する)
  12. KeyboardPrintManager.RegisterFixTextTutorial("TextFixTutorialPanel")
  13. main.lua

処理の流れ

[1]衝突時に転写申請のメッセージ送信

onTriggerEnterで登録したアイテムと、特定のコライダー||PRINT_AREA||が衝突した時に、転写申請のメッセージを送信する。
※モジュール側のOnTriggerEnterへitem, hitを渡すと自動的に判定・送信処理してくれます。

  1. --アイテム登録
  2. KeyboardPrintManager.RegisterPrintSubItem("PaperRoot", 0.2)
  3. function onTriggerEnter(item, hit)
  4.     --登録しているアイテムが、転写範囲に接触したらキーボードVCIへ転写の申請メッセージを送る
  5.     KeyboardPrintManager.OnTriggerEnter(item, hit)
  6. end
  7. main.lua
[2]転写の受信メッセージ処理

[1]の返答メッセージを受信時に、テキストを更新する。
テキストはstateへ保存してBindのイベントで更新します。

  1. ---本文保存先のStateキー
  2. local STATE_KEY_MAIN = "MainText_Print"
  3. ---state変更時、本文更新
  4. local function SetMainText(value)
  5.     if value == nil then return end
  6.     vci.assets.SetText(MAIN_TEXT, value)
  7. end
  8. vci.state.Bind(STATE_KEY_MAIN, SetMainText)
  9. ---キーボードVCIから転写申請の返答をもらい、本文更新
  10. local function HandleResponsePrintOut(sender, name, message)
  11.     vci.state.Set(STATE_KEY_MAIN, message)
  12. end
  13. vci.message.On(KeyboardPrintManager.messageKeyGet, HandleResponsePrintOut)
  14. main.lua

公開定数・関数

定数

変数名 説明
printerHitCode 転写申請の判定になるコライダーのコード
この文字列が含まれているコライダーが、転写申請の対象になります。
messageKeyRequest 転写申請を送るときのメッセージキー
プレイヤーのIDがキーに自動で含めているため、送った人のみが実行します。
messageKeyGet 転写の返答を受信時のメッセージキー
この受信処理を作る事で、テキストを更新できます。
  1. ---state変更時、本文更新
  2. local function SetMainText(value)
  3.     if value == nil then return end
  4.     vci.assets.SetText(MAIN_TEXT, value)
  5. end
  6. vci.state.Bind(STATE_KEY_MAIN, SetMainText)
  7. main.lua


関数

RegisterPrintSubItem(subItemName, size)

転写のトリガーになるサブアイテム名を登録します。
onTriggerEnter時にitemに該当するサブアイテム名になります。

引数 説明
subItemName string 登録するサブアイテム名
size number サブアイテムのおおまかなサイズ[m]
接触時に対象VCIのコライダーに本当に衝突しているかのチェックに用いられます。
※大きすぎると、複数のキーボードVCIを設置している時に広範囲で反応します

RegisterFixTextTutorial(objName)

テキスト確定操作のチュートリアルオブジェクトを登録する。 ※未設定でも動作します

引数 説明
objName string 登録するオブジェクト名

SetEnableFixText(isEnable)

テキスト確定設定の変更
※デフォルトではtrueになっています

引数 説明
isEnable boolean テキスト確定設定
true:確定処理が使用可能
false:確定せず、いつでも書き換えが可能

SetFixText(isFix)

テキスト確定処理を実行 ※SetEnableFixTextでfalseにした場合は無視されます

引数 説明
isFix boolean true:テキスト確定する
false:テキストを書き換え可能に戻す

IsFixedText()

テキスト確定状態を取得

返り値(型) 説明
boolean 現在のテキスト確定状態

OnTriggerEnter(item, hit)

onTriggerEnter時に行う処理
RegisterPrintSubItemで登録したオブジェクトが衝突した時に、転写申請メッセージを送る。
main.lua内では下記のように組み込んでください。

  1. local KeyboardPrintManager = require("KeyboardPrintManager")
  2. function onTriggerEnter(item, hit)
  3.     KeyboardPrintManager.OnTriggerEnter(item, hit)
  4. end
  5. main.lua

引数 説明
item string 衝突元(item)のサブアイテム名
hit string 衝突したコライダー名

EmitRequestPrint(printSubItem, hitName, size)

転写申請メッセージを送る
※「サブアイテム」と「転写トリガーになるコライダー」の距離が一定内にないと申請が通らない仕様になっています。 ※トリガーをコライダー接触ではなく、カスタムして手動でメッセージを送りたい場合に使用

引数 説明
printSubItem ExportTransform 衝突元(item)のサブアイテム名
hitName string 衝突したコライダー名
size number サブアイテムの大まかな半径サイズ