加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Vizrt数据处理中的终极武器之SMM-Shared Memory Map

发布时间:2020-12-14 03:41:21 所属栏目:大数据 来源:网络整理
导读:首先我们今天主要谈的SMM,请注意不是SM ,那个可以关注岛国电影,言归正传。 首先SMM是干什么的,我个人的观点是主要是用来处理数据的,像Datapool一样,你可以用它来处理财经、比赛实时数据等,当然了你如果使用的比较恰当,它也可以是你做互动场景时不可

首先我们今天主要谈的SMM,请注意不是SM

,那个可以关注岛国电影,言归正传。

首先SMM是干什么的,我个人的观点是主要是用来处理数据的,像Datapool一样,你可以用它来处理财经、比赛实时数据等,当然了你如果使用的比较恰当,它也可以是你做互动场景时不可或缺的强大武器。官方的文档介绍请参看下图


1. SMM的使用方法

'将子container的名字存入scene map中
Sub OnEnterSubContainer(subContainer As Container)
    Scene.Map["subcontainer_name"] = subContainer.Name
End Sub

' Script 2:
'将子从scene map中读出存储的名字,并显示当前组的font上
Sub OnExecPerField()
    Geometry.Text = (String)System.Map["subcontainer_name"]
End Sub

'注册监听一个map变量
Sub OnInit()
    Scene.Map.RegisterChangedCallback("subcontainer_name")
End Sub

'当变量有变化时会执行下面的函数
Sub OnSharedMemoryVariableChanged(map As SharedMemory,mapKey As String)
    If mapKey = "subcontainer_name" Then
        Geometry.Text = (String)map["subcontainer_name"]
    End If
End Sub

2. SMM的作用域

  • Scene.Map: This is the map local to the current scene. Every scene has one map that can be used to exchange data among the scripts in the scene.
  • System.Map: The system-wide map. It allows for data sharing among the scenes currently loaded into memory.
  • VizCommunication.Map: A distributed map that enables data sharing among the computers connected to one viz database.

上面是原文的介绍,通俗易懂的理解是:scene的作用域是当前场景,system的则是当前引擎的多个场景之间可以共享访问,VizCommunication则是所有连接到当前的GH中的引擎都可以共享变量。


3. 如何通过外部程序发送SMM到Viz Engine。

Examples:

    VIZ_COMMUNICATION*MAP?SET_DOUBLE_ELEMENT "my_double" 1.2
  • VIZ_COMMUNICATION*MAP GET_DOUBLE_ELEMENT "my_double"

参考官方示例,你可以发送上面的语句到Viz Engine去更新变量或获取变量,请注意这里是VIZ_COMMUNICATION跟你通过脚本去更新时的拼写VizCommunication不太一样,另外一个是SET(更新),另一个是GET(获取)


4. SMM支持的数据类型。

Here is a list of commands supported by each of these maps:

    SET_BOOLEAN_ELEMENT and?GET_BOOLEAN_ELEMENT
  • SET_INTEGER_ELEMENT and GET_INTEGER_ELEMENT
  • SET_DOUBLE_ELEMENT and GET_DOUBLE_ELEMENT
  • SET_STRING_ELEMENT and GET_STRING_ELEMENT

官方文档显示支持的类型包括整数、浮点、字符等,但是我这里主要要说的是如果我要放一个数组进去的话应该怎么办呢,下面的代码可以解决这个问题,这段代码就没有注释了,主要是根据我对客户的了解,如果能用到数组了,那么他一定懂下面的代码。

另外关于这个东西如果用到互动场景中去,我这里给大家一个这样的环境假设,你如果想在两台引擎直接进行通信,通常你会选择system.sendcommand等类似的命令,那么你如果通过注册监听变量是否更容易实现呢。

send VIZ_COMMUNICATION*MAP SET_ELEMENT "teams" "{team1} {Chelsea}"

dim teams = (stringmap) VizCommunication.Map["teams"]

这个东西为什么官方文档上没有呢?这个我也比较奇怪!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读