国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flutter通過flutter_unity_widget嵌入Unity3D

這篇具有很好參考價值的文章主要介紹了Flutter通過flutter_unity_widget嵌入Unity3D。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現(xiàn)方案:采用flutter開源組件flutter_unity_widget

環(huán)境搭建Unity

1、創(chuàng)建flutter項目flutter_unity_demo

2、在pubspec.paml文件dependencies添加flutter_unity_widget: ^2022.2.0,執(zhí)行Pub?get導(dǎo)入組件

3、在工程目錄下創(chuàng)建unity文件夾

4、在unity目錄下創(chuàng)建unity_demo的3D工程

5、下載flutter_unity_widget提供的unity插件

在unity_demo項目Assets右鍵導(dǎo)入(import?package)插件unitypackages(注:我導(dǎo)入的是FlutterUnityIntegration-v4-WithDemo)會得到以下目錄,這個時候Flutter打包的方式如下圖

flutter unity,unity,flutter,android,iosflutter unity,unity,flutter,android,ios

7、修改Assets/FlutterUnityIntegration/Editor/Build.cs文件

DoBuildAndroid方法:
var options = BuildOptions.AcceptExternalModificationsToPlayer;

替換為:

var options = BuildOptions.AllowDebugging;

EditorUserBuildSettings.exportAsGoogleAndroidProject = true;

BuildIOS?方法:

var options = BuildOptions.AcceptExternalModificationsToPlayer;

替換為:

var options = BuildOptions.AllowDebugging;

8、為了方便測試創(chuàng)建Cube,綁定Assets/FlutterUnityIntegration/Demo/Rotote.cs腳本并調(diào)整好攝像頭對準(zhǔn)新創(chuàng)建的Cube

Flutter加載unity

  1. 創(chuàng)建UnityPage頁面實現(xiàn)以下代碼

import 'package:flutter/material.dart';
import 'package:flutter_unity_widget/flutter_unity_widget.dart';

class UnityPage extends StatefulWidget {
??const UnityPage({super.key});

??@override
??_UnityPageState createState() => _UnityPageState();
}

class _UnityPageState extends State<UnityPage> {
??UnityWidgetController? _unityWidgetController;
??double _sliderValue = 0.0;

??@override
??void initState() {
????// TODO: implement initState
????super.initState();
??}

??@override
??void dispose() {
????// TODO: implement dispose
????_unityWidgetController?.dispose();
????super.dispose();
??}

??@override
??Widget build(BuildContext context) {
????// TODO: implement build
????return Scaffold(
??????appBar: AppBar(
????????title: const Text("this Unity"),
??????),
??????body: Container(
????????child: Stack(
??????????children: [
????????????UnityWidget(
????????????????onUnityCreated: onUnityCreated,
????????????????onUnityMessage: onUnityMessage,
????????????????onUnitySceneLoaded: onUnitySceneLoaded,
????????????????fullscreen: false),
????????????Positioned(
????????????????bottom: 10,
????????????????left: 15,
????????????????right: 15,
????????????????child: Container(
??????????????????width: MediaQuery.of(context).size.width,
??????????????????child: Column(
????????????????????children: [
??????????????????????Padding(
????????????????????????padding: const EdgeInsets.all(8.0),
????????????????????????child: Slider(
??????????????????????????onChanged: (value) {
????????????????????????????setState(() {
??????????????????????????????_sliderValue = value;
????????????????????????????});
????????????????????????????setRotationSpeed(value.toString());
??????????????????????????},
??????????????????????????value: _sliderValue,
??????????????????????????min: 0,
??????????????????????????max: 20,
????????????????????????),
??????????????????????),
??????????????????????Row(
????????????????????????mainAxisAlignment: MainAxisAlignment.spaceBetween,
????????????????????????children: [
??????????????????????????MaterialButton(
????????????????????????????onPressed: () {
??????????????????????????????_unityWidgetController!.pause();
????????????????????????????},
????????????????????????????child: const Text("Pause"),
??????????????????????????),
??????????????????????????// Expanded(child: SizedBox()),
??????????????????????????MaterialButton(
????????????????????????????onPressed: () {
??????????????????????????????_unityWidgetController!.resume();
????????????????????????????},
????????????????????????????child: const Text("Resume"),
??????????????????????????),
????????????????????????],
??????????????????????),
????????????????????],
??????????????????),
????????????????)),
??????????],
????????),
??????),
????);
??}

??void setRotationSpeed(String speed) {
????//這里需要看看給3d模型綁定的腳本
????_unityWidgetController!.postMessage(
??????'Cube',
??????'SetRotationSpeed',
??????speed,
????);
??}

??void onUnitySceneLoaded(scene) {
????print('Received scene loaded from unity: ${scene.name}');
????print('Received scene loaded from unity buildIndex: ${scene.buildIndex}');
??}

??void onUnityMessage(message) {}

??void onUnityCreated(controller) {
????this._unityWidgetController = controller;
??}
}

