播放模式设计文档
<h2>架构图</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/e51b2269dccbc0756942e5caf042a08b" alt="" /></p>
<p>播放器核心由3个维度的参数来确认</p>
<ol>
<li>平台-这个构建出包的时候就已经确定了</li>
<li>播放方式-这个是由外部作为参数传进来,它确定了实验的场景和流程
目前有课件、测评,未来会有更多的播放模式</li>
<li>交互方式-这个是由外部作为参数传进来,它确定了实验的交互方式
这个目前可以通过3D、VR映射到对应的交互输入方式,比如
3D:使用鼠标、键盘、触屏
VR:头盔、手柄</li>
</ol>
<h3>流程图</h3>
<pre><code class="language-plantuml">@startuml
|外壳播放器|
start
:参数解析;
:必要模块的初始化;
:下载颗粒;
:解析颗粒;
:下载颗粒依赖用品资源;
:初始化LuaEnv;
|交互模式|
:初始化播放模式配置;
:初始化交互方式;
|播放模式|
:读取播放模式配置文件;
:加载播放模式配置;
:加载播放模式首个场景;
:实例化播放模式对象;
:进入播放模式;
:退出播放模式;
|外壳播放器|
:退出播放器;
end
@enduml</code></pre>
<h3>播放模式关键配置信息</h3>
<h4>目录结构</h4>
<pre><code class="language-csharp">+---PlayerModeName
├─meta.json
│
├─config
│ PlayMode.confg
│
├─language
│ zh_CN.json
│
├─module
│ A.dll
│ B.dll
│
└─resource
├─scene
│ 101Player.scene.ab
│ Loading.scene.ab
│
└─wnd
xxxxWnd.ab
yyyyWnd.ab</code></pre>
<h4>Meta.confg</h4>
<pre><code class="language-json">{
"version":"1.0.0",
"name":"3DCourse",
"platform":"Windows",
"miniPlayer":"2.3.0",
"miniEngine":"2.4.0"
}</code></pre>
<h4>PlayMode.confg</h4>
<pre><code class="language-json">{
"scene": [
{
"name": "Launch",
"path": "launch_unity.assetbundle"
},
{
"name": "Loading",
"path": "loading_unity.assetbundle"
},
{
"name": "101Player",
"path": "101player_unity.assetbundle"
}
],
"playModeScript": "AAA.BBB.TDCoursePlayMode, Assembly-CSharp"
}</code></pre>
<p>```C#
interface IPlayerMode
{
void OnInit(IPlayerModeContex contex);
void OnEnter(string playModeName);
void OnExit(string playModeName);
}</p>
<p>interface IPlayerModeContex
{
///版本
String Version{get;}
///名字
String Name{get;}
///场景列表
string[] Scenes{get;}
///配置文件路径
String PlayerModePath{get;}
///硬件平台
Platform Platform{get;}
///交互方式
InteractMode InteractMode{get;}
}</p>
<pre><code>
[3D播放器示例](https://www.showdoc.com.cn/630732418816884/7836955111097332)</code></pre>