C++ 颤振统一通信问题

C++ 颤振统一通信问题,c++,flutter,unity3d,dart,arcore,C++,Flutter,Unity3d,Dart,Arcore,我是unity的新手,我有一个场景,作为我工作的一部分,我必须集成到一个颤振应用程序中,一个AR场景。我成功地连接了现场,但问题是颤振和团结之间的沟通不起作用。onUnitySceneLoaded和ONUnitySessage不工作。只有onUnityCreated正在工作并显示打印。据我所知,我需要在unity场景中添加一些代码,以使其消息被Flatter和the识别。因此,让我们忽略这一点,了解并调查onUnitySceneLoaded不起作用的原因。它不应该自动开箱即用吗。该功能将在uni

我是unity的新手,我有一个场景,作为我工作的一部分,我必须集成到一个颤振应用程序中,一个AR场景。我成功地连接了现场,但问题是颤振和团结之间的沟通不起作用。onUnitySceneLoaded和ONUnitySessage不工作。只有onUnityCreated正在工作并显示打印。据我所知,我需要在unity场景中添加一些代码,以使其消息被Flatter和the识别。因此,让我们忽略这一点,了解并调查onUnitySceneLoaded不起作用的原因。它不应该自动开箱即用吗。该功能将在unity场景出现后直接工作,对吗? 以下是我在unity屏幕上的全部颤振代码:

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

class UnityMainScene extends StatefulWidget {
  UnityMainScene({Key key}) : super(key: key);

  @override
  _UnityMainSceneState createState() => _UnityMainSceneState();
}

class _UnityMainSceneState extends State<UnityMainScene> {
  UnityWidgetController _unityWidgetController;

  @override
  void initState() {
    super.initState();
  }

  

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(
              begin: Alignment.topLeft,
              end: Alignment(0.8, 0.0),
              colors: [
                const Color.fromRGBO(109, 180, 194, 1),
                const Color.fromRGBO(83, 116, 234, 1),
              ],
            ),
          ),
          child: Column(
            children: [
              Expanded(
                child: Container(
                  clipBehavior: Clip.antiAlias,
                  width: MediaQuery.of(context).size.width,
                  height: MediaQuery.of(context).size.height,
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.only(
                        bottomLeft: Radius.circular(50),
                        bottomRight: Radius.circular(50)),
                  ),
                  child: UnityWidget(
                    onUnityCreated: _onUnityCreated,
                    isARScene: true,
                    onUnityMessage: onUnityMessage,
                    onUnitySceneLoaded: onUnitySceneLoaded,
                    fullscreen: false,
                  ),
                ),
              ),
              Container(
                padding: const EdgeInsets.all(20.0),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceAround,
                  children: <Widget>[
                    GestureDetector(
                      child: Image.asset('assets/images/wallet.png'),
                      onTap: () => Navigator.pop(context),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
      ],
    );
  }

  void onUnityMessage(message) {
    print('unity message recieved by anass');
    print('Received message from unity: ${message.toString()}');
  }

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

  // Callback that connects the created controller to the unity controller
  void _onUnityCreated(controller) {
    print('unity scene created by anass');
    this._unityWidgetController = controller;
  }
}

好的,调用了onUnityCreated函数,对吗

然后将控制器分配给实例变量,以便调用该变量向应用程序的Unity部分发送消息。我现在知道你为什么需要onSceneLoaded,因为你的问题是关于沟通的,所以我现在不处理这个问题

第一部分 为了从弗利特向统一发出信息,你需要打电话

_unityWidgetController.postMessage(
    'SomeGameObjectName', 'FunctionName', 'Hello world!');
在实例变量上的颤振项目中。然后,在Unity项目中,您需要有一个具有特定名称的游戏对象,例如SomeGameObjectName,并且该游戏对象必须有一个带有以下签名的函数的脚本

public void FunctionName(string args)
{
    Debug.Log($"Received flutter message: {args}");
    // DO STUFF (WITH ARGS)
}
这会打印出来

你好,世界

在你的控制台里,来自统一

第二部分 现在,为了沟通,从团结到振翅

在您希望调用消息的位置,将UnityMessageManager组件添加到您的游戏对象中。如果您正确遵循,则该类随插件一起提供

然后,在连接UnityMessageManager的情况下,将以下代码放入游戏对象的Unity C脚本中

private UnityMessageManager Manager
{
    get { return GetComponent<UnityMessageManager>(); }
}

Manager.SendMessageToFlutter(message);
这将向flatter发送一条消息,并在您的onUnityMessagemessage函数中调用