situm_flutter_unity
A Flutter plugin for embedding Unity projects in Flutter projects.
Both Android and iOS are supported.
Note
This is a fork of https://github.com/Glartek/flutter-unity.
Usage
To use this plugin, add situm_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/situmtech/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 situm_flutter_unity:unity_export_transmogrify
. - Open
<your_flutter_project>/android/unityExport/build.gradle
and check ifbuildTypes { profile {} }
is present. If not, add the following:
buildTypes {
profile {}
}
Refer to the example project's unityExport/build.gradle.
- Open
<your_flutter_project>/android/build.gradle
and, underallprojects { repositories {} }
, add the following:
flatDir {
dirs "${project(':unityExport').projectDir}/libs"
}
Refer to the example project's build.gradle.
- Open
<your_flutter_project>/android/settings.gradle
and add the following:
include ':unityExport'
Refer to the example project's settings.gradle.
- Open
<your_flutter_project>/android/app/src/main/AndroidManifest.xml
and add the following:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
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.
Refer to the included Unity project's Rotate.cs.