Wikitude SDK 8.6: HoloLens + Flutter Plugin + Geo AR for Unity After another productive product improvement cycle, the Wikitude team is excited to present SDK version 8.6. The update includes our powerful – now product ready – HoloLens AR package, introduces support for Flutter, adds Geo-AR for Unity users, and offers further performance. Flutter unity 3D widget for embedding unity in flutter. Now you can make awesome gamified features of your app in Unity and get it rendered in a Flutter app both in fullscreen and embeddable mode. Works great on Android, iPad OS and iOS.
Demonstrates how to use the flutter_unity_widget plugin with Unity3D ARKIT using the Unity Foundation Demo.
Run the sample on Android
- Open the
unity
project and build it: Menu -> Flutter -> Export Android - Copy
android/UnityExport/libs/unity-classes.jar
toandroid/unity-classes/unity-classes.jar
and overwrite the existing file. You only need to do this each time you use a different Unity version. flutter run
Run the sample on iOS
Open the
unity
project and build it: Menu -> Flutter -> Export iOSBe sure you use at least Unity version 2019.3 or up.
open ios/Runner.xcworkspace (workspace!, not the project) in Xcode and add the exported project in the workspace root (with a right click in the Navigator, not on an item -> Add Files to “Runner” -> add the UnityExport/Unity-Iphone.xcodeproj file
Select the Unity-iPhone/Data folder and change the Target Membership for Data folder to UnityFramework
flutter run
A Flutter plugin for embedding Unity projects in Flutter projects.
Both Android and iOS are supported.
Usage #
To use this plugin, add flutter_unity
as a dependency in your pubspec.yaml file.
Example #
Refer to the example project and the included Unity project.
Testing #
To test this plugin, do the following:
- Run
git clone https://github.com/Glartek/flutter-unity.git
to create a local copy of flutter-unity. - Open flutter-unity in Android Studio.
Android
- Connect your Android device and run the project.
iOS
- Configure the example project and the included Unity project.
- Connect your iOS device and run the project.
Configuring your Unity project #
Android
- Go to File > Build Settings... to open the Build Settings window.
- Select Android and click Switch Platform.
- Click Add Open Scenes.
- Check Export Project.
- Click Player Settings... to open the Player Settings window.
- In the Player Settings window, configure the following:
Setting | Value |
---|---|
Resolution and Presentation > Start in fullscreen mode | No |
Other Settings > Rendering > Graphics APIs | OpenGLES3 |
Other Settings > Configuration > Scripting Backend | IL2CPP |
Other Settings > Configuration > Target Architectures | ARMv7, ARM64 |
- Close the Player Settings window.
- Click Export and save as
unityExport
.
iOS
- Go to File > Build Settings... to open the Build Settings window.
- Select iOS and click Switch Platform.
- Click Add Open Scenes.
- Click Build and save as
UnityProject
.
Configuring your Flutter project #
Android
- Copy the
unityExport
folder to<your_flutter_project>/android/unityExport
. - Run
flutter pub run flutter_unity:unity_export_transmogrify
. - Open
<your_flutter_project>/android/unityExport/build.gradle
and check ifbuildTypes { profile {} }
is present. If not, add the following:
Refer to the example project's unityExport/build.gradle.
- Open
<your_flutter_project>/android/build.gradle
and, underallprojects { repositories {} }
, add the following:
Refer to the example project's build.gradle.
- Open
<your_flutter_project>/android/settings.gradle
and add the following:
Refer to the example project's settings.gradle.
- Open
<your_flutter_project>/android/app/src/main/AndroidManifest.xml
and add the following:
Refer to the example project's AndroidManifest.xml.
Steps 1, 2 and 3 must be repeated for every new build of the Unity project.
iOS
- Copy the
UnityProject
folder to<your_flutter_project>/ios/UnityProject
and open<your_flutter_project>/ios/Runner.xcworkspace
in Xcode. - Go to File > Add Files to 'Runner'..., and add
<your_flutter_project>/ios/UnityProject/Unity-iPhone.xcodeproj
. - Select
Unity-iPhone/Data
, and, in the Inspectors pane, set the Target Membership to UnityFramework. - Select
Unity-iPhone
, select PROJECT : Unity-iPhone, and, in the Build Settings tab, configure the following:
Setting | Value |
---|---|
Build Options > Enable Bitcode | No |
Linking > Other Linker Flags | -Wl,-U,_FlutterUnityPluginOnMessage |
- Select
Runner
, select TARGETS : Runner, and, in the General tab, configure the following:
Setting | Value | ||||
---|---|---|---|---|---|
Frameworks, Libraries, and Embedded Content |
|
- Select
Runner/Runner/Info.plist
, and configure the following:
Key | Type | Value |
---|---|---|
io.flutter.embedded_views_preview | Boolean | YES |
Steps 1, 3 and 4 must be repeated for every new build of the Unity project.
Exchanging messages between Flutter and Unity #
Flutter
To send a message, define the onCreated
callback in your UnityView
widget, and use the send
method from the received controller
.
To receive a message, define the onMessage
callback in your UnityView
widget.
Unity
To send and receive messages, include FlutterUnityPlugin.cs in your project, and use the Messages.Send
and Messages.Receive
methods.
A Message
object has the following members:
- id (
int
)
A non-negative number representing the source view when receiving a message, and the destination view when sending a message. When sending a message, it can also be set to a negative number, indicating that the message is intended for any existing view.
- data (
string
)
The actual message.
Flutter Unity Software
Refer to the included Unity project's Rotate.cs.