2、在main.dart修改flutter啟動頁面為UnityPage

3、等待原生集成unity后運(yùn)行

iOS集成

1、打開unity項目?file?-?Build?Setings選擇iOS(iOS打包插件沒安裝點擊右側(cè)按鈕安裝)設(shè)置需要的配置信息

flutter unity,unity,flutter,android,ios

?flutter unity,unity,flutter,android,ios

  1. 使用flutter?-?export?ios生成iOS工程文件,文件會自動創(chuàng)建到flutter項目下ios文件夾內(nèi)

flutter unity,unity,flutter,android,ios

?flutter unity,unity,flutter,android,ios

  1. 打開flutter項目內(nèi)iOS工程Runner.xcworkspace,在終端cd?到flutter項目內(nèi)iOS目錄下。執(zhí)行pod?install?導(dǎo)入flutter引用的組件

flutter unity,unity,flutter,android,ios

導(dǎo)入UnityLibrary工程,在Runner工程目錄下方空白右鍵Add?Files?to?“Runner”,選擇UnityLibrary/Unity-iPhone.xcodeproj,點擊Add添加,會得到如下工程目錄結(jié)構(gòu)

flutter unity,unity,flutter,android,ios

5、綁定一下Unity-iPhone?Data資源,編譯一下Unity-iPhone

flutter unity,unity,flutter,android,ios

6、在Runner工程中添加UnityFramework.framework

flutter unity,unity,flutter,android,ios

7、通過flutter_unity_widget初始化unity項目

swift:打開ios/Runner/AppDelegate.swift?添加一下代碼

???? import UIKit

?? ? import Flutter

+? ? import flutter_unity_widget

?? ? @UIApplicationMain

?? ? @objc class AppDelegate: FlutterAppDelegate {

?? ? ? ? override func application(

?? ? ? ? ? ? _ application: UIApplication,

?? ? ? ? ? ? didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?

?? ? ? ? ) -> Bool {

+? ? ? ? ? ? InitUnityIntegrationWithOptions(argc: CommandLine.argc, argv: CommandLine.unsafeArgv, launchOptions)

?? ? ? ? ? ? GeneratedPluginRegistrant.register(with: self)

?? ? ? ? ? ? return super.application(application, didFinishLaunchingWithOptions: launchOptions)

?? ? ? ? }

?? ? }

Object-C:打開ios/Runner/main.m?添加一下代碼

+ ???#import "flutter_unity_widget.swift.h"

?????int main(int argc, char * argv[]) {

??????????@autoreleasepool {

+ ????????????InitUnityIntegration(argc, argv);

??????????????return?UIApplicationMain(argc,argv,nil, NSStringFromClass([AppDelegate class]));

??????????}

?????}

8、在Runner項目中ios/Runner/Info.plist添加flutterH5橋梁

<dict>

+ ???????<key>io.flutter.embedded_views_preview</key>

+ ???????<string>YES</string>

</dict>

運(yùn)行flutter至iOS得到以下界面:

flutter unity,unity,flutter,android,ios

Android集成

