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