#使用方法について
cytanb.luaのススメ 1.導入編
こちらにあります。
#messageで転送できるデータについて
VCIのメッセージの仕様についてははちらに記載があります。
vci.message(VCI間の通信)
送ることのできるデータは
- boolean
- number
- string
の3つになります。
この内の、stringを用いてtableデータを転送することが今回の記事になります。
#つまりはこうやればいい
---@class F_SendStateMessage
---@field State string
---@field FixedPos Vector3
local VCIsState = "none"
local FixedPos = Vector3.zero
local F_SEND_STATE = "F_SendState"
---@param state string
---@param fixedPos Vector3
local function SendState(state,fixedPos)
VCIsState = state
local fixedPosition = fixedPos or Vector3.zero
vci.state.Set(F_SEND_STATE,VCIsState)
---@type F_SendStateMessage
local message = {}
message.State = state
message.FixedPos = cytanb.Vector3ToTable(fixedPosition)
cytanb.EmitMessage(F_SEND_STATE,message)
end
---@param message F_SendStateMessage
local function F_SendState(sender,name,message)
FixedPos = message.FixedPos
VCIsState = message.State
end
cytanb.OnInstanceMessage(F_SEND_STATE,F_SendState)
細かい技とかは無視して、メッセージを送る時に何をするのかという話をやります。
##messageの内容を事前に決める。
---@class F_SendStateMessage
---@field State string
---@field FixedPos Vector3
ただのコメントですが、こちらを事前に記載することで、アノテーション・インテリセンスが効くようになります。
前後の行を空白にするのが重要です。
##messageの内容を作って送る
---@type F_SendStateMessage
local message = {}
message.State = state
message.FixedPos = cytanb.Vector3ToTable(fixedPosition)
cytanb.EmitMessage(F_SEND_STATE,message)
messageというTableを作成して、その中に各種パラメータを格納します。今回は、stateとFixedPosの中身を代入していきます。
string,number,boolean以外の値をmessageで送りたい場合は、cytanb.Vector3ToTable
のようにcytanb謹製の関数を用いて変換をかけます。これを行うことで、転送先でVector3として使用することができるようになります。
使用できる関数では、
- ColorToTable
- Vector2ToTable
- Vector3ToTable
- Vector4ToTable
- QuaternionToTable
の5つがあります。
##受信したメッセージを使う
---@param message F_SendStateMessage
local function F_SendState(sender,name,message)
FixedPos = message.FixedPos
VCIsState = message.State
end
cytanb.OnInstanceMessage(F_SEND_STATE,F_SendState)
cytanb.OnInstanceMessage
の解説についてはこちら。
cytanb.OnMessage
は、自身のvci以外にもMessageを送りたい場合に使用します。
cytanb.OnInstanceMessage
及びcytanb.OnMessage
を用いてメッセージ受信関数を作成すると、ToTable関数で格納したVector3等がVector3の形で使用できるようになります。
あとは、そのままVector3等のデータをそのまま利用すればよいです。