Unity 게임

(Unity) flutter unity widget 사용 후기

그린티_ 2024. 4. 11. 22:20
반응형

flutter_unity_widget | Flutter Package

 

flutter_unity_widget | Flutter package

Flutter Unity 3D widget for embedding Unity game scenes in flutter. This library now supports Unity as a Library.

pub.dev

* flutter 폴더 안의 unity 폴더를 만든 후 unityhub에서 경로에 맞게 unity 파일 생성

* unity에서 먼저 하는게 좋았었던 기억

unity

  1. Assets -> Import Package -> Custom Package
    • Flutter_Unity_Widget 패키지
  2. File -> Build Settings
    • Mono -> ll2CPP
    • 최소 API (28), 최대 API 설정 (32보다 크게)
    • ARM64, ARMv7
  3. Export
  4. Edit -> Preferences -> NDK경로 복사 -> flutter에 붙여넣기
  • 할 때 \ 두개 할 것! 아래 주소는 flutter 설정에서 쓰
    C:\Program Files\Unity\Hub\Editor\2021.3.22f1\Editor\Data\PlaybackEngines\AndroidPlayer\NDK

flutter

  1. pubspec.yaml에다가
  2. dependencies:
    flutter_unity_widget: ^2022.2.0
  3. android안의 local.properties에다가
    • ndk.dir=C:\Program Files\Unity\Hub\Editor\2021.3.22f1\Editor\Data\PlaybackEngines\AndroidPlayer\NDK
    • ndk.dir=C:\Users\USER\AppData\Local\Android\Sdk\ndk\21.3.6528147
  4. android/app/build.gradle에다가
    • android 안의 defaultConfig 안에
    • minSdkVersion - 유니티에서 설정한 최소 API (28)
      • 작성방법 - minSdkVersion 28
    • android 안에 ndkVersion = "21.3.6528147"
      • 이거는 크게 ndk버전 호환이 안될경우
  5. unityLibrary 파일의 build.gradle안의
    • 실행 하다보면 여기서 libmain.so.exe 오류가 발생할 수 있다.
    • 일단 flutter clean으로 정리하고, flutter pub get으로 업데이트 한 후 기다렸다가 실행 해보기
    • 그래도 안되면 일단 껐다가 킨 후 설정 다 되면 실행 하기
  6. 이제 아래 코드를 main.dart에 넣기
import 'package:flutter/material.dart';
import 'package:flutter_unity_widget/flutter_unity_widget.dart';

void main() {
  runApp(
    const MaterialApp(
      home: UnityDemoScreen(),
    ),
  );
}

class UnityDemoScreen extends StatefulWidget {
  const UnityDemoScreen({Key? key}) : super(key: key);

  @override
  State<UnityDemoScreen> createState() => _UnityDemoScreenState();
}

class _UnityDemoScreenState extends State<UnityDemoScreen> {
  static final GlobalKey<ScaffoldState> _scaffoldKey =
      GlobalKey<ScaffoldState>();
  UnityWidgetController? _unityWidgetController;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      body: SafeArea(
        bottom: false,
        child: WillPopScope(
          onWillPop: () async {
            // Pop the category page if Android back button is pressed.
            return true;
          },
          child: Container(
            color: Colors.yellow,
            child: UnityWidget(
              onUnityCreated: onUnityCreated,
            ),
          ),
        ),
      ),
    );
  }

  // Callback that connects the created controller to the unity controller
  void onUnityCreated(controller) {
    _unityWidgetController = controller;
  }
}
반응형