Notifications
bg
Invite Others
Search
More
DISCUSSION
MEMBERS
Search
Group Info
Category
Community
Description
Anything about UIWidgets (https://github.com/UnityTech/UIWidgets/)
Preferred Language
Chinese, Simplified
Tags
Yiwen
Sep 5, 2019
官方分享的源码项目导入到Unity 2019.2.2f1显示缺少pointerLeaveEvent程序集引用Assets\Scripts\Components\Clickable\Clickable.cs(30,44): error CS0246: The type or namespace name 'PointerLeaveEvent' could not be found (are you missing a using directive or an assembly reference?)请问这个怎么解决呢?

Xingwei Zhu
Software Engineer
8 days ago
hi,应该是你用的UIWidgets版本比较新导致的。DocCN目前依赖还是最初的UIWidgets第一次release的版本 后续的UI Widgets版本中我们为了hook到flutter最新的framework SDK,因此有一些breaking changes。建议你试试将UIWidgets版本rollback到7f000960a7c6fac057a491403acc0ba1b80354a2这个版本试试? 很抱歉我们近期没有及时维护DocCN,这几天我们会告知相关同事更新一下 多谢!
s
sharyu
Aug 30, 2019
之前项目用过ugui做app,因为性能问题被否掉了。请问是否有uiwidgets,flutter和原生app性能对比的详细数据呢?下载了Unity Connect android和ios版本,体验起来已经非常接近原生,但流畅度方面还是跟原生有一些差距,比如快速滑动列表。还有一点,开启android上的”显示Surface更新“,原生和flutter app在静止时,surface是不更新的,但uiwidgets还在更新,能否达到和flutter一样的效果呢。

Xingwei Zhu
Software Engineer
15 days ago
最后,关于surface惰性更新的问题,目前UIWidgets由于Unity Engine本身的渲染刷新机制的问题还暂时无法做的。但在Unity 2019.3版本中已经尝试开放了渲染-输入分离的SDK了(https://docs.unity3d.com/2019.3/Documentation/ScriptReference/Rendering.OnDemandRendering.html)。我们之后会尝试使用。它从原理上应该可以帮助我们达到惰性渲染的目的
Xingwei Zhu
Software Engineer
15 days ago
hi,多谢您的关注!很抱歉目前我们并没有和flutter或原生应用有一个详尽的性能对比报告。不过开发组近期就整个UIWidgets的性能优化上做了很多工作,使得至少在流畅度上我们在大部分测试机型上已经能够跑满60帧了。但相比较于原生应用,因为我们底层依赖Unity进行渲染,所以整体的使用体验应该还是没有直接调用原生SDK好的。不过有利有弊,Unity所提供的3D渲染相关的优势也能够帮助开发者作出一般的原生App所无法作出的效果。例如我们的彩蛋场景,对此我们后续还会做更多的feature来support的。
l
laughing111
Aug 24, 2019
大神来看一下哈^_^
显示渲染的问题:
1.场景中无摄像机,github上的clickMe示例会每帧重复绘制,并且错位。
2.场景中有摄像机,ClickMe绘制正常。
请问这是为虾米啊??

l
14 days ago
Reply@Xingwei ZhuHi,这个现象的原因是因为Main Camera默认状态下会每一帧对整个Screen做一次Clear操作。而在你的例子里,当移除Main Camera后,这个Clear操作就不会执行了。作为验证,你可以试试把Main Camera的Clear Flags设置为 Don't Clear,也同样会出现与移除Main Camera后一致的结果。对于大部分用UIWidgets开发的App来讲,因为默认会有一个纯色非透明的背景色,因此即使移除了Main Camera后仍然不会有问题,但Tutorial这个因为比较简单没有背景色,因此会有这个现象。
感谢您的解答!祝项目越来越好!我会一直支持下去的!
Xingwei Zhu
Software Engineer
22 days ago
Hi,这个现象的原因是因为Main Camera默认状态下会每一帧对整个Screen做一次Clear操作。而在你的例子里,当移除Main Camera后,这个Clear操作就不会执行了。作为验证,你可以试试把Main Camera的Clear Flags设置为 Don't Clear,也同样会出现与移除Main Camera后一致的结果。对于大部分用UIWidgets开发的App来讲,因为默认会有一个纯色非透明的背景色,因此即使移除了Main Camera后仍然不会有问题,但Tutorial这个因为比较简单没有背景色,因此会有这个现象。
f
fanluguang
Aug 23, 2019
打包安卓后运行报错,谁能帮我解决下 08-23 09:35:00.420 1584-1599/? E/Unity: AndroidJavaException: java.lang.ClassNotFoundException: com.unity.uiwidgets.plugin.UIWidgetsMessageManager
java.lang.ClassNotFoundException: com.unity.uiwidgets.plugin.UIWidgetsMessageManager
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at java.lang.Class.forName(Class.java:285)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.c(Unknown Source)
at com.unity3d.player.UnityPlayer$e$2.queueIdle(Unknown Source)
at android.os.MessageQueue.next(MessageQueue.java:392)
at android.os.Looper.loop(Looper.java:135)
at com.unity3d.player.UnityPlayer$e.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.unity.uiwidgets.plugin.UIWidgetsMessageManager" on path: DexPathList[[zip file "/data/app/com.fansir.t1-2/base.apk"],nativeLibraryDirectories=[/data/app/com.fansir.t1-2/lib/x86, /data/app/com.fansir.t1-2/base.apk!/lib/x86, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.fi

f
25 days ago
Reply@Xingwei Zhuhi,你可以查看一下在Runtime/Plugins/android下是否缺了UIWidgetsMessageManager.java这个文件?如果没有缺的话,你可以试试打包一个gradle项目然后在Android Studio上打开,看看是否有报错?如果一切都没有问题的情况下仍然会报错,麻烦告诉我们一下你使用的Unity版本以及UIWidgets版本我们尝试复现一下,多谢!
换成 gradle 打包就好了
Xingwei Zhu
Software Engineer
25 days ago
hi,你可以查看一下在Runtime/Plugins/android下是否缺了UIWidgetsMessageManager.java这个文件?如果没有缺的话,你可以试试打包一个gradle项目然后在Android Studio上打开,看看是否有报错?如果一切都没有问题的情况下仍然会报错,麻烦告诉我们一下你使用的Unity版本以及UIWidgets版本我们尝试复现一下,多谢!
c
ccc
Aug 12, 2019
unity、flutter新手,请教一下,想要关闭自动调节帧率,按照“https://github.com/UnityTech/UIWidgets#automatically-adjust-frame-rate”的说明做了如下修改,但没有效果
public class GalleryMain : UIWidgetsPanel {
...
protected override void OnEnable() {
...
Window.onFrameRateSpeedUp = () => { Application.targetFrameRate = 120; };
Window.onFrameRateCoolDown = () => { Application.targetFrameRate = 120; };
...
}
}

"V Sync Count" 已改为 "Don't Sync"。

是需要修改Runtime.ui.windows.cs源码吗?还是需要在其他地方修改Window.onFrameRateSpeedUp/Window.onFrameRateCoolDown?

Xingwei Zhu
Software Engineer
a month ago
@ccc,hi多谢你的测试和回复!针对你回复中提到的移动端performance overlay的FPS统计问题,目前我们比较确定这个问题是因为performance overlay本身的实现问题导致的,因此“performance overlay上的FPS统计很有可能是不准确的”。具体的,performance overlay本身绘制的数据理论上只有在屏幕非静止状态下才会相对准确,这就使得它无法正确反应屏幕静止情况下的实际帧率。这个问题我们之后会fix掉,以免大家被这个数值误导。让你费了这么多功夫,希望你能够谅解!最后,如果要测移动端的FPS的话,最好是用ANdroid Studio或者Xcode自带的profile,这个应该是最准确的了。
c
a month ago
Reply@Xingwei Zhuhi,如果你这边需要关闭自动调节帧率的话,比较好的方案有:(1)关闭VSync,并且设置Window.onFrameRateSpeedUp = () => {}; Window.onFrameRateCoolDown = () => {}; 或者 (2) 直接打开VSync即可。我们是在Unity 2018.3.11f1版本上测试的。关闭自动调节帧率前,屏幕静止时Editor的stats Panel上的FPS约为25;关闭后,FPS上升为100+,与平时的FPS近似。此外,对你的描述我们有几个地方还不太清楚:(1)你这里指的没有效果具体是什么情况,是指屏幕静止时FPS仍会降到25?(2)你代码中的targetFrameRate为什么要设置为120?
非常感谢指导! 先回答你的疑问: 1.是的,没效果就是指静止时fps会降到25. 2.在文档里说“please set Window.onFrameRateSpeedUp and/or Window.onFrameRateCoolDown to your own functions”,我不确定这里的functions设置为空是否可以,所以照着源码改了一下,把targetFrameRate设为一个较高的值,期望app能运行在一个较高的帧率上。 ============================================ 下面是刚做的一些测试。 unity版本更新太快,所以我这边选的一个较新的LTS版本做的测试:2018.4.6f1(LTS)。 新建项目,然后git clone UIWidgets到Packages目录,在unity里打开Packages/UIWidgets/Samples/UIWidgetsGallery/gallery.unity。做以下三个测试: 测试1: 此时VSyncCount为默认的“Every V Blank”。 在unity里直接点play运行,play窗口的stats里不管动、静都显示的是一两百帧,但gallery app里的的performance overlay上显示的帧率,在静态时约25~30,动起来时帧率会上升。 编译成APK后真机运行也是一样,performance overlay显示帧率静态时约25~30,动起来时帧率会上升。 测试2: 将VSyncCount设为“Don't Sync”,在unity里直接点play运行,play窗口的stats里静态时约25~30,动起来时帧率会上升。performance overlay上显示的帧率和stats接近。 编译成APK后真机运行,performance overlay显示帧率静态时约25~30,动起来时帧率会上升。 测试3: 在上一步的基础上修改Packages/UIWidgets/Samples/UIWidgetsGallery/GalleryMain.cs,在OnEnable函数里的 “base.OnEnable();” 后面添加: Window.onFrameRateSpeedUp = () => {}; Window.onFrameRateCoolDown = () => {}; 在unity里直接点play运行和编译成APK后真机运行的现象和测试1一样。 ============================================ 以上三个测试,根据stats里显示fps,关闭帧率自动调节的方法是有效的;但从performance overlay里显示的fps看,自动调节好像始终开着。
Xingwei Zhu
Software Engineer
a month ago
hi,如果你这边需要关闭自动调节帧率的话,比较好的方案有:(1)关闭VSync,并且设置Window.onFrameRateSpeedUp = () => {}; Window.onFrameRateCoolDown = () => {}; 或者 (2) 直接打开VSync即可。我们是在Unity 2018.3.11f1版本上测试的。关闭自动调节帧率前,屏幕静止时Editor的stats Panel上的FPS约为25;关闭后,FPS上升为100+,与平时的FPS近似。此外,对你的描述我们有几个地方还不太清楚:(1)你这里指的没有效果具体是什么情况,是指屏幕静止时FPS仍会降到25?(2)你代码中的targetFrameRate为什么要设置为120?
Z
ZXStudioGame
Aug 7, 2019
既然UIWidgets是做应用的,那么如何扩展Unity本身没有的类库呢?比如挂机在后台运行的程序、窗体透明、去掉窗体标题或者边框、获取设备信息(类似鲁大师那样的)
等等。。。

Xingwei Zhu
Software Engineer
a month ago
Hi,谢谢你的建议!Unity项目在PC上的上述扩展功能支持在Unity开发者社区里应该大多都是有提供的。例如,这个链接里就有一个让窗体透明的解决方案 https://stackoverflow.com/questions/47214123/unity3d-make-window-transparent-and-click-through ,您可以参考一下?此外,由于平台相关的扩展功能相当繁杂且大多数情况下与UIWidgets本身的功能并没有关系,因此这方面我们短期内并没有计划去实现或集成。
Category
Community
Description
Anything about UIWidgets (https://github.com/UnityTech/UIWidgets/)
Preferred Language
Chinese, Simplified
Tags