Tôi đang cố gắng để phát triển công nghệ Unreal Engine 4 plugin cho Android camera API 2.Sử dụng APL (Ngôn ngữ lập trình Android) để làm cho Plugin Android để Unreal Engine 4
Như tôi đã có thể đọc trên các diễn đàn Unreal Engine, có hai khả năng để tạo plugin cho Android.
Đầu tiên, bao gồm sửa đổi dự án cơ sở Android UE (GameActivity).
Thứ hai là một plugin độc lập, mang đến tính di động để thêm các plugin trong bất kỳ dự án nào.
Theo điều này post, có thể tạo một plugin độc lập Api1 của máy ảnh, sử dụng tệp APL.xml để thêm mã java.
Nhưng tôi nghĩ rằng nó rất hạn chế đối với hoạt động Trò chơi, như mã bên dưới.
<?xml version="1.0" encoding="utf-8"?>
<!--ARToolKit plugin additions-->
<root xmlns:android="http://schemas.android.com/apk/res/android">
<!-- init section is always evaluated once per architecture -->
<init>
<log text="AndroidCamera init"/>
</init>
<androidManifestUpdates>
<addPermission android:name="android.permission.CAMERA"/>
<addFeature android:name="android.hardware.camera"/>
<addFeature android:name="android.hardware.camera.autofocus"/>
</androidManifestUpdates>
<!-- optional additions to the GameActivity imports in GameActivity.java -->
<gameActivityImportAdditions>
<insert>
import android.widget.Toast;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PreviewCallback;
import android.graphics.SurfaceTexture;
import android.graphics.ImageFormat;
import android.graphics.PixelFormat;
import java.util.List;
import java.io.IOException;
import android.util.Log;
</insert>
</gameActivityImportAdditions>
<gameActivityClassAdditions>
<insert>
static String msg = "yes i am a rock!";
SurfaceTexture surfaceTexture;
Camera camera;
public native boolean nativeGetFrameData(int frameWidth, int frameHeight, byte[] data);
public void AndroidThunkJava_Toast()
{
try
{
_activity.runOnUiThread(new Runnable()
{
public void run()
{
Toast.makeText(_activity.getApplicationContext(), "cam o yeah!", Toast.LENGTH_SHORT).show();
}
});
}
catch (Exception e)
{
Log.debug("Toast failed with exception " + e.getMessage());
}
}
public void AndroidThunkJava_startCamera()
{
surfaceTexture = new SurfaceTexture(10);
surfaceTexture.setDefaultBufferSize(320,240);
camera = Camera.open();
try {
camera.setPreviewTexture(surfaceTexture);
} catch (IOException t) {
android.util.Log.e("ARToolKitLog", "Cannot set preview texture target!", t);
}
Parameters cameraParam = camera.getParameters();
cameraParam.setPreviewFormat(ImageFormat.NV21);
cameraParam.setPreviewSize(320, 240);
camera.setParameters(cameraParam);
camera.setPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
int Height = camera.getParameters().getPreviewSize().height;
int Width = camera.getParameters().getPreviewSize().width;
nativeGetFrameData(Width, Height, data);
}
});
camera.startPreview();
}
public void AndroidThunkJava_stopCamera()
{
if (camera != null)
{
camera.stopPreview();
camera.release();
camera = null;
}
}
</insert>
</gameActivityClassAdditions>
<!-- optional additions to GameActivity onCreate in GameActivity.java -->
<gameActivityOnCreateAdditions>
<insert>
//Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
//AndroidThunkJava_Toast();
</insert>
</gameActivityOnCreateAdditions>
</root>
Vì vậy, câu hỏi của tôi là:
Đây có phải là cách duy nhất để thực hiện một plugin độc lập cho Unreal Engine 4?
Có thẻ XML để thêm các lớp tùy chỉnh trong tệp APL này không?