1、打開unity項目?file?-?Build?Setings選擇Android(Android打包插件沒安裝點擊右側(cè)按鈕安裝)設(shè)置需要的配置信息

flutter unity,unity,flutter,android,ios

flutter unity,unity,flutter,android,ios

2、使用flutter?-?export?Android生成Android工程文件,文件會自動創(chuàng)建到flutter項目下android文件夾內(nèi),也會自動導(dǎo)入Android項目

flutter unity,unity,flutter,android,ios

?flutter unity,unity,flutter,android,ios

3、配置NDK信息打開android/local.properties添加ndk.dir=/Applications/Unity/Hub/Editor/2020.3.19f1/PlaybackEngines/AndroidPlayer/NDK??注:2020.3.19f1替換為自己安裝的unity版本號

  1. 打開android/app/build.gradle增加以下代碼

?dependencies {

+ ???????implementation project(':unityLibrary')

?????}

?????buildTypes {

?????????release {

?????????????signingConfig signingConfigs.debug

?????????}

+ ???????debug {

+ ???????????signingConfig signingConfigs.debug

+ ???????}

+ ???????profile {

+ ???????????signingConfig signingConfigs.debug

+ ???????}

+ ???????innerTest {

+ ???????????matchingFallbacks = ['debug', 'release']

+ ???????}

}

  1. 打開gradle.properties添加:

unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist

注:運(yùn)行遇到minSdkVersion版本報錯,修改/flutter/packages/flutter_tools/gradle/flutter.gradle里的minSdkVersion

運(yùn)行Flutter到Android設(shè)備得到:

flutter unity,unity,flutter,android,ios文章來源地址http://www.zghlxwxcb.cn/news/detail-673259.html

