2020.07.14 10:23
不知道你是否有在app内部植入3d模型的需要,但是励志要做独立游戏的我,一直有这个想法🤤,当然这还很遥远。
因为我一直使用的ios,所以这篇帖子是介绍ios系统的详细安装使用方法,大家则需取用。
一、 下载安装 Unity
- 安装Unity Hub。下载地址image.png
申请许可证。没有购买就申请个人版,有的话请自便。🥱
UNCo1H.png- 下载unity。
选择一个适合的版本
UNFo3F.png选择iOS模块,第一次安装的话会有一个Visual Studio模块也要选上!👈🏻
UNAvlD.png
二、flutter_unity_widget 插件的使用
我这里用我新建的一个demo来演示。
在项目根目录下新建
unity
文件夹,项目结构如图:UNF1fO.png打开unity,在
项目名/unity
,也就是刚才建的那个文件夹下新建一个项目。UNmzdJ.png最初打开是这样式的👇
UNnaYn.png按图打开Build Setting
- 点击Add Open Scenes
- 选择iOS
- 点击Switch Platform
点击左下角Player Setting
UNYXyd.png- Player Setting中
看IOS模块下Target SDK是否对应正确,真机就选Device SDK,虚拟机就选Simulator SDK
UNdZgU.png
- 添加文件包
- 将插件目录下的下边几个文件复制到新建的unity项目的Assets目录下。
- Editor
- JsonDotNet
- link.xml
- UnityMessageManager.cs
- 相关文件我已打包好放在微信公众号了,需要的自行取用
- 微信搜索公众号“乔悟空”,或者扫描下方二维码
- 回复“flutter_unity_widget”或者“unity”
即可获取
UNRnKI.png
添加之后的文件目录是这样的:
UN209H.png
- 导出unity项目
新建一个小正方体作为案例
UNRBIU.png- 简单调整后导出
- 点击顶部导航栏中
FLutter/Export IOS(版本号)
UNWf6s.png - 等待完成后,在
项目名/ios/
目录下就会多出一个文件夹UntiyExport
,这表示我们导出成功了。
- 点击顶部导航栏中
- 在Xcode中进行配置
- 用vscode打开项目,或者打开终端进入项目目录下
- 运行
open ./ios/Runner.xcworkspace
- 在Xcode左侧空白处右键选择
Add Files to "Runner"
UNfTKA.png - 在弹出的窗口中,选择第5步中导出的
UnityExport
文件夹下的Unity-iPhone.xcodeproj
导入image.png - 导入后点击
Unity-iPhone/Data
,将右侧Target Membership
选中为UnityFramework
image.png 修改Target为12.0以上版本
image.png- 登陆Apple开发者账号,修改包名等基本操作不在赘述
- 在
Runner/Runner/Info.plist
文件中添加io.flutter.embedded_views_preview
字段,并设置为Boolean YES,保存image.png - 在
Runner/Runner/AppDelegate.swift
文件中第十行添加InitArgs(CommandLine.argc, CommandLine.unsafeArgv)
字段,保存image.png - 在
Runner/Runner/Runner-Bridging-Header.h
文件中第二行添加#import "UnityUtils.h"
,保存image.png - 在
Runner/General
选项卡下,添加框架UnityFramework.framework
image.png
- Flutter项目中进行配置
- 项目根目录
pubspec.yaml
文件中添加flutter_unity_widget: ^0.1.6+5
image.png - 将
lib/main.dart
文件内容修改为以下内容
import 'package:flutter/material.dart';
import 'package:flutter_unity_widget/flutter_unity_widget.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State {
static final GlobalKey _scaffoldKey =
GlobalKey();
UnityWidgetController _unityWidgetController;
double _sliderValue = 0.0;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
key: _scaffoldKey,
appBar: AppBar(
title: const Text('Unity Flutter Demo'),
),
body: Card(
margin: const EdgeInsets.all(8),
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
child: UnityWidget(
onUnityViewCreated: onUnityCreated,
isARScene: false,
onUnityMessage: onUnityMessage,
),
),
),
);
}
// Communication from Unity to Flutter
void onUnityMessage(controller, message) {
print('Received message from unity: ${message.toString()}');
}
// Callback that connects the created controller to the unity controller
void onUnityCreated(controller) {
this._unityWidgetController = controller;
}
}
- flutter run 大功告成
总结
按照我的办法,你是否成功完成flutter_unity_widget插件的初步使用了呢?如果还有什么疑问,欢迎关注“乔悟空”公众号,加入flutter讨论群进行求助哦!欢迎你的加入。

微信公众号二维码.png