Notes: - 本文档为URAS(非工程隔离)的开发流程介绍,和关键操作文字版说明。URAS Demo Package 已上线,可查看 URAS Demo Package - URAS(非工程隔离版)支持 Asset Bundle 和 Addressable, 请使用最新版团结引擎,可查看 AssetBundle & Addressable in URAS
工作流程说明:单进程模式下,Editor 打包出的 Android Studio 工程或 APK 同时包括 Client 和 Service
点击File >> Build Settings,打开面板
切换至HMI Android平台
Export as Render Service中,选择Single Process Mode后,关闭窗口
若有Canvas,Screen Space - Overlay模式的Canvas的 Target Display 需要与对应相机的 Target Display 参数保持一致。
Touch事件处理的sample code:
void HandleTouch()
{
for (int i = 0; i < 10; i++)
{
#if ENABLE_INPUT_SYSTEM
if(i < Touch.activeTouches.Count)
{
var touch = Touch.activeTouches[i];
Vector3 touchPos = touch.screenPosition;
Debug.Log($"Get touch position {touchPos} at display {touch.displayIndex}");
}
#else
if (i < Input.touchCount)
{
Touch touch = Input.GetTouch(i);
Vector3 touchPos = touch.position;
Debug.Log($"Get touch position {touchPos} at display {touch.displayIndex}");
}
#endif
}
}
将 Tuanjie Editor 导出的 Android Studio 工程文件导入 Android Studio
在 XML 文件中添加 Tuanjie View窗口,以展示 3D 场景,可对工程中的XML进行如下配置:
<com.unity3d.renderservice.client.TuanjieView
android:id="@+id/tuanjieView1"
android:layout_width="match_parent"
android:layout_height="275dp"
app:tuanjieViewType="SurfaceView"
app:tuanjieDisplay="1"
app:tuanjieRenderFrameInterval="1"
app:tuanjieServicePkgName="com.tuanjie.renderservice" />
tuanjieView 既可以通过代码动态添加,也可以在layout.xml中配置
mTuanjieRenderService.c2sSendMessage("Cude","ChangeColor","Yellow");
启动渲染服务可以调用 ensureStarted 方法
停止渲染服务调用 ensureStopped 方法
【Sample Code】:Android Studio 运行 app 之后,点击页面上的 start render service按钮,调用 ensureStarted 开启服务,等待服务启动成功后可出现画面另外两个按钮分别对应增加/减少帧渲染间隔
mStartServiceBtn =findViewById(R.id.startServiceBtn);
mStartServiceBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onclick(View view) {
Log.d(LOG_TAG,msg:"onClick To Start TuanjieRenderService");
mTuanjieRenderService.ensureStarted();
}
});
mStopServiceBtn = findViewById(R.id.stopServiceBtn);
mStopServiceBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onclick(View view) {
Log.d(LOG_TAG, msg: "onclick To Stop TuanjieRenderService");
mTuanjieRenderService.ensureStopped();
}
});
开发完成后,可通过Build >> Build Bundle(s)/APK(s) >> Build APK(s) 正常打包APK文件
工作流程说明:跨进程模式下 Tuanjie editor 只会打包 Service,Client 需要在安卓原生 App 基础上导入 RenderServiceLibrary 作为 Library,Service 和 Client 之间通过 aidl 进行通信
若有Canvas,Screen Space - Overlay模式的Canvas的 Target Display 需要与对应相机的 Target Display 参数保持一致。
Touch事件处理的sample code:
void HandleTouch()
{
for (int i = 0; i < 10; i++)
{
#if ENABLE_INPUT_SYSTEM
if(i < Touch.activeTouches.Count)
{
var touch = Touch.activeTouches[i];
Vector3 touchPos = touch.screenPosition;
Debug.Log($"Get touch position {touchPos} at display {touch.displayIndex}");
}
#else
if (i < Input.touchCount)
{
Touch touch = Input.GetTouch(i);
Vector3 touchPos = touch.position;
Debug.Log($"Get touch position {touchPos} at display {touch.displayIndex}");
}
#endif
}
}
同单进程
使用 Android Studio,将 RenderServiceLibrary 包导入 Android Studio 工程
在原生 app 的 build gradle 中添加 implementation project (’:RenderServiceLibrary‘)
,路径根据需求可修改
implementation project(":renderServiceLibrary")
在 AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
TuanjieView 创建时需要指定 service 包名进行绑定
xml
<com.unity3d.renderservice.client.TuanjieView
android:id="@+id/tuanjieView1"
android:layout_width="match_parent"
android:layout_height="275dp"
app:tuanjieViewType="SurfaceView"
app:tuanjieDisplay="1"
app:tuanjieRenderFrameInterval="1"
app:tuanjieServicePkgName="com.tuanjie.renderservice" />
启动渲染服务可以调用 ensureStarted 方法
停止渲染服务调用 ensureStopped 方法
【Sample Code】:Android Studio 运行 app 之后,点击页面上的 start render service按钮,调用 ensureStarted 开启服务,等待服务启动成功后可出现画面另外两个按钮分别对应增加/减少帧渲染间隔
mStartServiceBtn =findViewById(R.id.startServiceBtn);
mStartServiceBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onclick(View view) {
Log.d(LOG_TAG,msg:"onClick To Start TuanjieRenderService");
mTuanjieRenderService.ensureStarted();
}
});
mStopServiceBtn = findViewById(R.id.stopServiceBtn);
mStopServiceBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onclick(View view) {
Log.d(LOG_TAG, msg: "onclick To Stop TuanjieRenderService");
mTuanjieRenderService.ensureStopped();
}
});
同单进程
||
|
| :- | :- |