0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

cytanb.luaのススメ 3.同一VCIのtable転送

Posted at

#使用方法について
cytanb.luaのススメ 1.導入編
こちらにあります。

#messageで転送できるデータについて
VCIのメッセージの仕様についてははちらに記載があります。
vci.message(VCI間の通信)

送ることのできるデータは

  • boolean
  • number
  • string

の3つになります。

この内の、stringを用いてtableデータを転送することが今回の記事になります。

#つまりはこうやればいい

temp.lua
---@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等のデータをそのまま利用すればよいです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?