到了這里,關(guān)于Flutter通過flutter_unity_widget嵌入Unity3D的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Flutter Widget 生命周期 & key探究

    Flutter Widget 生命周期 & key探究

    在Flutter中,一切皆是Widget(組件),Widget的功能是“描述一個UI元素的配置數(shù)據(jù)”,它就是說,Widget其實并不是表示最終繪制在設(shè)備屏幕上的顯示元素,它只是描述顯示元素的一個配置數(shù)據(jù)。 實際上,F(xiàn)lutter中真正代表屏幕上顯示元素的類是 Element,也就是說Widget 只是描述

    2024年02月08日
    瀏覽(25)
  • 【Flutter 工程】005-代碼分離實踐:flutter_hooks & functional_widget

    【Flutter 工程】005-代碼分離實踐:flutter_hooks & functional_widget

    在Flutter開發(fā)中,“嵌套地獄”(Nesting Hell)是指在構(gòu)建復(fù)雜的UI布局時,由于多層嵌套的組件結(jié)構(gòu),代碼變得冗長、難以維護(hù)和理解的情況。 Flutter使用組件樹的方式來構(gòu)建用戶界面,每個UI元素都是一個組件,可以包含其他組件。在某些情況下,特別是當(dāng)需要實現(xiàn)復(fù)雜的布局

    2024年02月06日
    瀏覽(25)
  • Flutter源碼分析筆記:Widget類源碼分析

    Flutter源碼分析筆記:Widget類源碼分析

    Flutter源碼分析筆記 Widget類源碼分析 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.net Email: 291148484@163.com. Shenzhen China Address of this article: https://blog.csdn.net/qq_28550263/article/details/132259681 【介紹】:本文記錄閱讀與分析Flutter源碼 - Widget類源碼分析。 Widget類是Flu

    2024年02月12日
    瀏覽(27)
  • flutter開發(fā)實戰(zhàn)-父子Widget組件調(diào)用方法

    flutter開發(fā)實戰(zhàn)-父子Widget組件調(diào)用方法

    flutter開發(fā)實戰(zhàn)-父子Widget組件調(diào)用方法 在最近開發(fā)中遇到了需要父組件調(diào)用子組件方法,子組件調(diào)用父組件的方法。這里記錄一下方案。 父組件使用globalKey.currentState調(diào)用子組件具體方法,子組件通過方法回調(diào)callback方法調(diào)用父組件的方法。 例如示例中的 例如父組件 父組件使

    2024年02月15日
    瀏覽(29)
  • Flutter Widget Life Cycle 組件生命周期

    Flutter Widget Life Cycle 組件生命周期

    了解 widget 生命周期,對我們開發(fā)組件還是很重要的。 今天會把無狀態(tài)、有狀態(tài)組件的幾個生命周期函數(shù)一起過下。 原文 https://ducafecat.com/blog/flutter-widget-life-cycle https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html 無狀態(tài)組件

    2024年02月15日
    瀏覽(28)
  • flutter開發(fā)實戰(zhàn)-獲取Widget的大小及位置

    flutter開發(fā)實戰(zhàn)-獲取Widget的大小及位置 最近開發(fā)過程中需要獲取Widget的大小及位置,這時候就需要使用到了GlobalKey了和WidgetsBinding.instance.addPostFrameCallback了 該函數(shù)的作用: flutter中的界面組件Widget每一幀渲染在界面上,addPostFrameCallback功能是在每一幀繪制完成后再回調(diào)執(zhí)行自定

    2024年02月13日
    瀏覽(23)
  • [Flutter]理解Widget-Key的作用

    [Flutter]理解Widget-Key的作用

    運(yùn)行結(jié)果如下圖所示: ???????? ? ? /// 運(yùn)行并依次點擊刪除兩次, 根據(jù)情況可以發(fā)現(xiàn)其更新結(jié)果: /// (1) StatelessWidget不管是否設(shè)置了Key或者前后Key是否相同, 其背景色都沒有復(fù)用; /// (2) StatefulWidget未設(shè)置Key的時候, 其背景色不變, 但是數(shù)據(jù)向上移了; /// (3) StatefulWidget設(shè)

    2024年02月11日
    瀏覽(21)
  • flutter開發(fā)實戰(zhàn)-RepaintBoundary實現(xiàn)Widget截圖功能

    flutter開發(fā)實戰(zhàn)-RepaintBoundary實現(xiàn)Widget截圖功能

    flutter開發(fā)實戰(zhàn)-RepaintBoundary實現(xiàn)Widget截圖功能 在開發(fā)中,遇到需要使用截圖,像iOS可以截圖UIView獲取到UIImage,在flutter中可以使用RepaintBoundary實現(xiàn)截圖功能 相機(jī)拍攝的圖片: RepaintBoundary截圖后的圖片 RepaintBoundary是繪制邊界。 如果CustomPaint有子節(jié)點,為了避免子節(jié)點不必要的

    2024年02月15日
    瀏覽(33)
  • flutter開發(fā)實戰(zhàn)-BackdropFilter高斯模糊子Widget控件

    flutter開發(fā)實戰(zhàn)-BackdropFilter高斯模糊子Widget。 最近開發(fā)過程中遇到需要將控件進(jìn)行模糊,比如iOS的effect的模糊效果。那在flutter中就需要用到了BackdropFilter BackdropFilter屬性定義 其中ImageFilter的filter是必須傳的,child為子控件。 ImageFilter一下兩種兩種構(gòu)造方法 設(shè)置背景高斯模糊

    2024年02月14日
    瀏覽(21)
  • flutter開發(fā)實戰(zhàn)-自定義Switch開關(guān)控件Widget

    flutter開發(fā)實戰(zhàn)-自定義Switch開關(guān)控件Widget

    flutter開發(fā)實戰(zhàn)-自定義Switch開關(guān)控件 在flutter中實現(xiàn)自定義Switch,主要實現(xiàn)類似IOS的UISwitch樣式的開關(guān)控件 實現(xiàn)自定義Switch的Widget,主要實現(xiàn)交織動畫。 交織動畫 有些時候我們可能會需要一些復(fù)雜的動畫,這些動畫可能由一個動畫序列或重疊的動畫組成。一個動畫組合在不同

    2024年02月13日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包