379 lines
19 KiB
XML
379 lines
19 KiB
XML
<示例>
|
||
<!--顺序执行完毕-->
|
||
<Action type="Sequence"></Action>
|
||
<!--同时执行完毕-->
|
||
<Action type="Parallel"></Action>
|
||
<!--只要任意满足就结束这个动作组-->
|
||
<Action type="Any"></Action>
|
||
<!--打印日志-->
|
||
<Action type="Log" value="进入初始状态"></Action>
|
||
<!--显示UI value是UI的名字 isShow 是显示还是隐藏-->
|
||
<Action type="UIShow" value="UIOperationList" isShow="false"></Action>
|
||
<!--移动物体 time是多长时间移动到目标位置 0是瞬间完成-->
|
||
<Action type="Move" value="Main Camera" to="18.162,2.113,3.22" time="0"></Action>
|
||
<!--旋转物体 time是多长时间旋转到目标位置 0是瞬间完成-->
|
||
<Action type="Rotate" value="Main Camera" to="0,180,0" time="0"></Action>
|
||
<!--缩放物体 time是多长时间旋转到目标位置 0是瞬间完成-->
|
||
<Action type="Scale" value="Main Camera" to="0,180,0" time="0"></Action>
|
||
<!--执行下一步左侧步骤列表 默认开始的时候为-1步 要主动调用一次才到第1步-->
|
||
<Action type="NextOperation"></Action>
|
||
|
||
<!--切换operation模块 使用此功能 operation的配置中必须有name属性
|
||
name为operation配置中的name-->
|
||
<Action type="OperationChange" name="operation配置的name值"></Action>
|
||
|
||
<!--播放动画 reset=true则动画停在第一帧 frame是指定格在动画的某一帧 如果为-1 正常播放动画 speed 动画播放速度 默认为1 deviceName与物体路径二选一 -->
|
||
<Action type="Anim" value="物体路径" deviceName="" animName="动画名字" frame="-1" speed="1"></Action>
|
||
<!--右下角生成按钮 可生成多个 用逗号分开-->
|
||
<Action type="Btns" value="按钮1,按钮2,按钮3"></Action>
|
||
<!--用于右侧道具栏选择正确的道具 event用于配合StrEventCondition 做检测
|
||
rightScore 正确选择一个 得分 wrongScore 错误一个 得分 scoreStepName是评分的key
|
||
autoHide =-1 则点击结束 否则 等待对应时间后自动结束
|
||
totalScore 是配合wrongScore的用于初始化一个分数 然后选择扣分
|
||
random 是否打乱devices的顺序
|
||
scrollSpeed 鼠标滚轮的滑动速度
|
||
position left/right 可以让道具栏在左侧或者右侧-->
|
||
<Action type="UITools" devices="道具名字1" answers="正确道具"
|
||
setActive="true"
|
||
rightLabel="提示:器械选择正确。"
|
||
wrongLabel="提示:器械选择错误,\r\n当前模块中,不需要该物品。"
|
||
rightEvent=""
|
||
wrongEvent=""
|
||
rightScore=""
|
||
wrongScore=""
|
||
totalScore=""
|
||
scoreStepName="手术准备器械选择"
|
||
autoHide="-1"
|
||
random="true"
|
||
scrollSpeed="25"
|
||
position="right"></Action>
|
||
|
||
<!--道具背包,用于配合状态机进行道具的使用 目前是初步版本,仅支持配合UIClick点击,暂无道具数量等功能 详细参数可参考UITools-->
|
||
<Action type="UIBackPack" devices="道具名字1"
|
||
random="true"
|
||
scrollSpeed="25"
|
||
position="right"></Action>
|
||
|
||
<!--物体点位选择 物体的中心点-->
|
||
<Action type="PointQuestion" value="路径1,路径2"></Action>
|
||
<!--物体点位选择 3D版
|
||
position坐标
|
||
rotate 旋转角度
|
||
scale 缩放
|
||
如果deviceName存在 则不需要写坐标旋转和缩放,是参照把deviceName的物体作为父物体
|
||
rotateSpeed="180" 点图标旋转速度
|
||
clickEvent是点击后发送的字符串配合StrEvent
|
||
-->
|
||
<Action type="Point3DQuestion">
|
||
<Data deviceName="Point1" clickEvent="点1"></Data>
|
||
<Data position="0,0,0" rotate="0,0,0" scale="1,1,1" clickEvent="点1" rotateSpeed="360"></Data>
|
||
<Data deviceName="Point2" clickEvent="点2"></Data>
|
||
<Data deviceName="Point3" clickEvent="点3"></Data>
|
||
</Action>
|
||
|
||
|
||
<!--输入框
|
||
title 显示的题目
|
||
Input 为输入框(可多个) var里面存储是输入值
|
||
btn 为按钮(可多个)
|
||
checkAnswer 是否开启检查答案
|
||
wrongLabel 输入错误的提示文字
|
||
wrongCount 错误后重新输入的次数
|
||
autoHide 错误弹窗自动消失的停留时间
|
||
scoreStepName 对应Score
|
||
rightScore 答对的分数
|
||
wrongScore错误的分数 (每错一次扣一次分)
|
||
-->
|
||
<Action type="Input" title="请输入" finishedEvent="UI关闭事件通知用StrEvent接收">
|
||
<Input name="数字1:" var="变量1" answer="100"></Input>
|
||
<Input name="数字2:" var="变量2" answer="200"></Input>
|
||
<Btn name="确定" clickEvent="确定点击" checkAnswer="true" wrongLabel="输入错误" wrongCount="3" autoHide="-1" scoreStepName="" rightScore="0" wrongScore="-1"></Btn>
|
||
<Btn name="取消"></Btn>
|
||
</Action>
|
||
|
||
<!--文字选择题 scoreName="分数名"
|
||
rightScore="5" 可以是正确加分
|
||
wrongScore="-5" 也可以是错误减分
|
||
absolutely="false" true错一个选项就扣全部分 false按错的选项数量来算分
|
||
format="{0:F1}" F1代表保留1位小数 F2代表2位 F0代表不保留小数
|
||
注意:rightScore与wrongScore不能同时存在 同时存在则只生效rightScore
|
||
finishedEvent 用于监听选择题UI消失
|
||
optionType 0 根据答案数量自动判断单选还是多选 1 单选 2多选
|
||
-->
|
||
<Action type="TextQuestion" title="这里是标题" options="A.111|B.222|C.333|D.4444" answers="2" btns="确定" wait="1" showAnswer="true" scoreName="分数名" rightScore="5" wrongScore="-5" absolutely="false" format="{0:F1}" finishedEvent="事件名" optionType="0"></Action>
|
||
<!--提示 time为显示的时间 -1则一直显示 icon是前面的绿色图标是否显示 audio是音频 位于data文件夹下的Audio-->
|
||
<Action type="Hint" value="这里是文字描述" time="5" icon="false" audio="音频.mp3"></Action>
|
||
<!--设置变量 value只能是数字可以是小数-->
|
||
<Action type="Var" name="变量名" value="1"></Action>
|
||
<!--设置分数 与Score配合使用 步骤名字一定要是step+name-->
|
||
<Action type="SetScore" name="步骤名字" value="1"></Action>
|
||
<!--镜头切换 近距离和默认 如果有了nearDevice就可以不用nearPos和nearRot了 按照device的坐标和旋转来处理镜头 normalDevice同理
|
||
只设置坐标 不执行镜头切换 是否执行要根据UI的按钮操作来
|
||
如果不配置 nearPos或者normalPos 则自动隐藏对应的视角UI按钮
|
||
-->
|
||
<Action type="CameraSwitch" nearDevice="肠钳" normalDevice="组织钳" nearPos="-3.942,3.24,-4.319" nearRot="16.42331,180,0" nearTime="1" normalPos="-3.942,3.24,-3.946" normalRot="16.42331,180,-5.305351E-14" normalTime="1"></Action>
|
||
<!--文字弹窗 按钮可以多个 点击事件使用UIClick
|
||
alpha 0-1 背景的透明度
|
||
-->
|
||
<Action type="TextTip" title="这里是标题" value="这里是文字描述" audio="q001.mp3" btns="确定,取消" alpha="0.5"/>
|
||
<!--锁定镜头 true为开启 false为锁定 isMove是移动镜头 isRotate是旋转镜头-->
|
||
<Action type="CameraLock" isMove="true" isRotate="true"></Action>
|
||
<!--播放视频 size为视频窗口大小 offset为窗口中心点偏移 播放完成事件和关闭事件 通常使用关闭事件即可
|
||
宽度不要小于500 否则进度条看不太清楚-->
|
||
<Action type="Video" value="test.mp4" size="500,500" offset="10,10" finishedEvent="finished" closeEvent="close"></Action>
|
||
|
||
<!--物体显隐 用于3D物体 isShow=true为显示 false为隐藏 UI的显隐使用UIShow isDevice为true的话 value就要写device配置的Name
|
||
如果deviceName存在 则不用isDevice
|
||
-->
|
||
<Action type="Show" value="SM_QvanChangJing/sence/pPlane1" deviceName="设备名字" isShow="false" isDevice="false"></Action>
|
||
<!--设置物体高亮 deviceName可以用于设备名字 value是物体路径 color是rgba isHigh设置是否显示高亮 isIndependent为true 可以避免模型高亮被遮挡
|
||
visibility: 有三种形式 Normal, AlwaysOnTop,OnlyWhenOccluded
|
||
-->
|
||
<Action type="HighLight" deviceName="设备名字" value="路径" isHigh="true" color="0,255,0,255" isIndependent="true" visibility="Normal"></Action>
|
||
<!--设置物体高亮 deviceName可以用于设备名字 value是物体路径 color是rgba isHigh设置是否显示高亮 isIndependent为true 可以避免模型高亮被遮挡
|
||
time是从不显示到完全显示的时间
|
||
count是循环 -1为无限循环需要主动关闭
|
||
当count不为-1时 可以使用finishedEvent配合strEvent做闪烁结束的监听
|
||
visibility: 有三种形式 Normal, AlwaysOnTop,OnlyWhenOccluded
|
||
-->
|
||
<Action type="HighLightFlash" deviceName="测试" isHigh="true" color="0,255,0,255" time="1" count="-1" finishedEvent="等待" visibility="Normal"></Action>
|
||
<!--延迟 value是秒-->
|
||
<Action type="Delay" value="2"></Action>
|
||
<!--
|
||
* audioType="Music" 播放背景音乐,同一时间只能播放一个音乐,播放别的音乐会直接卸载掉正在播放的音乐。
|
||
* audioType="Sound" 播放音效,同一时间可以播放多个音效,当多人说话时,也可以用来播放人声。
|
||
* audioType="Voice" 播放人声,与播放背景音乐一致,同一时间只能播放一个人声,用于播放一些旁白之类的声音非常适合。
|
||
volumen 是播放音量 默认是跟随设置中的背景音乐的音量
|
||
waitFinished = false 则不会等待播放完成就往下进行
|
||
-->
|
||
<Action type="Audio" audioType="Voice" value="q001.mp3" loop="false" waitFinished="true" volumen="1" isPlay="true"></Action>
|
||
|
||
<!--判断UI点击-->
|
||
<Condition type="UIClick" value="UI路径 可以使用快捷键Ctrl+Q获取"></Condition>
|
||
<!--判断物体点击 支持deviceName isRight = true 则点击到目标物体 才算满足 false 则点击了其他物体就满足 常用于错误的点击-->
|
||
<Condition type="ObjClick" deviceName="设备名" value="物体路径 可以使用快捷键Ctrl+Q获取" isRight="true"></Condition>
|
||
<!--判断物体点击(长按) time为长按时间(秒)-->
|
||
<Condition type="ObjClickLong" deviceName="设备名" value="物体路径 可以使用快捷键Ctrl+Q获取" time="3"></Condition>
|
||
|
||
<!--判断键盘输入 这里的value对应的是KeyCode枚举-->
|
||
<Condition type="Input" value="A"></Condition>
|
||
<!--判断变量名i是否等于1-->
|
||
<Condition type="Var" name="变量名" value="1"></Condition>
|
||
<!--字符串类型的事件监听 UI中的事件监听都 也可以自定义事件监听-->
|
||
<Condition type="StrEvent" value="器械选择通过"></Condition>
|
||
<!--画线 途径点使用|分割 lineScale 可以调整x轴向和y轴线上的线的粗细-->
|
||
<Action type="Line" name="红线" value="-4.030808,2.689521,-1.768913|-3.759371,2.694512,-1.247592" color="255,0,0,255" width="0.05" lineScale="10,0.5"></Action>
|
||
<!--相机锁定 是否可以移动 isMove 是否可以旋转镜头 isRotate-->
|
||
<Action type="CameraLock" isMove="false" isRotate="false"></Action>
|
||
<!--正确和错误的弹窗 isRight 是否正确-->
|
||
<Action type="ResultTip" value="这里是一个弹窗" isRight="true" finishedEvent="关闭弹窗事件" autoHide="1"></Action>
|
||
<!--图片弹窗
|
||
path 为Data/Image/下的路径
|
||
size 设置图片尺寸 size="0,0"或者不写代表使用图片原尺寸
|
||
isDrag 设置是否可以拖拽
|
||
position 图片初始位置-->
|
||
<Action type="ImageTip" path="骨刀.png" isDrag="true" size="100,100" position="0,0"></Action>
|
||
|
||
<!--Led数字显示 要求每个数字单独一个模型面片,所有数字面片放在一个物体的子级,第一个物体是最右侧的数字,只能放数字面片模型 不要放其他的东西
|
||
number 是数值 支持 小数点和横线 例如 12.34 3-5 -->
|
||
<Action type="Led" value="Number" number="12.34" color="255,0,0,255"></Action>
|
||
<!--删除场景中的物体-->
|
||
<Action type="Destroy" value="路径"/>
|
||
|
||
<!--给程序使用的:自定义脚本 挂空预制体上 预制体放在Resources/CustomAction目录下 执行完毕后记得使用StringEventSystem.Global.Send(finishedEvent)-->
|
||
<Action type="Script" value="MyAction" finishedEvent="111"/>
|
||
|
||
<!--
|
||
给物体设置Collider value是物体路径 DeviceName是Device名字 与path二选一 colliderType:AddBox AddMesh Remove Active
|
||
当colliderType为AddBox的时候 args用|分割后 第一个参数是 中心点 第二个参数是box碰撞的大小
|
||
当colliderType为Active的时候 args为false或者是true
|
||
当colliderType为AddMesh和Remove的时候 args不需要
|
||
-->
|
||
<Action type="Collider" value="路径和DeviceName二选一" deviceName="肠钳" colliderType="AddBox" args="0,0,0|1,1,1"></Action>
|
||
|
||
<!--
|
||
倒计时动画 value是文字描述 支持富文本 要按照xml的语法 把<>括号转义 <代表< >代表>
|
||
time是动画时间
|
||
values 支持多个动画 使用C#的{0} {1} 对应values的|分割后的数据 5,10 是从5到10的意思
|
||
finishedEvent 是倒计时结束后的回调
|
||
needClick如果为true 动画结束后不会自动小时 需要点击空白处
|
||
reverse 是时钟倒计时动画是否倒序播放
|
||
format="{0:F1}" F1代表保留1位小数 F2代表2位 F0代表不保留小数
|
||
-->
|
||
<Action type="TimeTip" value="这里是文字描述<color=#FF00FF>{0}</color>-{1}" time="5" values="5,10|50,100" format="{0:F1}" finishedEvent="close" needClick="false" reverse="false" ></Action>
|
||
|
||
<!--用于刷新骨骼动画执行后 meshCollider最后的位置-->
|
||
<Action type="SkinnedBake" value="路径和DeviceName二选一" deviceName="肠钳"></Action>
|
||
|
||
<!--通用事件通知
|
||
|
||
HighLightTrigger:value=false 关闭device悬浮高亮 value=true 开启
|
||
|
||
-->
|
||
<Action type="StrEvent" name="HighLightTrigger" value="false"></Action>
|
||
|
||
<!--支持deviceName isWait是只Action是否等待结束 frame 从哪一帧开始播放 endFrame 从哪一帧结束-->
|
||
<Action type="TimeLine" value="Models/CZ_FengXian_Timeline" isShow="true" finishedEvent="播放完毕" isWait="true" frame="140" endFrame="240"></Action>
|
||
|
||
<!--弹窗 btns可支持多个按钮-->
|
||
<Action type="TipWindow" value="恭喜你完成当前模块" btns="确定,取消" audio=""></Action>
|
||
|
||
<!--动态更换材质球和主贴图 材质球优先级高于贴图 同时写的情况下 先换材质球再换贴图-->
|
||
<Action type="Mat" value="Models/zhudao/nan_shoushufu.012" matName="yiyongshoutao_yellow1" index="1" mainTexture="贴图名字"></Action>
|
||
|
||
|
||
<!--3D展示
|
||
3D展示的UI界面 是自动启动 但需要使用UIShow手动关闭
|
||
关闭的监听可以使用Btns与UIClick配合
|
||
属性解释:
|
||
Object 是要展示的物体 与 Device配合使用
|
||
postion rotate scale是物体初始位置和旋转
|
||
rotateSpeed 按住鼠标左键的旋转速度
|
||
moveSpeed 按住鼠标右键的移动速度
|
||
distance 是相机默认距离物体的距离
|
||
distanceMin 和 distanceMax 是相机远近的最小和最大值
|
||
pitchMin和pitchMax 是相机俯仰角范围
|
||
-->
|
||
<Action type="3DObjShow">
|
||
<Object deviceName="器械盒" position="10000,10000,10000" rotate="0,90,0" rotateSpeed="11" moveSpeed="0.12" distance="0.25" pitchMin="-31" pitchMax="81" distanceMin="0.3" distanceMax="10"></Object>
|
||
<Object deviceName="创巾钳"></Object>
|
||
</Action>
|
||
|
||
<!--预加载模块 要在app.xml的Data标签内-->
|
||
<PreLoad>
|
||
<Action type="Parallel">
|
||
<Action type="LoadRes" value="Pig.xml" resType="xml"></Action>
|
||
</Action>
|
||
</PreLoad>
|
||
|
||
|
||
|
||
<Module>
|
||
<!--场景名字-->
|
||
<Scene>Scene</Scene>
|
||
<!--Study学习模式 Exam实训模式 All都有-->
|
||
<Type>Study</Type>
|
||
<!--模块名字-->
|
||
<Name>模块1</Name>
|
||
|
||
<Descript>
|
||
这里是实训描述内容.....
|
||
巴拉巴拉....
|
||
</Descript>
|
||
<Device>
|
||
<Name>组织钳</Name>
|
||
<HighLight color="255,255,255"/>
|
||
<Path>SM_QvanChangJing/SM_JianZiLei/zuzhiqian</Path>
|
||
<!--支持多行内容展示 \n为换行 支持富文本-->
|
||
<Tip>组织钳\n巴拉巴拉巴拉</Tip>
|
||
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
|
||
<!--MeshCollider和Box只需要一个-->
|
||
<MeshCollider/>
|
||
<Icon>工具/骨刀.png</Icon>
|
||
</Device>
|
||
|
||
|
||
|
||
<Score>
|
||
<Item step="术前准备" name="器械准备" sum="6.5" bind=""/>
|
||
<Item step="术前准备" name="药品准备" sum="5.5" bind=""/>
|
||
<Item step="术前准备" name="耗材准备" sum="15.5" bind=""/>
|
||
<Item step="术前准备" name="主刀人员准备" sum="10" bind=""/>
|
||
<Item step="术前准备" name="手术动物准备" sum="10" bind=""/>
|
||
<Item step="术前准备" name="术部剃毛准备" sum="10" bind=""/>
|
||
<Item step="术前准备" name="术部消毒准备" sum="10" bind=""/>
|
||
<Item step="手术过程" name="测试麻醉程度" sum="10" bind=""/>
|
||
<Item step="手术过程" name="术部开刀" sum="10" bind=""/>
|
||
<Item step="手术过程" name="找出病变小肠" sum="10" bind=""/>
|
||
<Item step="手术过程" name="去除病变小肠" sum="10" bind=""/>
|
||
<Item step="手术过程" name="肠端吻合" sum="10" bind=""/>
|
||
<Item step="手术过程" name="缝合切口" sum="10" bind=""/>
|
||
<Item step="手术过程" name="缝合后处理" sum="10" bind=""/>
|
||
</Score>
|
||
|
||
|
||
<!--步骤操作 相同的moduleType 仅支持一个 name用于切换操作模块使用-->
|
||
<Operation name="模块名字" moduleType="Exam" freeStep="false">
|
||
<Step name="术前准备">
|
||
<Step name="器械准备">
|
||
<Reset>
|
||
<Action type="Log" value="1-1步重置"></Action>
|
||
</Reset>
|
||
<Start>
|
||
<Action type="Sequence">
|
||
<Action type="Log" value="1111"></Action>
|
||
<Action type="Move" value="Main Camera" to="-3.206,3.24,-1.425" time="0"></Action>
|
||
<Action type="Rotate" value="Main Camera" to="27.9597,270,2.899792E-06" time="0"></Action>
|
||
<Action type="Btns" value="下一步"></Action>
|
||
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
|
||
<Action type="NextOperation"></Action>
|
||
</Action>
|
||
</Start>
|
||
<Finished>
|
||
<Action type="Sequence">
|
||
</Action>
|
||
</Finished>
|
||
</Step>
|
||
</Step>
|
||
</Operation>
|
||
|
||
|
||
<!--动作组-->
|
||
<Action name="初始化" type="Sequence">
|
||
<Action type="Log" value="开始"></Action>
|
||
<Action type="UIShow" value="UIRightTop"></Action>
|
||
<Action type="Delay" value="2"></Action>
|
||
<Condition type="UIClick" value="UIRoot/Common/UIModeSelect/Exam"></Condition>
|
||
<Action type="Log" value="0000"></Action>
|
||
<Action type="Parallel">
|
||
<Action type="Log" value="11111"></Action>
|
||
<Action type="Delay" value="2"></Action>
|
||
<Action type="Log" value="22222"></Action>
|
||
</Action>
|
||
<Condition type="And">
|
||
<Condition type="ObjClick" value="Cube"></Condition>
|
||
</Condition>
|
||
<Action type="Log" value="并行结束"></Action>
|
||
<Action type="Delay" value="5"></Action>
|
||
<Action type="Sequence">
|
||
<Condition type="Or">
|
||
<Condition type="ObjClick" value="Cube"></Condition>
|
||
<Condition type="ObjClick" value="Cube (1)"></Condition>
|
||
</Condition>
|
||
<Action type="Log" value="aaaaa"></Action>
|
||
<Action type="Delay" value="5"></Action>
|
||
<Action type="Log" value="bbbbb"></Action>
|
||
</Action>
|
||
<Action type="Log" value="结束"></Action>
|
||
</Action>
|
||
|
||
|
||
<!--状态机-->
|
||
<FSM>
|
||
<State name="状态2">
|
||
<Enter>
|
||
<Action type="Sequence">
|
||
<Action type="Log" value="aaa"></Action>
|
||
<Action type="Delay" value="2"></Action>
|
||
<Action type="Log" value="bbb"></Action>
|
||
</Action>
|
||
</Enter>
|
||
<Exit>
|
||
<Action type="Parallel">
|
||
<Action type="Log" value="ccc"></Action>
|
||
<Action type="Delay" value="2"></Action>
|
||
<Action type="Log" value="ddd"></Action>
|
||
</Action>
|
||
</Exit>
|
||
</State>-->
|
||
<Transision from="any" to="状态1">
|
||
<Condition type="ObjClick" value="Cube"></Condition>
|
||
</Transision>
|
||
<Transision from="初始状态" to="状态2">
|
||
<Condition type="ObjClick" value="Cube (1)"></Condition>
|
||
</Transision>
|
||
</FSM>
|
||
|
||
</Module>
|
||
|
||
</示例> |