From 9283edecd3e69cd2247c50d1df64e1a71085ea01 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Thu, 16 May 2019 13:59:08 +0800 Subject: [PATCH 01/52] Tmp store. --- .npmignore | 3 +++ Documentation~/{your-package-name.md => UIWidgets.md} | 8 ++------ package.json | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) rename Documentation~/{your-package-name.md => UIWidgets.md} (93%) diff --git a/.npmignore b/.npmignore index 8d295a4d..29304c13 100644 --- a/.npmignore +++ b/.npmignore @@ -24,3 +24,6 @@ utr_output/** .yamato/** *.zip* scripts~/** + +upm-ci~/** +TestRunnerOptions.json \ No newline at end of file diff --git a/Documentation~/your-package-name.md b/Documentation~/UIWidgets.md similarity index 93% rename from Documentation~/your-package-name.md rename to Documentation~/UIWidgets.md index b8a05415..e146200f 100644 --- a/Documentation~/your-package-name.md +++ b/Documentation~/UIWidgets.md @@ -33,11 +33,7 @@ There are two types of packages: Choose one of the following introductory paragraphs that best fits the package: >>> -Use the <package name> package to <list of the main uses for the package>. For example, use <package name> to create/generate/extend/capture <mention major use case, or a good example of what the package can be used for>. The <package name> package also includes <other relevant features or uses>. - -> *or* - -The <package name> package includes examples of <name of asset type, model, prefabs, and/or other GameObjects in the package>. For more information, see <xref to topic in the Unity Manual>. +Use the <UIWidgets> package to <list of the main uses for the package>. For example, use <package name> to create/generate/extend/capture <mention major use case, or a good example of what the package can be used for>. The <package name> package also includes <other relevant features or uses>. >>> **_Examples:_** @@ -166,4 +162,4 @@ This section includes the revision history of the document. The revision history |Sept 10, 2017|Document updated for package version 1.1.
New features:
  • audio support for capturing MP4s.
  • Instructions on saving Recorder prefabs| |Sept 5, 2017|Limited edit by Documentation Team. Published to package.| |Aug 25, 2017|Document created. Matches package version 1.0.| ->>> \ No newline at end of file +>>> diff --git a/package.json b/package.json index e349e2ad..8ed0ba6b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "com.unity.uiwidgets", "displayName":"UIWidgets", "version": "1.0.0-preview", - "unity": "2018.1", + "unity": "2018.3", "description": "UIWidgets allows you to build beautiful cross-platform apps through Unity", "dependencies": { } From 079fc57d968ae4e6ae3b394729138f3463346d8f Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Fri, 17 May 2019 16:54:32 +0800 Subject: [PATCH 02/52] Update documentation. --- CHANGELOG.md | 6 +++ .../{UIWidgets.md => com.unity.uiwidgets.md} | 47 ++++++++++-------- Documentation~/images/example.png | Bin 52261 -> 0 bytes QAReport.md | 2 +- Samples/MaterialSample/.sample.json | 5 ++ Samples/UIWidgetsGallery/.sample.json | 5 ++ Samples/UIWidgetsTheatre/.sample.json | 5 ++ package.json | 2 +- 8 files changed, 48 insertions(+), 24 deletions(-) rename Documentation~/{UIWidgets.md => com.unity.uiwidgets.md} (82%) delete mode 100644 Documentation~/images/example.png create mode 100644 Samples/MaterialSample/.sample.json create mode 100644 Samples/UIWidgetsGallery/.sample.json create mode 100644 Samples/UIWidgetsTheatre/.sample.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 41e226df..164e8a95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,14 @@ All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.0.1-preview] - 2019-05-17 + +Bump the version number to avoid conflicts. + ## [1.0.0-preview] - 2019-03-01 +First release. + ### This is the first release of *Unity Package UIWidgets*. *just the first release* diff --git a/Documentation~/UIWidgets.md b/Documentation~/com.unity.uiwidgets.md similarity index 82% rename from Documentation~/UIWidgets.md rename to Documentation~/com.unity.uiwidgets.md index e146200f..876e61bc 100644 --- a/Documentation~/UIWidgets.md +++ b/Documentation~/com.unity.uiwidgets.md @@ -1,22 +1,31 @@ ->>> -**_Package Documentation Template_** +**UIWidgets** -Use this template to create preliminary, high-level documentation meant to introduce users to the feature and the sample files included in this package. When writing your documentation, do the following: +## Introduction -1. Follow instructions in blockquotes. +UIWidgets is a plugin package for Unity Editor which helps developers to create, debug and deploy efficient, +cross-platform Apps using the Unity Engine. -2. Replace angle brackets with the appropriate text. For example, replace "<package name>" with the official name of the package. - -3. Delete sections that do not apply to your package. For example, a package containing only sample files does not have a "Using <package_name>" section, so this section can be removed. - -4. After documentation is completed, make sure you delete all instructions and examples in blockquotes including this preamble and its title: +UIWidgets is mainly derived from [Flutter](https://github.com/flutter/flutter). However, taking advantage of +the powerful Unity Engine, it offers developers many new features to improve their Apps +as well as the develop workflow significantly. + + +#### Efficiency +Using the latest Unity rendering SDKs, a UIWidgets App can run very fast and keep >60fps in most times. + + +#### Cross-Platform +A UIWidgets App can be deployed on all kinds of platforms including PCs, mobile devices and web page directly, like +any other Unity projects. + +#### Multimedia Support +Except for basic 2D UIs, developers are also able to include 3D Models, audios, particle-systems to their UIWidgets Apps. + + +#### Developer-Friendly +A UIWidgets App can be debug in the Unity Editor directly with many advanced tools like +CPU/GPU Profiling, FPS Profiling. - ``` - >>> - Delete all of the text between pairs of blockquote markdown. - >>> - ``` ->>> # About <package name> @@ -153,13 +162,7 @@ The following table indicates the root folder of each type of sample in this pac >>> ## Document revision history ->>> -This section includes the revision history of the document. The revision history tracks when a document is created, edited, and updated. If you create or update a document, you must add a new row describing the revision. The Documentation Team also uses this table to track when a document is edited and its editing level. An example is provided: |Date|Reason| |---|---| -|Sept 12, 2017|Unedited. Published to package.| -|Sept 10, 2017|Document updated for package version 1.1.
    New features:
  • audio support for capturing MP4s.
  • Instructions on saving Recorder prefabs| -|Sept 5, 2017|Limited edit by Documentation Team. Published to package.| -|Aug 25, 2017|Document created. Matches package version 1.0.| ->>> +|May 18, 2019|Unedited. Published to package.| diff --git a/Documentation~/images/example.png b/Documentation~/images/example.png deleted file mode 100644 index 216328df25a30364d24c1638b3e961fd5254d72b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52261 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 NEiC@BKv2Wu{{VFWkKzCT diff --git a/QAReport.md b/QAReport.md index 26c5ba37..5de7eea4 100644 --- a/QAReport.md +++ b/QAReport.md @@ -1,7 +1,7 @@ # Quality Report Use this file to outline the test strategy for this package. -## Version tested: [*package version*] +## Version tested: [*1.0.0-preview*] ## QA Owner: [*Add Name*] ## UX Owner: [*Add Name*] diff --git a/Samples/MaterialSample/.sample.json b/Samples/MaterialSample/.sample.json new file mode 100644 index 00000000..7de00547 --- /dev/null +++ b/Samples/MaterialSample/.sample.json @@ -0,0 +1,5 @@ +{ + "displayName":"Material Sample", + "description": "Material Sample.", + "createSeparatePackage": false +} diff --git a/Samples/UIWidgetsGallery/.sample.json b/Samples/UIWidgetsGallery/.sample.json new file mode 100644 index 00000000..28ebccb7 --- /dev/null +++ b/Samples/UIWidgetsGallery/.sample.json @@ -0,0 +1,5 @@ +{ + "displayName":"UIWidgets Gallery", + "description": "UIWidgets Gallery.", + "createSeparatePackage": false +} diff --git a/Samples/UIWidgetsTheatre/.sample.json b/Samples/UIWidgetsTheatre/.sample.json new file mode 100644 index 00000000..a17b3ef5 --- /dev/null +++ b/Samples/UIWidgetsTheatre/.sample.json @@ -0,0 +1,5 @@ +{ + "displayName":"UIWidgets Theatre", + "description": "UIWidgets Theatre.", + "createSeparatePackage": false +} diff --git a/package.json b/package.json index 8ed0ba6b..12aed862 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.unity.uiwidgets", "displayName":"UIWidgets", - "version": "1.0.0-preview", + "version": "1.0.1-preview", "unity": "2018.3", "description": "UIWidgets allows you to build beautiful cross-platform apps through Unity", "dependencies": { From 733f91a121d5a5fd878295316eda11d3c24c6c2f Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Fri, 17 May 2019 16:55:20 +0800 Subject: [PATCH 03/52] Implement packman script. --- scripts/packman | 49 ++++++++++++++++++++++++++++++++++++++++++++ scripts/packman.meta | 7 +++++++ 2 files changed, 56 insertions(+) create mode 100755 scripts/packman create mode 100644 scripts/packman.meta diff --git a/scripts/packman b/scripts/packman new file mode 100755 index 00000000..64bbee98 --- /dev/null +++ b/scripts/packman @@ -0,0 +1,49 @@ +#!/bin/sh + +function usage() { + echo "$0 " + echo + echo "path to target repository : the repository to upload to package manager" + echo " must be named com.unity.uiwidgets" + exit -1 +} + +if [ "$#" != "1" ]; then + usage +fi + +target_repository=$1 +echo "Copying to $target_repository" + +if ! [ -d $target_repository ]; then + echo "Target respository does not exist!" + exit -1 +fi + +rm -rf $target_repository/Documentation~ +cp -R ../Documentation~ $target_repository/ +echo "Copied Documentation" + +rm -rf $target_repository/Runtime +cp -R ../Runtime $target_repository/ +echo "Copied Runtime" + +rm -rf $target_repository/Editor +cp -R ../Editor $target_repository/ +echo "Copied Editor" + +rm -rf $target_repository/Samples +cp -R ../Samples $target_repository/ +echo "Copied Samples" + +rm -rf $target_repository/Tests +cp -R ../Tests $target_repository/ +echo "Copied Tests" + +cp ../CHANGELOG.md* $target_repository +cp ../CONTRIBUTING.md* $target_repository +cp ../QAReport.md* $target_repository +cp ../README.md* $target_repository +cp ../Third\ Party\ Notices.md* $target_repository +cp ../package.json* $target_repository +echo "Copied other files" diff --git a/scripts/packman.meta b/scripts/packman.meta new file mode 100644 index 00000000..9a51c69d --- /dev/null +++ b/scripts/packman.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d8e7ac7f92b26442f8cdfed4f1f766d8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 786e6b61d3e08809687ce5297773d50bda47e2a5 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Fri, 17 May 2019 17:29:34 +0800 Subject: [PATCH 04/52] Implement asset store script. --- scripts/asset_store | 317 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100755 scripts/asset_store diff --git a/scripts/asset_store b/scripts/asset_store new file mode 100755 index 00000000..5886ddae --- /dev/null +++ b/scripts/asset_store @@ -0,0 +1,317 @@ +#!/bin/sh + +function usage() { + echo "$0 " + echo + echo "path to target project : the project to upload to asset store" + exit -1 +} + +if [ "$#" != "1" ]; then + usage +fi + +target_project=$1 +echo "Copying to $target_project" + +if ! [ -d $target_project ]; then + echo "Target respository does not exist!" + exit -1 +fi + +target_dir=$target_project/Assets/UIWidgets +rm -rf $target_dir +mkdir -p $target_dir + +cp -R ../Runtime $target_dir/Runtime +echo "Copied Runtime" + +cp -R ../Editor $target_dir/Editor +echo "Copied Editor" + +cp -R ../Samples $target_dir/Samples +echo "Copied Samples" + +mkdir -p $target_dir/Documentation +cat > $target_dir/Documentation/README.txt << END +# UIWidgets + +## Introduction + +UIWidgets is a plugin package for Unity Editor which helps developers to create, debug and deploy efficient, +cross-platform Apps using the Unity Engine. + +UIWidgets is mainly derived from [Flutter](https://github.com/flutter/flutter). However, taking advantage of +the powerful Unity Engine, it offers developers many new features to improve their Apps +as well as the develop workflow significantly. + + +#### Efficiency +Using the latest Unity rendering SDKs, a UIWidgets App can run very fast and keep >60fps in most times. + + +#### Cross-Platform +A UIWidgets App can be deployed on all kinds of platforms including PCs, mobile devices and web page directly, like +any other Unity projects. + +#### Multimedia Support +Except for basic 2D UIs, developers are also able to include 3D Models, audios, particle-systems to their UIWidgets Apps. + + +#### Developer-Friendly +A UIWidgets App can be debug in the Unity Editor directly with many advanced tools like +CPU/GPU Profiling, FPS Profiling. + +## Requirement + +#### Unity +Install Unity 2018.3 or above. You can download the latest Unity on https://unity3d.com/get-unity/download. + +#### UIWidgets Package +Visit our Github repository https://github.com/UnityTech/UIWidgets + to download the latest UIWidgets package. + +Move the downloaded package folder into the Package folder of your Unity project. + +Generally, you can make it using a console (or terminal) application by just a few commands as below: + + cd /Packages + git clone https://github.com/UnityTech/UIWidgets.git com.unity.uiwidgets + +## Getting Start + +#### i. Overview +In this tutorial, we will create a very simple UIWidgets App as the kick-starter. The app contains +only a text label and a button. The text label will count the times of clicks upon the button. + +First of all, please open or create a Unity Project and open it with Unity Editor. + +And then open Project Settings, go to Player section and add "UIWidgets_DEBUG" to the Scripting Define Symbols field. +This enables the debug mode of UIWidgets for your development. Remove this for your release build afterwards. + +#### ii. Scene Build +A UIWidgets App is usually built upon a Unity UI Canvas. Please follow the steps to create a +UI Canvas in Unity. +1. Create a new Scene by "File -> New Scene"; +1. Create a UI Canvas in the scene by "GameObject -> UI -> Canvas"; +1. Add a Panel (i.e., Panel 1) to the UI Canvas by right click on the Canvas and select "UI -> Panel". Then remove the +Image Component from the Panel. + +#### iii. Create Widget +A UIWidgets App is written in C# Scripts. Please follow the steps to create an App and play it +in Unity Editor. + +1. Create a new C# Script named "UIWidgetsExample.cs" and paste the following codes into it. + + using System.Collections.Generic; + using Unity.UIWidgets.animation; + using Unity.UIWidgets.engine; + using Unity.UIWidgets.foundation; + using Unity.UIWidgets.material; + using Unity.UIWidgets.painting; + using Unity.UIWidgets.ui; + using Unity.UIWidgets.widgets; + using UnityEngine; + using FontStyle = Unity.UIWidgets.ui.FontStyle; + + namespace UIWidgetsSample { + public class UIWidgetsExample : UIWidgetsPanel { + protected override void OnEnable() { + // if you want to use your own font or font icons. + // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "font family name"); + + // load custom font with weight & style. The font weight & style corresponds to fontWeight, fontStyle of + // a TextStyle object + // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "Roboto", FontWeight.w500, + // FontStyle.italic); + + // add material icons, familyName must be "Material Icons" + // FontManager.instance.addFont(Resources.Load(path: "path to material icons"), "Material Icons"); + + base.OnEnable(); + } + + protected override Widget createWidget() { + return new WidgetsApp( + home: new ExampleApp(), + pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) => + new PageRouteBuilder( + settings: settings, + pageBuilder: (BuildContext context, Animation animation, + Animation secondaryAnimation) => builder(context) + ) + ); + } + + class ExampleApp : StatefulWidget { + public ExampleApp(Key key = null) : base(key) { + } + + public override State createState() { + return new ExampleState(); + } + } + + class ExampleState : State { + int counter = 0; + + public override Widget build(BuildContext context) { + return new Column( + children: new List { + new Text("Counter: " + this.counter), + new GestureDetector( + onTap: () => { + this.setState(() + => { + this.counter++; + }); + }, + child: new Container( + padding: EdgeInsets.symmetric(20, 20), + color: Colors.blue, + child: new Text("Click Me") + ) + ) + } + ); + } + } + } + } + +1. Save this script and attach it to Panel 1 as its component. +1. Press the "Play" Button to start the App in Unity Editor. + +#### iv. Build App +Finally, the UIWidgets App can be built to packages for any specific platform by the following steps. +1. Open the Build Settings Panel by "File -> Build Settings..." +1. Choose a target platform and click "Build". Then the Unity Editor will automatically assemble +all relevant resources and generate the final App package. + +#### How to load images? +1. Put your images files in Resources folder. e.g. image1.png. +2. You can add image1@2.png and image1@3.png in the same folder to support HD screens. +3. Use Image.asset("image1") to load the image. Note: as in Unity, ".png" is not needed. + +UIWidgets supports Gif as well! +1. Suppose you have loading1.gif. Rename it to loading1.gif.bytes and copy it to Resources folder. +2. You can add loading1@2.gif.bytes and loading1@3.gif.bytes in the same folder to support HD screens. +3. Use Image.asset("loading1.gif") to load the gif images. + +#### Using Window Scope +If you see the error AssertionError: Window.instance is null or null pointer error of Window.instance, +it means the code is not running in the window scope. In this case, you can enclose your code +with window scope as below: + +using(WindowProvider.of(your gameObject with UIWidgetsPanel).getScope()) { + // code dealing with UIWidgets, + // e.g. setState(() => {....}) +} + + +This is needed if the code is in methods +not invoked by UIWidgets. For example, if the code is in completed callback of UnityWebRequest, +you need to enclose them with window scope. +Please see [HttpRequestSample](./Samples/UIWidgetSample/HttpRequestSample.cs) for detail. +For callback/event handler methods from UIWidgets (e.g Widget.build, State.initState...), you don't need do +it yourself, since the framework ensure it's in window scope. + +#### Show Status Bar on Android +Status bar is always hidden by default when an Unity project is running on an Android device. If you + want to show the status bar in your App, this + [solution](https://github.com/Over17/UnityShowAndroidStatusBar) seems to be + compatible to UIWidgets, therefore can be used as a good option before we release our + full support solution on this issue. + + Besides, + please set "Render Outside Safe Area" to true in the "Player Settings" to make this plugin working properly on Android P or later. + + + + +#### Automatically Adjust Frame Rate + +To build an App that is able to adjust the frame rate automatically, please open Project Settings, and in the Quality tab, set the "V Sync Count" option of the target platform to "Don't Sync". +The default logic is to set the frame rate to 25 when the screen is static, and change the frame rate to 60 whenever the screen changes. +If you would like to modify the behavior of speeding up or cooling down the frame rate, please set Window.onFrameRateSpeedUp and/or Window.onFrameRateCoolDown to your own functions. + +#### WebGL Canvas Device Pixel Ratio Plugin +The width and height of the Canvas in browser may differ from the number of pixels the Canvas occupies on the screen. +Therefore, the image may blur in the built WebGL program. +The Plugin Plugins/platform/webgl/UIWidgetsCanvasDevicePixelRatio_20xx.x.jslib (2018.3 and 2019.1 for now) solves this issue. +Please select the plugin of the Unity version corresponding to your project, and disable other versions of this plugin, as follows: select this plugin in the Project panel, and uncheck WebGL under Select platforms for plugin in the Inspector panel. +If you need to disable this plugin for any reason, please disable all the versions of this plugin as described above. + +This plugin overrides the following parameters in the Unity WebGL building module: + +JS_SystemInfo_GetWidth +JS_SystemInfo_GetHeight +JS_SystemInfo_GetCurrentCanvasWidth +JS_SystemInfo_GetCurrentCanvasHeight +\$Browser +\$JSEvents + +If you would like to implement your own WebGL plugin, and your plugin overrides at least one of the above parameters, you need to disable the UIWidgetsCanvasDevicePixelRatio plugin in the above mentioned way to avoid possible conflicts. +If you still need the function provided by this plugin, you can manually apply the modification to Unity WebGL building module introduced in this plugin. +All the modifications introduced in UIWidgetsCanvasDevicePixelRatio are marked by ////////// Modification Start //////////// and ////////// Modification End ////////////. +In the marked codes, all the multiplications and divisions with devicePixelRatio are introduced by our modification. +To learn about the original script in detail, please refer to SystemInfo.js and UnityNativeJS/UnityNative.js in PlaybackEngines/WebGLSupport/BuildTools/lib in your Unity Editor installation. + +#### Image Import Setting +Unity, by default, resizes the width and height of an imported image to the nearest integer that is a power of 2. +In UIWidgets, you should almost always disable this by selecting the image in the "Project" panel, then in the "Inspector" panel set the "Non Power of 2" option (in "Advanced") to "None", to prevent your image from being resized unexpectedly. + +## Debug UIWidgets Application + +#### Define UIWidgets_DEBUG +It's recommended to define the UIWidgets_DEBUG script symbol in editor, this will turn on +debug assertion in UIWidgets, which will help to find potential bugs earlier. To do this: +please go to Player Settings -> Other Settings -> Configuration -> Scripting Define Symbols, +and add UIWidgets_DEBUG. +The symbol is for debug purpose, please remove it from your release build. + +#### UIWidgets Inspector +The UIWidgets Inspector tool is for visualizing and exploring the widget trees. You can find it +via Window/Analysis/UIWidgets inspector in Editor menu. + +Note + +* UIWidgets_DEBUG needs to be define for inspector to work properly. +* Inspector currently only works in Editor Play Mode, inspect standalone built application is not supported for now. + +## Learn + +#### Samples +You can find many UIWidgets App samples in the UIWidgets package in the Samples folder. +Feel free to try them out and make modifications to see the results. +To get started, the UIWidgetsTheatre scene provides you +a list of carefully selected samples to start with. + +You can also try UIWidgets-based Editor windows by clicking UIWidgetsTest on the main menu +and open one of the dropdown samples. + +#### Wiki +The develop team is still working on the UIWidgets Wiki. However, since UIWidgets is mainly derived from Flutter, + you can refer to Flutter Wiki to access detailed descriptions of UIWidgets APIs + from those of their Flutter counterparts. +Meanwhile, you can join the discussion channel at (https://connect.unity.com/g/uiwidgets) + +#### FAQ + +Can I create standalone App using UIWidgets? Yes +Can I use UIWidgets to build game UIs? Yes +Can I develop Unity Editor plugins using UIWidgets? Yes +Is UIWidgets a extension of UGUI/NGUI? No +Is UIWidgets just a copy of Flutter? No +Can I create UI with UIWidgets by simply drag&drop? No +Do I have to pay for using UIWidgets? No +Any IDE recommendation for UIWidgets? Rider, VSCode(Open .sln) + +## Contact Us + +Keven Gu (kg@unity3d.com) +Xingwei Zhu (xingwei.zhu@unity3d.com) +Yuncong Zhang (yuncong.zhang@unity3d.com) + +END + From 63655cea91a83f9c60a2d56cd26129513f0914dc Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Mon, 20 May 2019 10:20:17 +0800 Subject: [PATCH 05/52] Copy Resources for sample. --- scripts/asset_store | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/asset_store b/scripts/asset_store index 5886ddae..598f3b57 100755 --- a/scripts/asset_store +++ b/scripts/asset_store @@ -32,6 +32,9 @@ echo "Copied Editor" cp -R ../Samples $target_dir/Samples echo "Copied Samples" +cp -R ../Tests/Resources $target_dir/Resources +echo "Copied Resources" + mkdir -p $target_dir/Documentation cat > $target_dir/Documentation/README.txt << END # UIWidgets From 6bc50b8ddae40d88f4e3172d5de14749abc44d3c Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Mon, 20 May 2019 10:21:01 +0800 Subject: [PATCH 06/52] Update Menu Organization: Move everything into Window/UIWidgets. --- Runtime/debugger/inspector_window.cs | 2 +- .../UIWidgetsGallery/Editor/GalleryMainEditor.cs | 2 +- Tests/Editor/EditableTextWiget.cs | 2 +- Tests/Editor/Menu.cs | 16 ++++++++-------- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Runtime/debugger/inspector_window.cs b/Runtime/debugger/inspector_window.cs index 7d9c7d83..e9546ceb 100644 --- a/Runtime/debugger/inspector_window.cs +++ b/Runtime/debugger/inspector_window.cs @@ -45,7 +45,7 @@ public class WidgetsInpsectorWindow : EditorWindow { List m_UpdateActions = new List(); - [MenuItem("Window/Analysis/UIWidgets Inspector")] + [MenuItem("Window/UIWidgets/Inspector")] public static void Init() { WidgetsInpsectorWindow window = (WidgetsInpsectorWindow) GetWindow(typeof(WidgetsInpsectorWindow)); diff --git a/Samples/UIWidgetsGallery/Editor/GalleryMainEditor.cs b/Samples/UIWidgetsGallery/Editor/GalleryMainEditor.cs index d935056a..fde4c717 100644 --- a/Samples/UIWidgetsGallery/Editor/GalleryMainEditor.cs +++ b/Samples/UIWidgetsGallery/Editor/GalleryMainEditor.cs @@ -8,7 +8,7 @@ namespace UIWidgetsGallery { public class GalleryMainEditor : UIWidgetsEditorWindow { - [MenuItem("UIWidgetsTests/Gallery")] + [MenuItem("Window/UIWidgets/Tests/Gallery")] public static void gallery() { EditorWindow.GetWindow(); } diff --git a/Tests/Editor/EditableTextWiget.cs b/Tests/Editor/EditableTextWiget.cs index fd911390..3ebab7cd 100644 --- a/Tests/Editor/EditableTextWiget.cs +++ b/Tests/Editor/EditableTextWiget.cs @@ -16,7 +16,7 @@ public class EditableTextWiget : EditorWindow { Widget image; - [MenuItem("UIWidgetsTests/EditableTextWidget")] + [MenuItem("Window/UIWidgets/Tests/EditableTextWidget")] public static void renderWidgets() { GetWindow(typeof(EditableTextWiget)); } diff --git a/Tests/Editor/Menu.cs b/Tests/Editor/Menu.cs index 1965dc6a..3fe2e821 100644 --- a/Tests/Editor/Menu.cs +++ b/Tests/Editor/Menu.cs @@ -2,42 +2,42 @@ namespace UIWidgets.Tests { public static class Menu { - [MenuItem("UIWidgetsTests/CanvasAndLayers")] + [MenuItem("Window/UIWidgets/Tests/CanvasAndLayers")] public static void canvasAndLayers() { EditorWindow.GetWindow(typeof(CanvasAndLayers)); } - [MenuItem("UIWidgetsTests/RenderBoxes")] + [MenuItem("Window/UIWidgets/Tests/RenderBoxes")] public static void renderBoxes() { EditorWindow.GetWindow(typeof(RenderBoxes)); } - [MenuItem("UIWidgetsTests/RenderParagraph")] + [MenuItem("Window/UIWidgets/Tests/RenderParagraph")] public static void renderRenderParagraph() { EditorWindow.GetWindow(typeof(Paragraph)); } - [MenuItem("UIWidgetsTests/Gestures")] + [MenuItem("Window/UIWidgets/Tests/Gestures")] public static void gestures() { EditorWindow.GetWindow(typeof(Gestures)); } - [MenuItem("UIWidgetsTests/RenderEditable")] + [MenuItem("Window/UIWidgets/Tests/RenderEditable")] public static void renderEditable() { EditorWindow.GetWindow(typeof(RenderEditable)); } - [MenuItem("UIWidgetsTests/Widgets")] + [MenuItem("Window/UIWidgets/Tests/Widgets")] public static void renderWidgets() { EditorWindow.GetWindow(typeof(Widgets)); } - [MenuItem("UIWidgetsTests/Show SceneViewTests")] + [MenuItem("Window/UIWidgets/Tests/Show SceneViewTests")] public static void showSceneView() { SceneViewTests.show(); } - [MenuItem("UIWidgetsTests/Hide SceneViewTests")] + [MenuItem("Window/UIWidgets/Tests/Hide SceneViewTests")] public static void hideSceneView() { SceneViewTests.hide(); } From 886b4cc91bee3f5314906e5d5d011f33922316c2 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Tue, 21 May 2019 10:51:58 +0800 Subject: [PATCH 07/52] Update Documentation. --- scripts/asset_store | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/asset_store b/scripts/asset_store index 598f3b57..6f746047 100755 --- a/scripts/asset_store +++ b/scripts/asset_store @@ -314,6 +314,7 @@ Any IDE recommendation for UIWidgets? Rider, VSCode(Open .sln) Keven Gu (kg@unity3d.com) Xingwei Zhu (xingwei.zhu@unity3d.com) +Fan Zhang (fzhang@unity3d.com) Yuncong Zhang (yuncong.zhang@unity3d.com) END From 1735cfba206088848dd9ed5bc7142608fd48f76d Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Tue, 21 May 2019 14:43:38 +0800 Subject: [PATCH 08/52] Update script and Documentation. --- Documentation~/com.unity.uiwidgets.md | 397 +++++++++++++++++--------- scripts/packman | 7 +- 2 files changed, 265 insertions(+), 139 deletions(-) diff --git a/Documentation~/com.unity.uiwidgets.md b/Documentation~/com.unity.uiwidgets.md index 876e61bc..1f8d9862 100644 --- a/Documentation~/com.unity.uiwidgets.md +++ b/Documentation~/com.unity.uiwidgets.md @@ -1,4 +1,6 @@ -**UIWidgets** +# UIWidgets +[中文](README-ZH.md) + ## Introduction @@ -27,142 +29,271 @@ A UIWidgets App can be debug in the Unity Editor directly with many advanced too CPU/GPU Profiling, FPS Profiling. -# About <package name> - ->>> -Name the heading of the first topic after the **displayName** of the package as it appears in the package manifest. Check with your Product Manager to ensure that the package is named correctly. - -This first topic includes a brief, high-level explanation of the package and, if applicable, provides links to Unity Manual topics. - -There are two types of packages: - - - Packages that include features that augment the Unity Editor or Runtime. - - Packages that include sample files. - -Choose one of the following introductory paragraphs that best fits the package: ->>> - -Use the <UIWidgets> package to <list of the main uses for the package>. For example, use <package name> to create/generate/extend/capture <mention major use case, or a good example of what the package can be used for>. The <package name> package also includes <other relevant features or uses>. - ->>> -**_Examples:_** - -Here are some examples for reference only. Do not include these in the final documentation file: - -*Use the Unity Recorder package to capture and save in-game data. For example, use Unity Recorder to record an mp4 file during a game session. The Unity Recorder package also includes an interface for setting-up and triggering recording sessions.* - -*The Timeline Examples package includes examples of Timeline assets, Timeline Instances, animation, GameObjects, and scripts that illustrate how to use Unity's Timeline. For more information, see [ Unity's Timeline](https://docs.unity3d.com/Manual/TimelineSection.html) in the [Unity Manual](https://docs.unity3d.com). For licensing and usage, see Package Licensing.* ->>> - -# Installing <package name> ->>> -Begin this section with a cross-reference to the official Unity Manual topic on how to install packages. If the package requires special installation instructions, include these steps in this section. ->>> - -To install this package, follow the instructions in the [Package Manager documentation](https://docs.unity3d.com/Packages/com.unity.package-manager-ui@latest/index.html). - ->>> -For some packages, there may be additional steps to complete the setup. You can add those here. ->>> - -In addition, you need to install the following resources: - - - <name of resource>: To install, open *Window > <name of menu item>*. The resource appears <at this location>. - - <name of sample>: To install, open *Window > <name of menu item>*. The new sample folder appears <at this location>. - - - -# Using <package name> ->>> -The contents of this section depends on the type of package. - -For packages that augment the Unity Editor with additional features, this section should include workflow and/or reference documentation: - -* At a minimum, this section should include reference documentation that describes the windows, editors, and properties that the package adds to Unity. This reference documentation should include screen grabs (see how to add screens below), a list of settings, an explanation of what each setting does, and the default values of each setting. -* Ideally, this section should also include a workflow: a list of steps that the user can easily follow that demonstrates how to use the feature. This list of steps should include screen grabs (see how to add screens below) to better describe how to use the feature. - -For packages that include sample files, this section may include detailed information on how the user can use these sample files in their projects and scenes. However, workflow diagrams or illustrations could be included if deemed appropriate. - -## How to add images - -*(This section is for reference. Do not include in the final documentation file)* +### Example -If the [Using <package name>](#UsingPackageName) section includes screen grabs or diagrams, a link to the image must be added to this MD file, before or after the paragraph with the instruction or description that references the image. In addition, a caption should be added to the image link that includes the name of the screen or diagram. All images must be PNG files with underscores for spaces. No animated GIFs. +
    + + + + +
    + + + + + + + +
    -An example is included below: +## Requirement -![A cinematic in the Timeline Editor window.](images/example.png) +#### Unity +Install **Unity 2018.3** or above. You can download the latest Unity on https://unity3d.com/get-unity/download. -Notice that the example screen shot is included in the images folder. All screen grabs and/or diagrams must be added and referenced from the images folder. - -For more on the Unity documentation standards for creating and adding screen grabs, see this confluence page: https://confluence.hq.unity3d.com/pages/viewpage.action?pageId=13500715 ->>> - - - -# Technical details -## Requirements ->>> -This subtopic includes a bullet list with the compatible versions of Unity. This subtopic may also include additional requirements or recommendations for 3rd party software or hardware. An example includes a dependency on other packages. If you need to include references to non-Unity products, make sure you refer to these products correctly and that all references include the proper trademarks (tm or r) ->>> - -This version of <package name> is compatible with the following versions of the Unity Editor: - -* 2018.1 and later (recommended) - -To use this package, you must have the following 3rd party products: - -* <product name and version with trademark or registered trademark.> -* <product name and version with trademark or registered trademark.> -* <product name and version with trademark or registered trademark.> - -## Known limitations ->>> -This section lists the known limitations with this version of the package. If there are no known limitations, or if the limitations are trivial, exclude this section. An example is provided. ->>> - -<package name> version <package version> includes the following known limitations: - -* <brief one-line description of first limitation.> -* <brief one-line description of second limitation.> -* <and so on> - ->>> -*Example (For reference. Do not include in the final documentation file):* - -The Unity Recorder version 1.0 has the following limitations:* - -* The Unity Recorder does not support sound. -* The Recorder window and Recorder properties are not available in standalone players. -* MP4 encoding is only available on Windows. ->>> - -## Package contents ->>> -This section includes the location of important files you want the user to know about. For example, if this is a sample package containing textures, models, and materials separated by sample group, you may want to provide the folder location of each group. ->>> - -The following table indicates the <describe the breakdown you used here>: - -|Location|Description| -|---|---| -|``|Contains <describe what the folder contains>.| -|``|Contains <describe what the file represents or implements>.| - ->>> -*Example (For reference. Do not include in the final documentation file):* - -The following table indicates the root folder of each type of sample in this package. Each sample's root folder contains its own Materials, Models, or Textures folders: +#### UIWidgets Package +Visit our Github repository https://github.com/UnityTech/UIWidgets + to download the latest UIWidgets package. + +Move the downloaded package folder into the **Package** folder of your Unity project. + +Generally, you can make it using a console (or terminal) application by just a few commands as below: + + ```none + cd /Packages + git clone https://github.com/UnityTech/UIWidgets.git com.unity.uiwidgets + ``` + +## Getting Start + +#### i. Overview +In this tutorial, we will create a very simple UIWidgets App as the kick-starter. The app contains +only a text label and a button. The text label will count the times of clicks upon the button. + +First of all, please open or create a Unity Project and open it with Unity Editor. + +And then open Project Settings, go to Player section and **add "UIWidgets_DEBUG" to the Scripting Define Symbols field.** +This enables the debug mode of UIWidgets for your development. Remove this for your release build afterwards. + +#### ii. Scene Build +A UIWidgets App is usually built upon a Unity UI Canvas. Please follow the steps to create a +UI Canvas in Unity. +1. Create a new Scene by "File -> New Scene"; +1. Create a UI Canvas in the scene by "GameObject -> UI -> Canvas"; +1. Add a Panel (i.e., **Panel 1**) to the UI Canvas by right click on the Canvas and select "UI -> Panel". Then remove the +**Image** Component from the Panel. + +#### iii. Create Widget +A UIWidgets App is written in **C# Scripts**. Please follow the steps to create an App and play it +in Unity Editor. + +1. Create a new C# Script named "UIWidgetsExample.cs" and paste the following codes into it. + ```none + using System.Collections.Generic; + using Unity.UIWidgets.animation; + using Unity.UIWidgets.engine; + using Unity.UIWidgets.foundation; + using Unity.UIWidgets.material; + using Unity.UIWidgets.painting; + using Unity.UIWidgets.ui; + using Unity.UIWidgets.widgets; + using UnityEngine; + using FontStyle = Unity.UIWidgets.ui.FontStyle; + + namespace UIWidgetsSample { + public class UIWidgetsExample : UIWidgetsPanel { + protected override void OnEnable() { + // if you want to use your own font or font icons. + // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "font family name"); + + // load custom font with weight & style. The font weight & style corresponds to fontWeight, fontStyle of + // a TextStyle object + // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "Roboto", FontWeight.w500, + // FontStyle.italic); + + // add material icons, familyName must be "Material Icons" + // FontManager.instance.addFont(Resources.Load(path: "path to material icons"), "Material Icons"); + + base.OnEnable(); + } + + protected override Widget createWidget() { + return new WidgetsApp( + home: new ExampleApp(), + pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) => + new PageRouteBuilder( + settings: settings, + pageBuilder: (BuildContext context, Animation animation, + Animation secondaryAnimation) => builder(context) + ) + ); + } + + class ExampleApp : StatefulWidget { + public ExampleApp(Key key = null) : base(key) { + } + + public override State createState() { + return new ExampleState(); + } + } + + class ExampleState : State { + int counter = 0; + + public override Widget build(BuildContext context) { + return new Column( + children: new List { + new Text("Counter: " + this.counter), + new GestureDetector( + onTap: () => { + this.setState(() + => { + this.counter++; + }); + }, + child: new Container( + padding: EdgeInsets.symmetric(20, 20), + color: Colors.blue, + child: new Text("Click Me") + ) + ) + } + ); + } + } + } + } + ``` + +1. Save this script and attach it to **Panel 1** as its component. +1. Press the "Play" Button to start the App in Unity Editor. + +#### iv. Build App +Finally, the UIWidgets App can be built to packages for any specific platform by the following steps. +1. Open the Build Settings Panel by "File -> Build Settings..." +1. Choose a target platform and click "Build". Then the Unity Editor will automatically assemble +all relevant resources and generate the final App package. + +#### How to load images? +1. Put your images files in Resources folder. e.g. image1.png. +2. You can add image1@2.png and image1@3.png in the same folder to support HD screens. +3. Use Image.asset("image1") to load the image. Note: as in Unity, ".png" is not needed. + +UIWidgets supports Gif as well! +1. Suppose you have loading1.gif. Rename it to loading1.gif.bytes and copy it to Resources folder. +2. You can add loading1@2.gif.bytes and loading1@3.gif.bytes in the same folder to support HD screens. +3. Use Image.asset("loading1.gif") to load the gif images. + +#### Using Window Scope +If you see the error ```AssertionError: Window.instance is null``` or null pointer error of ```Window.instance```, +it means the code is not running in the window scope. In this case, you can enclose your code +with window scope as below: +``` +using(WindowProvider.of(your gameObject with UIWidgetsPanel).getScope()) { + // code dealing with UIWidgets, + // e.g. setState(() => {....}) +} +``` + +This is needed if the code is in methods +not invoked by UIWidgets. For example, if the code is in ```completed``` callback of ```UnityWebRequest```, +you need to enclose them with window scope. +Please see [HttpRequestSample](./Samples/UIWidgetSample/HttpRequestSample.cs) for detail. +For callback/event handler methods from UIWidgets (e.g ```Widget.build, State.initState...```), you don't need do +it yourself, since the framework ensure it's in window scope. + +#### Show Status Bar on Android +Status bar is always hidden by default when an Unity project is running on an Android device. If you + want to show the status bar in your App, this + [solution](https://github.com/Over17/UnityShowAndroidStatusBar) seems to be + compatible to UIWidgets, therefore can be used as a good option before we release our + full support solution on this issue. + + Besides, + please set "Render Outside Safe Area" to true in the "Player Settings" to make this plugin working properly on Android P or later. + + -|Folder Location|Description| -|---|---| -|`WoodenCrate_Orange`|Root folder containing the assets for the orange crates.| -|`WoodenCrate_Mahogany`|Root folder containing the assets for the mahogany crates.| -|`WoodenCrate_Shared`|Root folder containing any material assets shared by all crates.| ->>> -## Document revision history +#### Automatically Adjust Frame Rate + +To build an App that is able to adjust the frame rate automatically, please open Project Settings, and in the Quality tab, set the "V Sync Count" option of the target platform to "Don't Sync". +The default logic is to set the frame rate to 25 when the screen is static, and change the frame rate to 60 whenever the screen changes. +If you would like to modify the behavior of speeding up or cooling down the frame rate, please set `Window.onFrameRateSpeedUp` and/or `Window.onFrameRateCoolDown` to your own functions. + +#### WebGL Canvas Device Pixel Ratio Plugin +The width and height of the Canvas in browser may differ from the number of pixels the Canvas occupies on the screen. +Therefore, the image may blur in the builded WebGL program. +The Plugin `Plugins/platform/webgl/UIWidgetsCanvasDevicePixelRatio_20xx.x.jslib` (2018.3 and 2019.1 for now) solves this issue. +Please select the plugin of the Unity version corresponding to your project, and disable other versions of this plugin, as follows: select this plugin in the **Project** panel, and uncheck **WebGL** under **Select platforms for plugin** in the **Inspector** panel. +If you need to disable this plugin for any reason, please disable all the versions of this plugin as described above. + +This plugin overrides the following parameters in the Unity WebGL building module: +``` +JS_SystemInfo_GetWidth +JS_SystemInfo_GetHeight +JS_SystemInfo_GetCurrentCanvasWidth +JS_SystemInfo_GetCurrentCanvasHeight +$Browser +$JSEvents +``` +If you would like to implement your own WebGL plugin, and your plugin overrides at least one of the above parameters, you need to disable the `UIWidgetsCanvasDevicePixelRatio` plugin in the above mentioned way to avoid possible conflicts. +If you still need the function provided by this plugin, you can mannually apply the modification to Unity WebGL building module introduced in this plugin. +All the modifications introduced in `UIWidgetsCanvasDevicePixelRatio` are marked by `////////// Modifcation Start ////////////` and `////////// Modifcation End ////////////`. +In the marked codes, all the multiplications and divisions with `devicePixelRatio` are introduced by our modification. +To learn about the original script in detail, please refer to `SystemInfo.js` and `UnityNativeJS/UnityNative.js` in `PlaybackEngines/WebGLSupport/BuildTools/lib` in your Unity Editor installation. + +#### Image Import Setting +Unity, by default, resizes the width and height of an imported image to the nearest integer that is a power of 2. +In UIWidgets, you should almost always disable this by selecting the image in the "Project" panel, then in the "Inspector" panel set the "Non Power of 2" option (in "Advanced") to "None", to prevent your image from being resized unexpectedly. -|Date|Reason| -|---|---| -|May 18, 2019|Unedited. Published to package.| +## Debug UIWidgets Application + +#### Define UIWidgets_DEBUG +It's recommended to define the **UIWidgets_DEBUG** script symbol in editor, this will turn on +debug assertion in UIWidgets, which will help to find potential bugs earlier. To do this: +please go to **Player Settings -> Other Settings -> Configuration -> Scripting Define Symbols**, +and add **UIWidgets_DEBUG**. +The symbol is for debug purpose, please remove it from your release build. + +#### UIWidgets Inspector +The UIWidgets Inspector tool is for visualizing and exploring the widget trees. You can find it +via *Window/Analysis/UIWidgets* inspector in Editor menu. +**Note** +* **UIWidgets_DEBUG** needs to be define for inspector to work properly. +* Inspector currently only works in Editor Play Mode, inspect standalone built application is not supported for now. + +## Learn + +#### Samples +You can find many UIWidgets App samples in the UIWidgets package in the **Samples** folder. +Feel free to try them out and make modifications to see the results. +To get started, the UIWidgetsTheatre scene provides you +a list of carefully selected samples to start with. + +You can also try UIWidgets-based Editor windows by clicking **UIWidgetsTest** on the main menu +and open one of the dropdown samples. + +#### Wiki +The develop team is still working on the UIWidgets Wiki. However, since UIWidgets is mainly derived from Flutter, + you can refer to Flutter Wiki to access detailed descriptions of UIWidgets APIs + from those of their Flutter counterparts. +Meanwhile, you can join the discussion channel at (https://connect.unity.com/g/uiwidgets) + +#### FAQ + +| Question | Answer | +| :-----------------------------------------------| ---------------------: | +| Can I create standalone App using UIWidgets? | **Yes** | +| Can I use UIWidgets to build game UIs? | **Yes** | +| Can I develop Unity Editor plugins using UIWidgets? | **Yes** | +| Is UIWidgets a extension of UGUI/NGUI? | **No** | +| Is UIWidgets just a copy of Flutter? | **No** | +| Can I create UI with UIWidgets by simply drag&drop? | **No** | +| Do I have to pay for using UIWidgets? | **No** | +| Any IDE recommendation for UIWidgets? | **Rider, VSCode(Open .sln)** | + +## How to Contribute + +Check [CONTRIBUTING.md](CONTRIBUTING.md) diff --git a/scripts/packman b/scripts/packman index 64bbee98..5f4bd91f 100755 --- a/scripts/packman +++ b/scripts/packman @@ -40,10 +40,5 @@ rm -rf $target_repository/Tests cp -R ../Tests $target_repository/ echo "Copied Tests" -cp ../CHANGELOG.md* $target_repository -cp ../CONTRIBUTING.md* $target_repository -cp ../QAReport.md* $target_repository cp ../README.md* $target_repository -cp ../Third\ Party\ Notices.md* $target_repository -cp ../package.json* $target_repository -echo "Copied other files" +echo "Copied README" From e3b38cffd34e5fa59e8427798637fd27397d0ae8 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Tue, 21 May 2019 17:34:01 +0800 Subject: [PATCH 09/52] Update packman script. --- scripts/packman | 58 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/scripts/packman b/scripts/packman index 5f4bd91f..602ecbc0 100755 --- a/scripts/packman +++ b/scripts/packman @@ -1,44 +1,76 @@ #!/bin/sh +repo_url="git@github.cds.internal.unity3d.com:unity/com.unity.uiwidgets.git" +package_name="com.unity.uiwidgets" +target_version='7cbf99f1b' + function usage() { - echo "$0 " + echo "$0 [path to target repository]" echo - echo "path to target repository : the repository to upload to package manager" - echo " must be named com.unity.uiwidgets" + echo "path to target repository : The repository to upload to package manager ends with " + echo " com.unity.uiwidgets. If not provided, will clone from" + echo " $repo_url" exit -1 } -if [ "$#" != "1" ]; then +if [ "$1" == "-h" ]; then usage fi -target_repository=$1 +if [ "$#" != "1" ]; then + tmpdir=`mktemp -d` + target_repository="$tmpdir/$package_name" + echo "Repository path not provided. Will clone from" + echo "$repo_url" + echo "to $tmpdir/$package_name" + git clone $repo_url $target_repository +else + target_repository=`cd $1; pwd; cd - > /dev/null` +fi + +if ! [ -d "$target_repository" ]; then + echo "Target respository ($target_repository) does not exist!" + exit -1 +fi + echo "Copying to $target_repository" -if ! [ -d $target_repository ]; then - echo "Target respository does not exist!" +# Copy the UIWidgets Repository to a temporary dir and +# checkout to target_version +tmpdir=`mktemp -d` +curr_repo_name=$(basename `cd ..; pwd; cd - > /dev/null`) # Should be UIWidgets +cp -R ../.. $tmpdir +echo "Switching to $tmpdir/$curr_repo_name" +cd $tmpdir/$curr_repo_name +git reset --hard $target_version # Cleanup any possible local change +if [ "$?" != "0" ]; then + echo "Failed to setup the repo of target version" exit -1 fi rm -rf $target_repository/Documentation~ -cp -R ../Documentation~ $target_repository/ +cp -R Documentation~ $target_repository/ echo "Copied Documentation" rm -rf $target_repository/Runtime -cp -R ../Runtime $target_repository/ +cp -R Runtime $target_repository/ echo "Copied Runtime" rm -rf $target_repository/Editor -cp -R ../Editor $target_repository/ +cp -R Editor $target_repository/ echo "Copied Editor" rm -rf $target_repository/Samples -cp -R ../Samples $target_repository/ +cp -R Samples $target_repository/ echo "Copied Samples" rm -rf $target_repository/Tests -cp -R ../Tests $target_repository/ +cp -R Tests $target_repository/ echo "Copied Tests" -cp ../README.md* $target_repository +cp README.md* $target_repository echo "Copied README" + +cd $target_repository +git add . +git commit -m "Update to $curr_repo_name:$target_version" From 6c018d87eba94ac1739f87506c6b8ed5fdc1d82f Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Tue, 21 May 2019 17:43:50 +0800 Subject: [PATCH 10/52] Align with master. --- .npmignore | 3 --- CHANGELOG.md | 6 ------ QAReport.md | 2 +- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/.npmignore b/.npmignore index 29304c13..8d295a4d 100644 --- a/.npmignore +++ b/.npmignore @@ -24,6 +24,3 @@ utr_output/** .yamato/** *.zip* scripts~/** - -upm-ci~/** -TestRunnerOptions.json \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 164e8a95..41e226df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,14 +4,8 @@ All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [1.0.1-preview] - 2019-05-17 - -Bump the version number to avoid conflicts. - ## [1.0.0-preview] - 2019-03-01 -First release. - ### This is the first release of *Unity Package UIWidgets*. *just the first release* diff --git a/QAReport.md b/QAReport.md index 5de7eea4..26c5ba37 100644 --- a/QAReport.md +++ b/QAReport.md @@ -1,7 +1,7 @@ # Quality Report Use this file to outline the test strategy for this package. -## Version tested: [*1.0.0-preview*] +## Version tested: [*package version*] ## QA Owner: [*Add Name*] ## UX Owner: [*Add Name*] From b83d325d625af7436a0d4dd215b53821a51a2557 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Tue, 21 May 2019 17:57:29 +0800 Subject: [PATCH 11/52] Improve packman. --- scripts/packman | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/packman b/scripts/packman index 602ecbc0..7e4531f9 100755 --- a/scripts/packman +++ b/scripts/packman @@ -26,6 +26,14 @@ if [ "$#" != "1" ]; then git clone $repo_url $target_repository else target_repository=`cd $1; pwd; cd - > /dev/null` + current_directory=`pwd` + cd $target_repository + if [ "`git remote get-url origin`" != "$repo_url" ]; then + cd $current_directory + echo "Target repository is not pointing to $repo_url" + exit -1 + fi + cd $current_directory fi if ! [ -d "$target_repository" ]; then From b041d71f0820098b9fc731055ef6d2d88ffb3dbe Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Tue, 21 May 2019 18:01:13 +0800 Subject: [PATCH 12/52] Improve packman. --- scripts/packman | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/scripts/packman b/scripts/packman index 7e4531f9..15cac8e1 100755 --- a/scripts/packman +++ b/scripts/packman @@ -26,21 +26,23 @@ if [ "$#" != "1" ]; then git clone $repo_url $target_repository else target_repository=`cd $1; pwd; cd - > /dev/null` - current_directory=`pwd` - cd $target_repository - if [ "`git remote get-url origin`" != "$repo_url" ]; then - cd $current_directory - echo "Target repository is not pointing to $repo_url" - exit -1 - fi - cd $current_directory fi +# Check the validity of the target directory if ! [ -d "$target_repository" ]; then echo "Target respository ($target_repository) does not exist!" exit -1 fi +current_directory=`pwd` +cd $target_repository +if [ "`git remote get-url origin`" != "$repo_url" ]; then + cd $current_directory + echo "Target repository is not pointing to $repo_url" + exit -1 +fi +cd $current_directory + echo "Copying to $target_repository" # Copy the UIWidgets Repository to a temporary dir and From de33c16bc17e716f8b647021567c6073a1a1b18c Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 22 May 2019 09:58:41 +0800 Subject: [PATCH 13/52] Update Documentation to multi-file structure. --- Documentation~/CONTRIBUTING.md | 35 ++++ Documentation~/TableOfContents.md | 2 + Documentation~/index-zh.md | 256 +++++++++++++++++++++++++ Documentation~/index.md | 297 ++++++++++++++++++++++++++++++ 4 files changed, 590 insertions(+) create mode 100644 Documentation~/CONTRIBUTING.md create mode 100644 Documentation~/TableOfContents.md create mode 100644 Documentation~/index-zh.md create mode 100644 Documentation~/index.md diff --git a/Documentation~/CONTRIBUTING.md b/Documentation~/CONTRIBUTING.md new file mode 100644 index 00000000..3f1e2571 --- /dev/null +++ b/Documentation~/CONTRIBUTING.md @@ -0,0 +1,35 @@ +# Contributing + +## If you are interested in contributing, here are some ground rules: + +### Code Style (using JetBrains Rider) +1. **Import the Customized Code Cleanup Settings**: Open Preferences -> Manage Layers, +Choose 'Solution "\" personal' and Click "Add Layer" ("+") -> "Open Settings File...". +and Open the file "UIWidgetCleanupPlugin.DotSettings" under \/Packages/com.unity.uiwidgets/" + +2. **Cleanup Code style using the Customized Code Cleanup Settings**: Open Code -> Code Cleanup, +Pick a Cleanup scope as you want and Choose "UIWidgets" as the "Code cleanup profile", then click "OK" + +3. **Refine Code Style Rules**: Edit the ".editorconfig" file under \/Packages/com.unity.uiwidgets/". Visit + https://www.jetbrains.com/help/rider/EditorConfig_Index.html for the detailed. + +### Generate Code. + +Code files ending with ".gen.cs" are auto generated. Follow these steps to generate them: + +1. **Go to scripts Folder and Run npm install**: +``` +cd /Packages/com.unity.uiwidgets/scripts~ +npm install +``` + +2. **Run the codegen Command**: +``` +node uiwidgets-cli.js codegen . generate mixin code +``` + + +## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +## Once you have a change ready following these ground rules. Simply make a pull request diff --git a/Documentation~/TableOfContents.md b/Documentation~/TableOfContents.md new file mode 100644 index 00000000..c1525550 --- /dev/null +++ b/Documentation~/TableOfContents.md @@ -0,0 +1,2 @@ +* [UIWidgets Documentation](index) +* [UIWidgets中文文档](index-zh) diff --git a/Documentation~/index-zh.md b/Documentation~/index-zh.md new file mode 100644 index 00000000..b8b1a25f --- /dev/null +++ b/Documentation~/index-zh.md @@ -0,0 +1,256 @@ +# UIWidgets + + +## 介绍 + +UIWidgets是Unity编辑器的一个插件包,可帮助开发人员通过Unity引擎来创建、调试和部署高效的跨平台应用。 + +UIWidgets主要来自[Flutter](https://github.com/flutter/flutter)。但UIWidgets通过使用强大的Unity引擎为开发人员提供了许多新功能,显著地改进他们开发的应用性能和工作流程。 + +#### 效率 +通过使用最新的Unity渲染SDK,UIWidgets应用可以非常快速地运行并且大多数时间保持大于60fps的速度。 + +#### 跨平台 +与任何其他Unity项目一样,UIWidgets应用可以直接部署在各种平台上,包括PC,移动设备和网页等。 + +#### 多媒体支持 +除了基本的2D UI之外,开发人员还能够将3D模型,音频,粒子系统添加到UIWidgets应用中。 + +#### 开发者友好 +开发者可以使用许多高级工具,如CPU/GPU Profiling和FPS Profiling,直接在Unity Editor中调试UIWidgets应用。 + +### Example + +
    + + + + +
    + + + + + + + +
    + +## 使用要求 + +#### Unity +安装 Unity 2018.3 或更高版本。 你可以从[https://unity3d.com/get-unity/download](https://unity3d.com/get-unity/download)下载最新的Unity。 + +#### UIWidgets包 + +访问我们的Github存储库 [https://github.com/UnityTech/UIWidgets](https://github.com/UnityTech/UIWidgets)下载最新的UIWidgets包。 + +将下载的包文件夹移动到Unity项目的Package文件夹中。 + +通常,你可以在控制台(或终端)应用程序中输入下面的代码来完成这个操作: + + ```none + cd /Packages + git clone https://github.com/UnityTech/UIWidgets.git com.unity.uiwidgets + ``` + +## 入门指南 + +#### 一、 概观 +在本教程中,我们将创建一个非常简单的UIWidgets应用。 该应用只包含文本标签和按钮。 文本标签将计算按钮上的点击次数。 + +首先,请打开或创建Unity项目并使用Unity编辑器打开它。 + +然后打开Project Settings,转到Player部分并**将“UIWidgets_DEBUG”添加到Scripting Define Symbols字段中。** + +这样就启动了UIWidgets的调试模式。 在之后发布版本的时候清空这个字段。 + +#### 二、 场景构建 + +UIWidgets应用通常构建在Unity UI Canvas上。 请按照以下步骤在Unity中创建一个 +UI Canvas。 +1. 选择 File > New Scene来创建一个新场景。 +2. 选择 GameObject > UI > Canvas 在场景中创建UI Canvas。 +3. 右键单击Canvas并选择UI > Panel,将面板(即面板1)添加到UI Canvas中。 然后删除面板中的 **Image** 组件。 + +#### 三、创建小部件 + +UIWidgets应用是用**C#脚本**来编写的。 请按照以下步骤创建应用程序并在Unity编辑器中播放。 +1. 创建一个新C#脚本,命名为“UIWidgetsExample.cs”,并将以下代码粘贴到其中。 + +```none + using System.Collections.Generic; + using Unity.UIWidgets.animation; + using Unity.UIWidgets.engine; + using Unity.UIWidgets.foundation; + using Unity.UIWidgets.material; + using Unity.UIWidgets.painting; + using Unity.UIWidgets.ui; + using Unity.UIWidgets.widgets; + using UnityEngine; + using FontStyle = Unity.UIWidgets.ui.FontStyle; + + namespace UIWidgetsSample { + public class UIWidgetsExample : UIWidgetsPanel { + protected override void OnEnable() { + // if you want to use your own font or font icons. + // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "font family name"); + + // load custom font with weight & style. The font weight & style corresponds to fontWeight, fontStyle of + // a TextStyle object + // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "Roboto", FontWeight.w500, + // FontStyle.italic); + + // add material icons, familyName must be "Material Icons" + // FontManager.instance.addFont(Resources.Load(path: "path to material icons"), "Material Icons"); + + base.OnEnable(); + } + + protected override Widget createWidget() { + return new WidgetsApp( + home: new ExampleApp(), + pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) => + new PageRouteBuilder( + settings: settings, + pageBuilder: (BuildContext context, Animation animation, + Animation secondaryAnimation) => builder(context) + ) + ); + } + + class ExampleApp : StatefulWidget { + public ExampleApp(Key key = null) : base(key) { + } + + public override State createState() { + return new ExampleState(); + } + } + + class ExampleState : State { + int counter = 0; + + public override Widget build(BuildContext context) { + return new Column( + children: new List { + new Text("Counter: " + this.counter), + new GestureDetector( + onTap: () => { + this.setState(() => { + this.counter++; + }); + }, + child: new Container( + padding: EdgeInsets.symmetric(20, 20), + color: Colors.blue, + child: new Text("Click Me") + ) + ) + } + ); + } + } + } + } +``` + +2. 保存此脚本,并将其附加到Panel 1中作为其组件。 +3. 在Unity编辑器中,点击Play按钮来启动应用。 + +#### 四、构建应用程序 + +最后,你可以按以下步骤将UIWidgets应用构建成适用于任何特定平台的应用程序包。 +1. 选择**File** > **Build Settings...**打开Build Settings面板。 +2. 选择目标平台,点击Build。 之后Unity编辑器将自动组装所有相关资源并生成最终的应用程序包。 + +#### 五、如何加载图像? +1. 将你的图像文件,如image1.png,放在Resources文件夹中。 +2. 你可以在同一文件夹中添加image1@2.png和image1@3.png以支持高清屏幕显示。 +3. 使用Image.asset(“image1”)加载图像。 注意:因为是在Unity中,所以不需要添加.png后缀。 + + +UIWidgets也支持Gif! +1. 假设你有一个loading1.gif文件,将其重命名为loading1.gif.bytes并复制到Resources文件夹。 +2. 你可以在同一文件夹中添加loading1@2.gif.bytes和loading1@3.gif.bytes以支持高清屏幕显示。 +3. 使用Image.asset(“loading1.gif”)加载gif图像。 + +#### 六、在安卓上显示状态栏 +当一个Unity项目运行在Android设备上时,状态栏是默认隐藏且无法在编辑内进行调整的。 +如果您希望在您的UIWidgets App中显示状态栏,您可以使用这个[解决方案](https://github.com/Over17/UnityShowAndroidStatusBar)。我们将尽快推出我们自己的解决方案,并保证届时开发者可以进行无缝切换。 + +此外,为了让上述插件在Android P及以上Android系统中正常工作,请勾选上"Player Settings"中的"Render Outside Safe Area"选项。 + +#### 七、自动调节帧率 +如果要使得构建出的应用能够自动调节帧率,请打开Project Settings,将构建目标平台对应的Quality选项卡中的V Sync Count设置为Don't Sync。 +默认的逻辑是在界面静止时将帧率降低为25,在界面变动时将帧率提高至60。 +如果您需要修改帧率升高或降低时的行为,请将`Window.onFrameRateSpeedUp`和/或`Window.onFrameRateCoolDown`设置为您自己的函数。 + +#### 八、WebGL Canvas分辨率调整插件 +因为浏览器中Canvas的宽高和其在显示器上的像素数可能不一致,所以构建出的WebGL程序中画面可能会模糊。 +插件`Plugins/platform/webgl/UIWidgetsCanvasDevicePixelRatio_20xx.x.jslib`(目前有2018.3和2019.1)解决了这个问题。 +请根据您的项目的Unity版本选择对应的插件,并禁用此插件的其他版本。方法如下:在Project面板中选中该插件,在Inspector面板中的Select platforms for plugin中,去掉WebGL后面的对勾。 +如果您因为任何原因需要完全禁止此插件的功能,请按上述方法禁用此插件的所有版本。 + +此插件覆盖了Unity WebGL构建模块中的如下参数: +``` +JS_SystemInfo_GetWidth +JS_SystemInfo_GetHeight +JS_SystemInfo_GetCurrentCanvasWidth +JS_SystemInfo_GetCurrentCanvasHeight +$Browser +$JSEvents +``` +如果您需要实现自己的WebGL插件,并且您的插件覆盖了这些参数中的至少一种,您需要采用上文中提到的方法禁用`UIWidgetsCanvasDevicePixelRatio`插件,以防止可能的冲突。 +如果您仍然需要此插件所提供的功能,您可以手动将此插件对Unity WebGL构建模块的修改应用到您的插件中。 +`UIWidgetsCanvasDevicePixelRatio`插件中所有的修改之处都以`////////// Modification Start ////////////`和`////////// Modification End ////////////`标识。 +在被标识的代码中,所有乘/除以`devicePixelRatio`都来自于我们的修改。 +若您需要详细了解此插件所修改的脚本,请参考您的Unity Editor安装目录下的`PlaybackEngines/WebGLSupport/BuildTools/lib`文件夹中的`SystemInfo.js`和`UnityNativeJS/UnityNative.js`。 + +#### 九、图片导入设置 +默认情况下,Unity会将导入图片的宽和高放缩为最近的等于2的幂的整数。 +在UIWidgets中使用图片时,记得将这一特性关闭,以免图片被意外放缩,方法如下:在Project面板中选中图片,在"Inspector"面板中将"Non Power of 2"(在"Advanced"中)设置为"None"。 + +## 调试UIWidgets应用程序 + +#### 定义UIWidgets_DEBUG +我们建议在Unity编辑器中定义 UIWidgets_DEBUG 脚本符号,这将打开UIWidgets中的调试断言(debug assertion),有助于更早发现潜在的Bug。 +因此选择 **Player Settings** > **Other Settings** > **Configuration** > **Scripting Define Symbols** ,并添加 UIWidgets_DEBUG。 +该符号仅供调试使用,请在发布版本中删除它。 + +#### UIWidgets Inspector + +UIWidgets Inspector工具用于可视化和浏览窗口小部件树。 你可以在Unity编辑器的**Window** > **Analysis** > **UIWidget Inspector** 中的找到它。 + +注意 +- 需要定义 UIWidgets_DEBUG 使inspector正常工作。 +- Inspector目前仅适用于编辑器的播放模式,目前不支持独立版本的应用程序。 + + +## 学习 + +#### 示例 + +你可以在**Samples**文件夹的UIWidgets包中找到一些精心挑选的UIWidgets应用示例,并通过这些示例来开始你的学习。请随意尝试并进行修改以查看结果。 + +你也可以在支持**UIWidgets**的编辑器中,点击主菜单上的UIWidgets,并在下拉窗口中选择一个示例。 + +#### Wiki + +目前开发团队仍在改进UIWidgets Wiki。 由于UIWidgets主要来源于Flutter,你也可以参考Flutter Wiki中与UIWidgets API对应部分的详细描述。同时,你可以加入我们的讨论组( https://connect.unity.com/g/uiwidgets )。 + +#### 常问问题解答 + +| 问题 | 回答 | +| :-----------------------------------------------| ---------------------: | +| 我可以使用UIWidgets创建独立应用吗? | 可以 | +| 我可以使用UIWidgets构建游戏UI吗? | 可以 | +| 我可以使用UIWidgets开发Unity编辑器插件吗? | 可以 | +| UIWidgets是UGUI / NGUI的扩展吗? | 不是 | +| UIWidgets只是Flutter的副本吗? | 不是 | +| 我可以通过简单的拖放操作来创建带有UIWidgets的UI吗? | 不可以 | +| 我是否需要付费使用UIWidgets? | 不需要 | +| 有推荐的适用于UIWidgets的IDE吗? | Rider, VSCode(Open .sln) | + +## 如何贡献 +请查看[CONTRIBUTING](CONTRIBUTING) diff --git a/Documentation~/index.md b/Documentation~/index.md new file mode 100644 index 00000000..d074a365 --- /dev/null +++ b/Documentation~/index.md @@ -0,0 +1,297 @@ +# UIWidgets + +## Introduction + +UIWidgets is a plugin package for Unity Editor which helps developers to create, debug and deploy efficient, +cross-platform Apps using the Unity Engine. + +UIWidgets is mainly derived from [Flutter](https://github.com/flutter/flutter). However, taking advantage of +the powerful Unity Engine, it offers developers many new features to improve their Apps +as well as the develop workflow significantly. + + +#### Efficiency +Using the latest Unity rendering SDKs, a UIWidgets App can run very fast and keep >60fps in most times. + + +#### Cross-Platform +A UIWidgets App can be deployed on all kinds of platforms including PCs, mobile devices and web page directly, like +any other Unity projects. + +#### Multimedia Support +Except for basic 2D UIs, developers are also able to include 3D Models, audios, particle-systems to their UIWidgets Apps. + + +#### Developer-Friendly +A UIWidgets App can be debug in the Unity Editor directly with many advanced tools like +CPU/GPU Profiling, FPS Profiling. + + +### Example + +
    + + + + +
    + + + + + + + +
    + +## Requirement + +#### Unity +Install **Unity 2018.3** or above. You can download the latest Unity on https://unity3d.com/get-unity/download. + +#### UIWidgets Package +Visit our Github repository https://github.com/UnityTech/UIWidgets + to download the latest UIWidgets package. + +Move the downloaded package folder into the **Package** folder of your Unity project. + +Generally, you can make it using a console (or terminal) application by just a few commands as below: + + ```none + cd /Packages + git clone https://github.com/UnityTech/UIWidgets.git com.unity.uiwidgets + ``` + +## Getting Start + +#### i. Overview +In this tutorial, we will create a very simple UIWidgets App as the kick-starter. The app contains +only a text label and a button. The text label will count the times of clicks upon the button. + +First of all, please open or create a Unity Project and open it with Unity Editor. + +And then open Project Settings, go to Player section and **add "UIWidgets_DEBUG" to the Scripting Define Symbols field.** +This enables the debug mode of UIWidgets for your development. Remove this for your release build afterwards. + +#### ii. Scene Build +A UIWidgets App is usually built upon a Unity UI Canvas. Please follow the steps to create a +UI Canvas in Unity. +1. Create a new Scene by "File -> New Scene"; +1. Create a UI Canvas in the scene by "GameObject -> UI -> Canvas"; +1. Add a Panel (i.e., **Panel 1**) to the UI Canvas by right click on the Canvas and select "UI -> Panel". Then remove the +**Image** Component from the Panel. + +#### iii. Create Widget +A UIWidgets App is written in **C# Scripts**. Please follow the steps to create an App and play it +in Unity Editor. + +1. Create a new C# Script named "UIWidgetsExample.cs" and paste the following codes into it. + ```none + using System.Collections.Generic; + using Unity.UIWidgets.animation; + using Unity.UIWidgets.engine; + using Unity.UIWidgets.foundation; + using Unity.UIWidgets.material; + using Unity.UIWidgets.painting; + using Unity.UIWidgets.ui; + using Unity.UIWidgets.widgets; + using UnityEngine; + using FontStyle = Unity.UIWidgets.ui.FontStyle; + + namespace UIWidgetsSample { + public class UIWidgetsExample : UIWidgetsPanel { + protected override void OnEnable() { + // if you want to use your own font or font icons. + // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "font family name"); + + // load custom font with weight & style. The font weight & style corresponds to fontWeight, fontStyle of + // a TextStyle object + // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "Roboto", FontWeight.w500, + // FontStyle.italic); + + // add material icons, familyName must be "Material Icons" + // FontManager.instance.addFont(Resources.Load(path: "path to material icons"), "Material Icons"); + + base.OnEnable(); + } + + protected override Widget createWidget() { + return new WidgetsApp( + home: new ExampleApp(), + pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) => + new PageRouteBuilder( + settings: settings, + pageBuilder: (BuildContext context, Animation animation, + Animation secondaryAnimation) => builder(context) + ) + ); + } + + class ExampleApp : StatefulWidget { + public ExampleApp(Key key = null) : base(key) { + } + + public override State createState() { + return new ExampleState(); + } + } + + class ExampleState : State { + int counter = 0; + + public override Widget build(BuildContext context) { + return new Column( + children: new List { + new Text("Counter: " + this.counter), + new GestureDetector( + onTap: () => { + this.setState(() + => { + this.counter++; + }); + }, + child: new Container( + padding: EdgeInsets.symmetric(20, 20), + color: Colors.blue, + child: new Text("Click Me") + ) + ) + } + ); + } + } + } + } + ``` + +1. Save this script and attach it to **Panel 1** as its component. +1. Press the "Play" Button to start the App in Unity Editor. + +#### iv. Build App +Finally, the UIWidgets App can be built to packages for any specific platform by the following steps. +1. Open the Build Settings Panel by "File -> Build Settings..." +1. Choose a target platform and click "Build". Then the Unity Editor will automatically assemble +all relevant resources and generate the final App package. + +#### How to load images? +1. Put your images files in Resources folder. e.g. image1.png. +2. You can add image1@2.png and image1@3.png in the same folder to support HD screens. +3. Use Image.asset("image1") to load the image. Note: as in Unity, ".png" is not needed. + +UIWidgets supports Gif as well! +1. Suppose you have loading1.gif. Rename it to loading1.gif.bytes and copy it to Resources folder. +2. You can add loading1@2.gif.bytes and loading1@3.gif.bytes in the same folder to support HD screens. +3. Use Image.asset("loading1.gif") to load the gif images. + +#### Using Window Scope +If you see the error ```AssertionError: Window.instance is null``` or null pointer error of ```Window.instance```, +it means the code is not running in the window scope. In this case, you can enclose your code +with window scope as below: +``` +using(WindowProvider.of(your gameObject with UIWidgetsPanel).getScope()) { + // code dealing with UIWidgets, + // e.g. setState(() => {....}) +} +``` + +This is needed if the code is in methods +not invoked by UIWidgets. For example, if the code is in ```completed``` callback of ```UnityWebRequest```, +you need to enclose them with window scope. +Please see [HttpRequestSample](./Samples/UIWidgetSample/HttpRequestSample.cs) for detail. +For callback/event handler methods from UIWidgets (e.g ```Widget.build, State.initState...```), you don't need do +it yourself, since the framework ensure it's in window scope. + +#### Show Status Bar on Android +Status bar is always hidden by default when an Unity project is running on an Android device. If you + want to show the status bar in your App, this + [solution](https://github.com/Over17/UnityShowAndroidStatusBar) seems to be + compatible to UIWidgets, therefore can be used as a good option before we release our + full support solution on this issue. + + Besides, + please set "Render Outside Safe Area" to true in the "Player Settings" to make this plugin working properly on Android P or later. + + + + +#### Automatically Adjust Frame Rate + +To build an App that is able to adjust the frame rate automatically, please open Project Settings, and in the Quality tab, set the "V Sync Count" option of the target platform to "Don't Sync". +The default logic is to set the frame rate to 25 when the screen is static, and change the frame rate to 60 whenever the screen changes. +If you would like to modify the behavior of speeding up or cooling down the frame rate, please set `Window.onFrameRateSpeedUp` and/or `Window.onFrameRateCoolDown` to your own functions. + +#### WebGL Canvas Device Pixel Ratio Plugin +The width and height of the Canvas in browser may differ from the number of pixels the Canvas occupies on the screen. +Therefore, the image may blur in the builded WebGL program. +The Plugin `Plugins/platform/webgl/UIWidgetsCanvasDevicePixelRatio_20xx.x.jslib` (2018.3 and 2019.1 for now) solves this issue. +Please select the plugin of the Unity version corresponding to your project, and disable other versions of this plugin, as follows: select this plugin in the **Project** panel, and uncheck **WebGL** under **Select platforms for plugin** in the **Inspector** panel. +If you need to disable this plugin for any reason, please disable all the versions of this plugin as described above. + +This plugin overrides the following parameters in the Unity WebGL building module: +``` +JS_SystemInfo_GetWidth +JS_SystemInfo_GetHeight +JS_SystemInfo_GetCurrentCanvasWidth +JS_SystemInfo_GetCurrentCanvasHeight +$Browser +$JSEvents +``` +If you would like to implement your own WebGL plugin, and your plugin overrides at least one of the above parameters, you need to disable the `UIWidgetsCanvasDevicePixelRatio` plugin in the above mentioned way to avoid possible conflicts. +If you still need the function provided by this plugin, you can mannually apply the modification to Unity WebGL building module introduced in this plugin. +All the modifications introduced in `UIWidgetsCanvasDevicePixelRatio` are marked by `////////// Modifcation Start ////////////` and `////////// Modifcation End ////////////`. +In the marked codes, all the multiplications and divisions with `devicePixelRatio` are introduced by our modification. +To learn about the original script in detail, please refer to `SystemInfo.js` and `UnityNativeJS/UnityNative.js` in `PlaybackEngines/WebGLSupport/BuildTools/lib` in your Unity Editor installation. + +#### Image Import Setting +Unity, by default, resizes the width and height of an imported image to the nearest integer that is a power of 2. +In UIWidgets, you should almost always disable this by selecting the image in the "Project" panel, then in the "Inspector" panel set the "Non Power of 2" option (in "Advanced") to "None", to prevent your image from being resized unexpectedly. + +## Debug UIWidgets Application + +#### Define UIWidgets_DEBUG +It's recommended to define the **UIWidgets_DEBUG** script symbol in editor, this will turn on +debug assertion in UIWidgets, which will help to find potential bugs earlier. To do this: +please go to **Player Settings -> Other Settings -> Configuration -> Scripting Define Symbols**, +and add **UIWidgets_DEBUG**. +The symbol is for debug purpose, please remove it from your release build. + +#### UIWidgets Inspector +The UIWidgets Inspector tool is for visualizing and exploring the widget trees. You can find it +via *Window/Analysis/UIWidgets* inspector in Editor menu. +**Note** +* **UIWidgets_DEBUG** needs to be define for inspector to work properly. +* Inspector currently only works in Editor Play Mode, inspect standalone built application is not supported for now. + +## Learn + +#### Samples +You can find many UIWidgets App samples in the UIWidgets package in the **Samples** folder. +Feel free to try them out and make modifications to see the results. +To get started, the UIWidgetsTheatre scene provides you +a list of carefully selected samples to start with. + +You can also try UIWidgets-based Editor windows by clicking **UIWidgetsTest** on the main menu +and open one of the dropdown samples. + +#### Wiki +The develop team is still working on the UIWidgets Wiki. However, since UIWidgets is mainly derived from Flutter, + you can refer to Flutter Wiki to access detailed descriptions of UIWidgets APIs + from those of their Flutter counterparts. +Meanwhile, you can join the discussion channel at (https://connect.unity.com/g/uiwidgets) + +#### FAQ + +| Question | Answer | +| :-----------------------------------------------| ---------------------: | +| Can I create standalone App using UIWidgets? | **Yes** | +| Can I use UIWidgets to build game UIs? | **Yes** | +| Can I develop Unity Editor plugins using UIWidgets? | **Yes** | +| Is UIWidgets a extension of UGUI/NGUI? | **No** | +| Is UIWidgets just a copy of Flutter? | **No** | +| Can I create UI with UIWidgets by simply drag&drop? | **No** | +| Do I have to pay for using UIWidgets? | **No** | +| Any IDE recommendation for UIWidgets? | **Rider, VSCode(Open .sln)** | + +## How to Contribute + +Check [CONTRIBUTING](CONTRIBUTING) From d6de8ee6d9b6bb95ba7ef5095b1dad8e22142ba3 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 22 May 2019 10:12:25 +0800 Subject: [PATCH 14/52] Update packman script. --- scripts/packman | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/packman b/scripts/packman index 15cac8e1..2af69a1b 100755 --- a/scripts/packman +++ b/scripts/packman @@ -2,7 +2,7 @@ repo_url="git@github.cds.internal.unity3d.com:unity/com.unity.uiwidgets.git" package_name="com.unity.uiwidgets" -target_version='7cbf99f1b' +target_version='de33c16b' function usage() { echo "$0 [path to target repository]" @@ -13,6 +13,11 @@ function usage() { exit -1 } +if [ "$0" != "./`basename $0`" ]; then + echo "This script must be invoked in the folder containing this script." + exit -1 +fi + if [ "$1" == "-h" ]; then usage fi From b9e5b345a11d9c33df84ee9c7e59628614eb810d Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 22 May 2019 10:32:01 +0800 Subject: [PATCH 15/52] Update packman to generate documentation automatically. --- Documentation~/CONTRIBUTING.md | 35 --- Documentation~/TableOfContents.md | 2 - Documentation~/com.unity.uiwidgets.md | 299 -------------------------- Documentation~/index-zh.md | 256 ---------------------- Documentation~/index.md | 297 ------------------------- scripts/packman | 9 +- 6 files changed, 8 insertions(+), 890 deletions(-) delete mode 100644 Documentation~/CONTRIBUTING.md delete mode 100644 Documentation~/TableOfContents.md delete mode 100644 Documentation~/com.unity.uiwidgets.md delete mode 100644 Documentation~/index-zh.md delete mode 100644 Documentation~/index.md diff --git a/Documentation~/CONTRIBUTING.md b/Documentation~/CONTRIBUTING.md deleted file mode 100644 index 3f1e2571..00000000 --- a/Documentation~/CONTRIBUTING.md +++ /dev/null @@ -1,35 +0,0 @@ -# Contributing - -## If you are interested in contributing, here are some ground rules: - -### Code Style (using JetBrains Rider) -1. **Import the Customized Code Cleanup Settings**: Open Preferences -> Manage Layers, -Choose 'Solution "\" personal' and Click "Add Layer" ("+") -> "Open Settings File...". -and Open the file "UIWidgetCleanupPlugin.DotSettings" under \/Packages/com.unity.uiwidgets/" - -2. **Cleanup Code style using the Customized Code Cleanup Settings**: Open Code -> Code Cleanup, -Pick a Cleanup scope as you want and Choose "UIWidgets" as the "Code cleanup profile", then click "OK" - -3. **Refine Code Style Rules**: Edit the ".editorconfig" file under \/Packages/com.unity.uiwidgets/". Visit - https://www.jetbrains.com/help/rider/EditorConfig_Index.html for the detailed. - -### Generate Code. - -Code files ending with ".gen.cs" are auto generated. Follow these steps to generate them: - -1. **Go to scripts Folder and Run npm install**: -``` -cd /Packages/com.unity.uiwidgets/scripts~ -npm install -``` - -2. **Run the codegen Command**: -``` -node uiwidgets-cli.js codegen . generate mixin code -``` - - -## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) -By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. - -## Once you have a change ready following these ground rules. Simply make a pull request diff --git a/Documentation~/TableOfContents.md b/Documentation~/TableOfContents.md deleted file mode 100644 index c1525550..00000000 --- a/Documentation~/TableOfContents.md +++ /dev/null @@ -1,2 +0,0 @@ -* [UIWidgets Documentation](index) -* [UIWidgets中文文档](index-zh) diff --git a/Documentation~/com.unity.uiwidgets.md b/Documentation~/com.unity.uiwidgets.md deleted file mode 100644 index 1f8d9862..00000000 --- a/Documentation~/com.unity.uiwidgets.md +++ /dev/null @@ -1,299 +0,0 @@ -# UIWidgets -[中文](README-ZH.md) - - -## Introduction - -UIWidgets is a plugin package for Unity Editor which helps developers to create, debug and deploy efficient, -cross-platform Apps using the Unity Engine. - -UIWidgets is mainly derived from [Flutter](https://github.com/flutter/flutter). However, taking advantage of -the powerful Unity Engine, it offers developers many new features to improve their Apps -as well as the develop workflow significantly. - - -#### Efficiency -Using the latest Unity rendering SDKs, a UIWidgets App can run very fast and keep >60fps in most times. - - -#### Cross-Platform -A UIWidgets App can be deployed on all kinds of platforms including PCs, mobile devices and web page directly, like -any other Unity projects. - -#### Multimedia Support -Except for basic 2D UIs, developers are also able to include 3D Models, audios, particle-systems to their UIWidgets Apps. - - -#### Developer-Friendly -A UIWidgets App can be debug in the Unity Editor directly with many advanced tools like -CPU/GPU Profiling, FPS Profiling. - - -### Example - -
    - - - - -
    - - - - - - - -
    - -## Requirement - -#### Unity -Install **Unity 2018.3** or above. You can download the latest Unity on https://unity3d.com/get-unity/download. - -#### UIWidgets Package -Visit our Github repository https://github.com/UnityTech/UIWidgets - to download the latest UIWidgets package. - -Move the downloaded package folder into the **Package** folder of your Unity project. - -Generally, you can make it using a console (or terminal) application by just a few commands as below: - - ```none - cd /Packages - git clone https://github.com/UnityTech/UIWidgets.git com.unity.uiwidgets - ``` - -## Getting Start - -#### i. Overview -In this tutorial, we will create a very simple UIWidgets App as the kick-starter. The app contains -only a text label and a button. The text label will count the times of clicks upon the button. - -First of all, please open or create a Unity Project and open it with Unity Editor. - -And then open Project Settings, go to Player section and **add "UIWidgets_DEBUG" to the Scripting Define Symbols field.** -This enables the debug mode of UIWidgets for your development. Remove this for your release build afterwards. - -#### ii. Scene Build -A UIWidgets App is usually built upon a Unity UI Canvas. Please follow the steps to create a -UI Canvas in Unity. -1. Create a new Scene by "File -> New Scene"; -1. Create a UI Canvas in the scene by "GameObject -> UI -> Canvas"; -1. Add a Panel (i.e., **Panel 1**) to the UI Canvas by right click on the Canvas and select "UI -> Panel". Then remove the -**Image** Component from the Panel. - -#### iii. Create Widget -A UIWidgets App is written in **C# Scripts**. Please follow the steps to create an App and play it -in Unity Editor. - -1. Create a new C# Script named "UIWidgetsExample.cs" and paste the following codes into it. - ```none - using System.Collections.Generic; - using Unity.UIWidgets.animation; - using Unity.UIWidgets.engine; - using Unity.UIWidgets.foundation; - using Unity.UIWidgets.material; - using Unity.UIWidgets.painting; - using Unity.UIWidgets.ui; - using Unity.UIWidgets.widgets; - using UnityEngine; - using FontStyle = Unity.UIWidgets.ui.FontStyle; - - namespace UIWidgetsSample { - public class UIWidgetsExample : UIWidgetsPanel { - protected override void OnEnable() { - // if you want to use your own font or font icons. - // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "font family name"); - - // load custom font with weight & style. The font weight & style corresponds to fontWeight, fontStyle of - // a TextStyle object - // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "Roboto", FontWeight.w500, - // FontStyle.italic); - - // add material icons, familyName must be "Material Icons" - // FontManager.instance.addFont(Resources.Load(path: "path to material icons"), "Material Icons"); - - base.OnEnable(); - } - - protected override Widget createWidget() { - return new WidgetsApp( - home: new ExampleApp(), - pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) => - new PageRouteBuilder( - settings: settings, - pageBuilder: (BuildContext context, Animation animation, - Animation secondaryAnimation) => builder(context) - ) - ); - } - - class ExampleApp : StatefulWidget { - public ExampleApp(Key key = null) : base(key) { - } - - public override State createState() { - return new ExampleState(); - } - } - - class ExampleState : State { - int counter = 0; - - public override Widget build(BuildContext context) { - return new Column( - children: new List { - new Text("Counter: " + this.counter), - new GestureDetector( - onTap: () => { - this.setState(() - => { - this.counter++; - }); - }, - child: new Container( - padding: EdgeInsets.symmetric(20, 20), - color: Colors.blue, - child: new Text("Click Me") - ) - ) - } - ); - } - } - } - } - ``` - -1. Save this script and attach it to **Panel 1** as its component. -1. Press the "Play" Button to start the App in Unity Editor. - -#### iv. Build App -Finally, the UIWidgets App can be built to packages for any specific platform by the following steps. -1. Open the Build Settings Panel by "File -> Build Settings..." -1. Choose a target platform and click "Build". Then the Unity Editor will automatically assemble -all relevant resources and generate the final App package. - -#### How to load images? -1. Put your images files in Resources folder. e.g. image1.png. -2. You can add image1@2.png and image1@3.png in the same folder to support HD screens. -3. Use Image.asset("image1") to load the image. Note: as in Unity, ".png" is not needed. - -UIWidgets supports Gif as well! -1. Suppose you have loading1.gif. Rename it to loading1.gif.bytes and copy it to Resources folder. -2. You can add loading1@2.gif.bytes and loading1@3.gif.bytes in the same folder to support HD screens. -3. Use Image.asset("loading1.gif") to load the gif images. - -#### Using Window Scope -If you see the error ```AssertionError: Window.instance is null``` or null pointer error of ```Window.instance```, -it means the code is not running in the window scope. In this case, you can enclose your code -with window scope as below: -``` -using(WindowProvider.of(your gameObject with UIWidgetsPanel).getScope()) { - // code dealing with UIWidgets, - // e.g. setState(() => {....}) -} -``` - -This is needed if the code is in methods -not invoked by UIWidgets. For example, if the code is in ```completed``` callback of ```UnityWebRequest```, -you need to enclose them with window scope. -Please see [HttpRequestSample](./Samples/UIWidgetSample/HttpRequestSample.cs) for detail. -For callback/event handler methods from UIWidgets (e.g ```Widget.build, State.initState...```), you don't need do -it yourself, since the framework ensure it's in window scope. - -#### Show Status Bar on Android -Status bar is always hidden by default when an Unity project is running on an Android device. If you - want to show the status bar in your App, this - [solution](https://github.com/Over17/UnityShowAndroidStatusBar) seems to be - compatible to UIWidgets, therefore can be used as a good option before we release our - full support solution on this issue. - - Besides, - please set "Render Outside Safe Area" to true in the "Player Settings" to make this plugin working properly on Android P or later. - - - - -#### Automatically Adjust Frame Rate - -To build an App that is able to adjust the frame rate automatically, please open Project Settings, and in the Quality tab, set the "V Sync Count" option of the target platform to "Don't Sync". -The default logic is to set the frame rate to 25 when the screen is static, and change the frame rate to 60 whenever the screen changes. -If you would like to modify the behavior of speeding up or cooling down the frame rate, please set `Window.onFrameRateSpeedUp` and/or `Window.onFrameRateCoolDown` to your own functions. - -#### WebGL Canvas Device Pixel Ratio Plugin -The width and height of the Canvas in browser may differ from the number of pixels the Canvas occupies on the screen. -Therefore, the image may blur in the builded WebGL program. -The Plugin `Plugins/platform/webgl/UIWidgetsCanvasDevicePixelRatio_20xx.x.jslib` (2018.3 and 2019.1 for now) solves this issue. -Please select the plugin of the Unity version corresponding to your project, and disable other versions of this plugin, as follows: select this plugin in the **Project** panel, and uncheck **WebGL** under **Select platforms for plugin** in the **Inspector** panel. -If you need to disable this plugin for any reason, please disable all the versions of this plugin as described above. - -This plugin overrides the following parameters in the Unity WebGL building module: -``` -JS_SystemInfo_GetWidth -JS_SystemInfo_GetHeight -JS_SystemInfo_GetCurrentCanvasWidth -JS_SystemInfo_GetCurrentCanvasHeight -$Browser -$JSEvents -``` -If you would like to implement your own WebGL plugin, and your plugin overrides at least one of the above parameters, you need to disable the `UIWidgetsCanvasDevicePixelRatio` plugin in the above mentioned way to avoid possible conflicts. -If you still need the function provided by this plugin, you can mannually apply the modification to Unity WebGL building module introduced in this plugin. -All the modifications introduced in `UIWidgetsCanvasDevicePixelRatio` are marked by `////////// Modifcation Start ////////////` and `////////// Modifcation End ////////////`. -In the marked codes, all the multiplications and divisions with `devicePixelRatio` are introduced by our modification. -To learn about the original script in detail, please refer to `SystemInfo.js` and `UnityNativeJS/UnityNative.js` in `PlaybackEngines/WebGLSupport/BuildTools/lib` in your Unity Editor installation. - -#### Image Import Setting -Unity, by default, resizes the width and height of an imported image to the nearest integer that is a power of 2. -In UIWidgets, you should almost always disable this by selecting the image in the "Project" panel, then in the "Inspector" panel set the "Non Power of 2" option (in "Advanced") to "None", to prevent your image from being resized unexpectedly. - -## Debug UIWidgets Application - -#### Define UIWidgets_DEBUG -It's recommended to define the **UIWidgets_DEBUG** script symbol in editor, this will turn on -debug assertion in UIWidgets, which will help to find potential bugs earlier. To do this: -please go to **Player Settings -> Other Settings -> Configuration -> Scripting Define Symbols**, -and add **UIWidgets_DEBUG**. -The symbol is for debug purpose, please remove it from your release build. - -#### UIWidgets Inspector -The UIWidgets Inspector tool is for visualizing and exploring the widget trees. You can find it -via *Window/Analysis/UIWidgets* inspector in Editor menu. -**Note** -* **UIWidgets_DEBUG** needs to be define for inspector to work properly. -* Inspector currently only works in Editor Play Mode, inspect standalone built application is not supported for now. - -## Learn - -#### Samples -You can find many UIWidgets App samples in the UIWidgets package in the **Samples** folder. -Feel free to try them out and make modifications to see the results. -To get started, the UIWidgetsTheatre scene provides you -a list of carefully selected samples to start with. - -You can also try UIWidgets-based Editor windows by clicking **UIWidgetsTest** on the main menu -and open one of the dropdown samples. - -#### Wiki -The develop team is still working on the UIWidgets Wiki. However, since UIWidgets is mainly derived from Flutter, - you can refer to Flutter Wiki to access detailed descriptions of UIWidgets APIs - from those of their Flutter counterparts. -Meanwhile, you can join the discussion channel at (https://connect.unity.com/g/uiwidgets) - -#### FAQ - -| Question | Answer | -| :-----------------------------------------------| ---------------------: | -| Can I create standalone App using UIWidgets? | **Yes** | -| Can I use UIWidgets to build game UIs? | **Yes** | -| Can I develop Unity Editor plugins using UIWidgets? | **Yes** | -| Is UIWidgets a extension of UGUI/NGUI? | **No** | -| Is UIWidgets just a copy of Flutter? | **No** | -| Can I create UI with UIWidgets by simply drag&drop? | **No** | -| Do I have to pay for using UIWidgets? | **No** | -| Any IDE recommendation for UIWidgets? | **Rider, VSCode(Open .sln)** | - -## How to Contribute - -Check [CONTRIBUTING.md](CONTRIBUTING.md) diff --git a/Documentation~/index-zh.md b/Documentation~/index-zh.md deleted file mode 100644 index b8b1a25f..00000000 --- a/Documentation~/index-zh.md +++ /dev/null @@ -1,256 +0,0 @@ -# UIWidgets - - -## 介绍 - -UIWidgets是Unity编辑器的一个插件包,可帮助开发人员通过Unity引擎来创建、调试和部署高效的跨平台应用。 - -UIWidgets主要来自[Flutter](https://github.com/flutter/flutter)。但UIWidgets通过使用强大的Unity引擎为开发人员提供了许多新功能,显著地改进他们开发的应用性能和工作流程。 - -#### 效率 -通过使用最新的Unity渲染SDK,UIWidgets应用可以非常快速地运行并且大多数时间保持大于60fps的速度。 - -#### 跨平台 -与任何其他Unity项目一样,UIWidgets应用可以直接部署在各种平台上,包括PC,移动设备和网页等。 - -#### 多媒体支持 -除了基本的2D UI之外,开发人员还能够将3D模型,音频,粒子系统添加到UIWidgets应用中。 - -#### 开发者友好 -开发者可以使用许多高级工具,如CPU/GPU Profiling和FPS Profiling,直接在Unity Editor中调试UIWidgets应用。 - -### Example - -
    - - - - -
    - - - - - - - -
    - -## 使用要求 - -#### Unity -安装 Unity 2018.3 或更高版本。 你可以从[https://unity3d.com/get-unity/download](https://unity3d.com/get-unity/download)下载最新的Unity。 - -#### UIWidgets包 - -访问我们的Github存储库 [https://github.com/UnityTech/UIWidgets](https://github.com/UnityTech/UIWidgets)下载最新的UIWidgets包。 - -将下载的包文件夹移动到Unity项目的Package文件夹中。 - -通常,你可以在控制台(或终端)应用程序中输入下面的代码来完成这个操作: - - ```none - cd /Packages - git clone https://github.com/UnityTech/UIWidgets.git com.unity.uiwidgets - ``` - -## 入门指南 - -#### 一、 概观 -在本教程中,我们将创建一个非常简单的UIWidgets应用。 该应用只包含文本标签和按钮。 文本标签将计算按钮上的点击次数。 - -首先,请打开或创建Unity项目并使用Unity编辑器打开它。 - -然后打开Project Settings,转到Player部分并**将“UIWidgets_DEBUG”添加到Scripting Define Symbols字段中。** - -这样就启动了UIWidgets的调试模式。 在之后发布版本的时候清空这个字段。 - -#### 二、 场景构建 - -UIWidgets应用通常构建在Unity UI Canvas上。 请按照以下步骤在Unity中创建一个 -UI Canvas。 -1. 选择 File > New Scene来创建一个新场景。 -2. 选择 GameObject > UI > Canvas 在场景中创建UI Canvas。 -3. 右键单击Canvas并选择UI > Panel,将面板(即面板1)添加到UI Canvas中。 然后删除面板中的 **Image** 组件。 - -#### 三、创建小部件 - -UIWidgets应用是用**C#脚本**来编写的。 请按照以下步骤创建应用程序并在Unity编辑器中播放。 -1. 创建一个新C#脚本,命名为“UIWidgetsExample.cs”,并将以下代码粘贴到其中。 - -```none - using System.Collections.Generic; - using Unity.UIWidgets.animation; - using Unity.UIWidgets.engine; - using Unity.UIWidgets.foundation; - using Unity.UIWidgets.material; - using Unity.UIWidgets.painting; - using Unity.UIWidgets.ui; - using Unity.UIWidgets.widgets; - using UnityEngine; - using FontStyle = Unity.UIWidgets.ui.FontStyle; - - namespace UIWidgetsSample { - public class UIWidgetsExample : UIWidgetsPanel { - protected override void OnEnable() { - // if you want to use your own font or font icons. - // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "font family name"); - - // load custom font with weight & style. The font weight & style corresponds to fontWeight, fontStyle of - // a TextStyle object - // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "Roboto", FontWeight.w500, - // FontStyle.italic); - - // add material icons, familyName must be "Material Icons" - // FontManager.instance.addFont(Resources.Load(path: "path to material icons"), "Material Icons"); - - base.OnEnable(); - } - - protected override Widget createWidget() { - return new WidgetsApp( - home: new ExampleApp(), - pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) => - new PageRouteBuilder( - settings: settings, - pageBuilder: (BuildContext context, Animation animation, - Animation secondaryAnimation) => builder(context) - ) - ); - } - - class ExampleApp : StatefulWidget { - public ExampleApp(Key key = null) : base(key) { - } - - public override State createState() { - return new ExampleState(); - } - } - - class ExampleState : State { - int counter = 0; - - public override Widget build(BuildContext context) { - return new Column( - children: new List { - new Text("Counter: " + this.counter), - new GestureDetector( - onTap: () => { - this.setState(() => { - this.counter++; - }); - }, - child: new Container( - padding: EdgeInsets.symmetric(20, 20), - color: Colors.blue, - child: new Text("Click Me") - ) - ) - } - ); - } - } - } - } -``` - -2. 保存此脚本,并将其附加到Panel 1中作为其组件。 -3. 在Unity编辑器中,点击Play按钮来启动应用。 - -#### 四、构建应用程序 - -最后,你可以按以下步骤将UIWidgets应用构建成适用于任何特定平台的应用程序包。 -1. 选择**File** > **Build Settings...**打开Build Settings面板。 -2. 选择目标平台,点击Build。 之后Unity编辑器将自动组装所有相关资源并生成最终的应用程序包。 - -#### 五、如何加载图像? -1. 将你的图像文件,如image1.png,放在Resources文件夹中。 -2. 你可以在同一文件夹中添加image1@2.png和image1@3.png以支持高清屏幕显示。 -3. 使用Image.asset(“image1”)加载图像。 注意:因为是在Unity中,所以不需要添加.png后缀。 - - -UIWidgets也支持Gif! -1. 假设你有一个loading1.gif文件,将其重命名为loading1.gif.bytes并复制到Resources文件夹。 -2. 你可以在同一文件夹中添加loading1@2.gif.bytes和loading1@3.gif.bytes以支持高清屏幕显示。 -3. 使用Image.asset(“loading1.gif”)加载gif图像。 - -#### 六、在安卓上显示状态栏 -当一个Unity项目运行在Android设备上时,状态栏是默认隐藏且无法在编辑内进行调整的。 -如果您希望在您的UIWidgets App中显示状态栏,您可以使用这个[解决方案](https://github.com/Over17/UnityShowAndroidStatusBar)。我们将尽快推出我们自己的解决方案,并保证届时开发者可以进行无缝切换。 - -此外,为了让上述插件在Android P及以上Android系统中正常工作,请勾选上"Player Settings"中的"Render Outside Safe Area"选项。 - -#### 七、自动调节帧率 -如果要使得构建出的应用能够自动调节帧率,请打开Project Settings,将构建目标平台对应的Quality选项卡中的V Sync Count设置为Don't Sync。 -默认的逻辑是在界面静止时将帧率降低为25,在界面变动时将帧率提高至60。 -如果您需要修改帧率升高或降低时的行为,请将`Window.onFrameRateSpeedUp`和/或`Window.onFrameRateCoolDown`设置为您自己的函数。 - -#### 八、WebGL Canvas分辨率调整插件 -因为浏览器中Canvas的宽高和其在显示器上的像素数可能不一致,所以构建出的WebGL程序中画面可能会模糊。 -插件`Plugins/platform/webgl/UIWidgetsCanvasDevicePixelRatio_20xx.x.jslib`(目前有2018.3和2019.1)解决了这个问题。 -请根据您的项目的Unity版本选择对应的插件,并禁用此插件的其他版本。方法如下:在Project面板中选中该插件,在Inspector面板中的Select platforms for plugin中,去掉WebGL后面的对勾。 -如果您因为任何原因需要完全禁止此插件的功能,请按上述方法禁用此插件的所有版本。 - -此插件覆盖了Unity WebGL构建模块中的如下参数: -``` -JS_SystemInfo_GetWidth -JS_SystemInfo_GetHeight -JS_SystemInfo_GetCurrentCanvasWidth -JS_SystemInfo_GetCurrentCanvasHeight -$Browser -$JSEvents -``` -如果您需要实现自己的WebGL插件,并且您的插件覆盖了这些参数中的至少一种,您需要采用上文中提到的方法禁用`UIWidgetsCanvasDevicePixelRatio`插件,以防止可能的冲突。 -如果您仍然需要此插件所提供的功能,您可以手动将此插件对Unity WebGL构建模块的修改应用到您的插件中。 -`UIWidgetsCanvasDevicePixelRatio`插件中所有的修改之处都以`////////// Modification Start ////////////`和`////////// Modification End ////////////`标识。 -在被标识的代码中,所有乘/除以`devicePixelRatio`都来自于我们的修改。 -若您需要详细了解此插件所修改的脚本,请参考您的Unity Editor安装目录下的`PlaybackEngines/WebGLSupport/BuildTools/lib`文件夹中的`SystemInfo.js`和`UnityNativeJS/UnityNative.js`。 - -#### 九、图片导入设置 -默认情况下,Unity会将导入图片的宽和高放缩为最近的等于2的幂的整数。 -在UIWidgets中使用图片时,记得将这一特性关闭,以免图片被意外放缩,方法如下:在Project面板中选中图片,在"Inspector"面板中将"Non Power of 2"(在"Advanced"中)设置为"None"。 - -## 调试UIWidgets应用程序 - -#### 定义UIWidgets_DEBUG -我们建议在Unity编辑器中定义 UIWidgets_DEBUG 脚本符号,这将打开UIWidgets中的调试断言(debug assertion),有助于更早发现潜在的Bug。 -因此选择 **Player Settings** > **Other Settings** > **Configuration** > **Scripting Define Symbols** ,并添加 UIWidgets_DEBUG。 -该符号仅供调试使用,请在发布版本中删除它。 - -#### UIWidgets Inspector - -UIWidgets Inspector工具用于可视化和浏览窗口小部件树。 你可以在Unity编辑器的**Window** > **Analysis** > **UIWidget Inspector** 中的找到它。 - -注意 -- 需要定义 UIWidgets_DEBUG 使inspector正常工作。 -- Inspector目前仅适用于编辑器的播放模式,目前不支持独立版本的应用程序。 - - -## 学习 - -#### 示例 - -你可以在**Samples**文件夹的UIWidgets包中找到一些精心挑选的UIWidgets应用示例,并通过这些示例来开始你的学习。请随意尝试并进行修改以查看结果。 - -你也可以在支持**UIWidgets**的编辑器中,点击主菜单上的UIWidgets,并在下拉窗口中选择一个示例。 - -#### Wiki - -目前开发团队仍在改进UIWidgets Wiki。 由于UIWidgets主要来源于Flutter,你也可以参考Flutter Wiki中与UIWidgets API对应部分的详细描述。同时,你可以加入我们的讨论组( https://connect.unity.com/g/uiwidgets )。 - -#### 常问问题解答 - -| 问题 | 回答 | -| :-----------------------------------------------| ---------------------: | -| 我可以使用UIWidgets创建独立应用吗? | 可以 | -| 我可以使用UIWidgets构建游戏UI吗? | 可以 | -| 我可以使用UIWidgets开发Unity编辑器插件吗? | 可以 | -| UIWidgets是UGUI / NGUI的扩展吗? | 不是 | -| UIWidgets只是Flutter的副本吗? | 不是 | -| 我可以通过简单的拖放操作来创建带有UIWidgets的UI吗? | 不可以 | -| 我是否需要付费使用UIWidgets? | 不需要 | -| 有推荐的适用于UIWidgets的IDE吗? | Rider, VSCode(Open .sln) | - -## 如何贡献 -请查看[CONTRIBUTING](CONTRIBUTING) diff --git a/Documentation~/index.md b/Documentation~/index.md deleted file mode 100644 index d074a365..00000000 --- a/Documentation~/index.md +++ /dev/null @@ -1,297 +0,0 @@ -# UIWidgets - -## Introduction - -UIWidgets is a plugin package for Unity Editor which helps developers to create, debug and deploy efficient, -cross-platform Apps using the Unity Engine. - -UIWidgets is mainly derived from [Flutter](https://github.com/flutter/flutter). However, taking advantage of -the powerful Unity Engine, it offers developers many new features to improve their Apps -as well as the develop workflow significantly. - - -#### Efficiency -Using the latest Unity rendering SDKs, a UIWidgets App can run very fast and keep >60fps in most times. - - -#### Cross-Platform -A UIWidgets App can be deployed on all kinds of platforms including PCs, mobile devices and web page directly, like -any other Unity projects. - -#### Multimedia Support -Except for basic 2D UIs, developers are also able to include 3D Models, audios, particle-systems to their UIWidgets Apps. - - -#### Developer-Friendly -A UIWidgets App can be debug in the Unity Editor directly with many advanced tools like -CPU/GPU Profiling, FPS Profiling. - - -### Example - -
    - - - - -
    - - - - - - - -
    - -## Requirement - -#### Unity -Install **Unity 2018.3** or above. You can download the latest Unity on https://unity3d.com/get-unity/download. - -#### UIWidgets Package -Visit our Github repository https://github.com/UnityTech/UIWidgets - to download the latest UIWidgets package. - -Move the downloaded package folder into the **Package** folder of your Unity project. - -Generally, you can make it using a console (or terminal) application by just a few commands as below: - - ```none - cd /Packages - git clone https://github.com/UnityTech/UIWidgets.git com.unity.uiwidgets - ``` - -## Getting Start - -#### i. Overview -In this tutorial, we will create a very simple UIWidgets App as the kick-starter. The app contains -only a text label and a button. The text label will count the times of clicks upon the button. - -First of all, please open or create a Unity Project and open it with Unity Editor. - -And then open Project Settings, go to Player section and **add "UIWidgets_DEBUG" to the Scripting Define Symbols field.** -This enables the debug mode of UIWidgets for your development. Remove this for your release build afterwards. - -#### ii. Scene Build -A UIWidgets App is usually built upon a Unity UI Canvas. Please follow the steps to create a -UI Canvas in Unity. -1. Create a new Scene by "File -> New Scene"; -1. Create a UI Canvas in the scene by "GameObject -> UI -> Canvas"; -1. Add a Panel (i.e., **Panel 1**) to the UI Canvas by right click on the Canvas and select "UI -> Panel". Then remove the -**Image** Component from the Panel. - -#### iii. Create Widget -A UIWidgets App is written in **C# Scripts**. Please follow the steps to create an App and play it -in Unity Editor. - -1. Create a new C# Script named "UIWidgetsExample.cs" and paste the following codes into it. - ```none - using System.Collections.Generic; - using Unity.UIWidgets.animation; - using Unity.UIWidgets.engine; - using Unity.UIWidgets.foundation; - using Unity.UIWidgets.material; - using Unity.UIWidgets.painting; - using Unity.UIWidgets.ui; - using Unity.UIWidgets.widgets; - using UnityEngine; - using FontStyle = Unity.UIWidgets.ui.FontStyle; - - namespace UIWidgetsSample { - public class UIWidgetsExample : UIWidgetsPanel { - protected override void OnEnable() { - // if you want to use your own font or font icons. - // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "font family name"); - - // load custom font with weight & style. The font weight & style corresponds to fontWeight, fontStyle of - // a TextStyle object - // FontManager.instance.addFont(Resources.Load(path: "path to your font"), "Roboto", FontWeight.w500, - // FontStyle.italic); - - // add material icons, familyName must be "Material Icons" - // FontManager.instance.addFont(Resources.Load(path: "path to material icons"), "Material Icons"); - - base.OnEnable(); - } - - protected override Widget createWidget() { - return new WidgetsApp( - home: new ExampleApp(), - pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) => - new PageRouteBuilder( - settings: settings, - pageBuilder: (BuildContext context, Animation animation, - Animation secondaryAnimation) => builder(context) - ) - ); - } - - class ExampleApp : StatefulWidget { - public ExampleApp(Key key = null) : base(key) { - } - - public override State createState() { - return new ExampleState(); - } - } - - class ExampleState : State { - int counter = 0; - - public override Widget build(BuildContext context) { - return new Column( - children: new List { - new Text("Counter: " + this.counter), - new GestureDetector( - onTap: () => { - this.setState(() - => { - this.counter++; - }); - }, - child: new Container( - padding: EdgeInsets.symmetric(20, 20), - color: Colors.blue, - child: new Text("Click Me") - ) - ) - } - ); - } - } - } - } - ``` - -1. Save this script and attach it to **Panel 1** as its component. -1. Press the "Play" Button to start the App in Unity Editor. - -#### iv. Build App -Finally, the UIWidgets App can be built to packages for any specific platform by the following steps. -1. Open the Build Settings Panel by "File -> Build Settings..." -1. Choose a target platform and click "Build". Then the Unity Editor will automatically assemble -all relevant resources and generate the final App package. - -#### How to load images? -1. Put your images files in Resources folder. e.g. image1.png. -2. You can add image1@2.png and image1@3.png in the same folder to support HD screens. -3. Use Image.asset("image1") to load the image. Note: as in Unity, ".png" is not needed. - -UIWidgets supports Gif as well! -1. Suppose you have loading1.gif. Rename it to loading1.gif.bytes and copy it to Resources folder. -2. You can add loading1@2.gif.bytes and loading1@3.gif.bytes in the same folder to support HD screens. -3. Use Image.asset("loading1.gif") to load the gif images. - -#### Using Window Scope -If you see the error ```AssertionError: Window.instance is null``` or null pointer error of ```Window.instance```, -it means the code is not running in the window scope. In this case, you can enclose your code -with window scope as below: -``` -using(WindowProvider.of(your gameObject with UIWidgetsPanel).getScope()) { - // code dealing with UIWidgets, - // e.g. setState(() => {....}) -} -``` - -This is needed if the code is in methods -not invoked by UIWidgets. For example, if the code is in ```completed``` callback of ```UnityWebRequest```, -you need to enclose them with window scope. -Please see [HttpRequestSample](./Samples/UIWidgetSample/HttpRequestSample.cs) for detail. -For callback/event handler methods from UIWidgets (e.g ```Widget.build, State.initState...```), you don't need do -it yourself, since the framework ensure it's in window scope. - -#### Show Status Bar on Android -Status bar is always hidden by default when an Unity project is running on an Android device. If you - want to show the status bar in your App, this - [solution](https://github.com/Over17/UnityShowAndroidStatusBar) seems to be - compatible to UIWidgets, therefore can be used as a good option before we release our - full support solution on this issue. - - Besides, - please set "Render Outside Safe Area" to true in the "Player Settings" to make this plugin working properly on Android P or later. - - - - -#### Automatically Adjust Frame Rate - -To build an App that is able to adjust the frame rate automatically, please open Project Settings, and in the Quality tab, set the "V Sync Count" option of the target platform to "Don't Sync". -The default logic is to set the frame rate to 25 when the screen is static, and change the frame rate to 60 whenever the screen changes. -If you would like to modify the behavior of speeding up or cooling down the frame rate, please set `Window.onFrameRateSpeedUp` and/or `Window.onFrameRateCoolDown` to your own functions. - -#### WebGL Canvas Device Pixel Ratio Plugin -The width and height of the Canvas in browser may differ from the number of pixels the Canvas occupies on the screen. -Therefore, the image may blur in the builded WebGL program. -The Plugin `Plugins/platform/webgl/UIWidgetsCanvasDevicePixelRatio_20xx.x.jslib` (2018.3 and 2019.1 for now) solves this issue. -Please select the plugin of the Unity version corresponding to your project, and disable other versions of this plugin, as follows: select this plugin in the **Project** panel, and uncheck **WebGL** under **Select platforms for plugin** in the **Inspector** panel. -If you need to disable this plugin for any reason, please disable all the versions of this plugin as described above. - -This plugin overrides the following parameters in the Unity WebGL building module: -``` -JS_SystemInfo_GetWidth -JS_SystemInfo_GetHeight -JS_SystemInfo_GetCurrentCanvasWidth -JS_SystemInfo_GetCurrentCanvasHeight -$Browser -$JSEvents -``` -If you would like to implement your own WebGL plugin, and your plugin overrides at least one of the above parameters, you need to disable the `UIWidgetsCanvasDevicePixelRatio` plugin in the above mentioned way to avoid possible conflicts. -If you still need the function provided by this plugin, you can mannually apply the modification to Unity WebGL building module introduced in this plugin. -All the modifications introduced in `UIWidgetsCanvasDevicePixelRatio` are marked by `////////// Modifcation Start ////////////` and `////////// Modifcation End ////////////`. -In the marked codes, all the multiplications and divisions with `devicePixelRatio` are introduced by our modification. -To learn about the original script in detail, please refer to `SystemInfo.js` and `UnityNativeJS/UnityNative.js` in `PlaybackEngines/WebGLSupport/BuildTools/lib` in your Unity Editor installation. - -#### Image Import Setting -Unity, by default, resizes the width and height of an imported image to the nearest integer that is a power of 2. -In UIWidgets, you should almost always disable this by selecting the image in the "Project" panel, then in the "Inspector" panel set the "Non Power of 2" option (in "Advanced") to "None", to prevent your image from being resized unexpectedly. - -## Debug UIWidgets Application - -#### Define UIWidgets_DEBUG -It's recommended to define the **UIWidgets_DEBUG** script symbol in editor, this will turn on -debug assertion in UIWidgets, which will help to find potential bugs earlier. To do this: -please go to **Player Settings -> Other Settings -> Configuration -> Scripting Define Symbols**, -and add **UIWidgets_DEBUG**. -The symbol is for debug purpose, please remove it from your release build. - -#### UIWidgets Inspector -The UIWidgets Inspector tool is for visualizing and exploring the widget trees. You can find it -via *Window/Analysis/UIWidgets* inspector in Editor menu. -**Note** -* **UIWidgets_DEBUG** needs to be define for inspector to work properly. -* Inspector currently only works in Editor Play Mode, inspect standalone built application is not supported for now. - -## Learn - -#### Samples -You can find many UIWidgets App samples in the UIWidgets package in the **Samples** folder. -Feel free to try them out and make modifications to see the results. -To get started, the UIWidgetsTheatre scene provides you -a list of carefully selected samples to start with. - -You can also try UIWidgets-based Editor windows by clicking **UIWidgetsTest** on the main menu -and open one of the dropdown samples. - -#### Wiki -The develop team is still working on the UIWidgets Wiki. However, since UIWidgets is mainly derived from Flutter, - you can refer to Flutter Wiki to access detailed descriptions of UIWidgets APIs - from those of their Flutter counterparts. -Meanwhile, you can join the discussion channel at (https://connect.unity.com/g/uiwidgets) - -#### FAQ - -| Question | Answer | -| :-----------------------------------------------| ---------------------: | -| Can I create standalone App using UIWidgets? | **Yes** | -| Can I use UIWidgets to build game UIs? | **Yes** | -| Can I develop Unity Editor plugins using UIWidgets? | **Yes** | -| Is UIWidgets a extension of UGUI/NGUI? | **No** | -| Is UIWidgets just a copy of Flutter? | **No** | -| Can I create UI with UIWidgets by simply drag&drop? | **No** | -| Do I have to pay for using UIWidgets? | **No** | -| Any IDE recommendation for UIWidgets? | **Rider, VSCode(Open .sln)** | - -## How to Contribute - -Check [CONTRIBUTING](CONTRIBUTING) diff --git a/scripts/packman b/scripts/packman index 2af69a1b..d741f1e3 100755 --- a/scripts/packman +++ b/scripts/packman @@ -64,7 +64,14 @@ if [ "$?" != "0" ]; then fi rm -rf $target_repository/Documentation~ -cp -R Documentation~ $target_repository/ +mkdir $target_repository/Documentation~ +sed '/README-ZH.md/d ; s/CONTRIBUTING.md/CONTRIBUTING/g' README.md > $target_repository/Documentation~/com.unity.uiwidgets.md +cp $target_repository/Documentation~/{com.unity.uiwidgets.md,index.md} +cp CONTRIBUTING.md $target_repository/Documentation~ +cat > $target_repository/Documentation~/TableOfContents.md << END +* [UIWidgets Documentation](index) +* [UIWidgets中文文档](index-zh) +END echo "Copied Documentation" rm -rf $target_repository/Runtime From 22878a17eb917774dd35da74b9d7a1a919f700d4 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 22 May 2019 10:34:10 +0800 Subject: [PATCH 16/52] Fix packman script: copy README-ZH. --- scripts/packman | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/packman b/scripts/packman index d741f1e3..318c018f 100755 --- a/scripts/packman +++ b/scripts/packman @@ -68,6 +68,7 @@ mkdir $target_repository/Documentation~ sed '/README-ZH.md/d ; s/CONTRIBUTING.md/CONTRIBUTING/g' README.md > $target_repository/Documentation~/com.unity.uiwidgets.md cp $target_repository/Documentation~/{com.unity.uiwidgets.md,index.md} cp CONTRIBUTING.md $target_repository/Documentation~ +cp README-ZH.md $target_repository/Documentation~/index-zh.md cat > $target_repository/Documentation~/TableOfContents.md << END * [UIWidgets Documentation](index) * [UIWidgets中文文档](index-zh) From 0902a2bdb8b4aa610ab5b8cf0c7cd343a5c5c846 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 22 May 2019 11:01:38 +0800 Subject: [PATCH 17/52] Update document. --- scripts/asset_store | 60 +++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/scripts/asset_store b/scripts/asset_store index 6f746047..327df329 100755 --- a/scripts/asset_store +++ b/scripts/asset_store @@ -44,33 +44,39 @@ cat > $target_dir/Documentation/README.txt << END UIWidgets is a plugin package for Unity Editor which helps developers to create, debug and deploy efficient, cross-platform Apps using the Unity Engine. -UIWidgets is mainly derived from [Flutter](https://github.com/flutter/flutter). However, taking advantage of +UIWidgets is mainly derived from Flutter (https://github.com/flutter/flutter). However, taking advantage of the powerful Unity Engine, it offers developers many new features to improve their Apps as well as the develop workflow significantly. #### Efficiency + Using the latest Unity rendering SDKs, a UIWidgets App can run very fast and keep >60fps in most times. #### Cross-Platform + A UIWidgets App can be deployed on all kinds of platforms including PCs, mobile devices and web page directly, like any other Unity projects. #### Multimedia Support + Except for basic 2D UIs, developers are also able to include 3D Models, audios, particle-systems to their UIWidgets Apps. #### Developer-Friendly + A UIWidgets App can be debug in the Unity Editor directly with many advanced tools like CPU/GPU Profiling, FPS Profiling. ## Requirement #### Unity + Install Unity 2018.3 or above. You can download the latest Unity on https://unity3d.com/get-unity/download. #### UIWidgets Package + Visit our Github repository https://github.com/UnityTech/UIWidgets to download the latest UIWidgets package. @@ -84,6 +90,7 @@ Generally, you can make it using a console (or terminal) application by just a f ## Getting Start #### i. Overview + In this tutorial, we will create a very simple UIWidgets App as the kick-starter. The app contains only a text label and a button. The text label will count the times of clicks upon the button. @@ -93,6 +100,7 @@ And then open Project Settings, go to Player section and add "UIWidgets_DEBUG" t This enables the debug mode of UIWidgets for your development. Remove this for your release build afterwards. #### ii. Scene Build + A UIWidgets App is usually built upon a Unity UI Canvas. Please follow the steps to create a UI Canvas in Unity. 1. Create a new Scene by "File -> New Scene"; @@ -101,6 +109,7 @@ UI Canvas in Unity. Image Component from the Panel. #### iii. Create Widget + A UIWidgets App is written in C# Scripts. Please follow the steps to create an App and play it in Unity Editor. @@ -186,12 +195,14 @@ in Unity Editor. 1. Press the "Play" Button to start the App in Unity Editor. #### iv. Build App + Finally, the UIWidgets App can be built to packages for any specific platform by the following steps. 1. Open the Build Settings Panel by "File -> Build Settings..." 1. Choose a target platform and click "Build". Then the Unity Editor will automatically assemble all relevant resources and generate the final App package. #### How to load images? + 1. Put your images files in Resources folder. e.g. image1.png. 2. You can add image1@2.png and image1@3.png in the same folder to support HD screens. 3. Use Image.asset("image1") to load the image. Note: as in Unity, ".png" is not needed. @@ -202,6 +213,7 @@ UIWidgets supports Gif as well! 3. Use Image.asset("loading1.gif") to load the gif images. #### Using Window Scope + If you see the error AssertionError: Window.instance is null or null pointer error of Window.instance, it means the code is not running in the window scope. In this case, you can enclose your code with window scope as below: @@ -215,34 +227,36 @@ using(WindowProvider.of(your gameObject with UIWidgetsPanel).getScope()) { This is needed if the code is in methods not invoked by UIWidgets. For example, if the code is in completed callback of UnityWebRequest, you need to enclose them with window scope. -Please see [HttpRequestSample](./Samples/UIWidgetSample/HttpRequestSample.cs) for detail. +Please see "./Samples/UIWidgetSample/HttpRequestSample.cs" for detail. For callback/event handler methods from UIWidgets (e.g Widget.build, State.initState...), you don't need do it yourself, since the framework ensure it's in window scope. #### Show Status Bar on Android + Status bar is always hidden by default when an Unity project is running on an Android device. If you want to show the status bar in your App, this - [solution](https://github.com/Over17/UnityShowAndroidStatusBar) seems to be + solution (https://github.com/Over17/UnityShowAndroidStatusBar) seems to be compatible to UIWidgets, therefore can be used as a good option before we release our full support solution on this issue. Besides, please set "Render Outside Safe Area" to true in the "Player Settings" to make this plugin working properly on Android P or later. - - - #### Automatically Adjust Frame Rate -To build an App that is able to adjust the frame rate automatically, please open Project Settings, and in the Quality tab, set the "V Sync Count" option of the target platform to "Don't Sync". -The default logic is to set the frame rate to 25 when the screen is static, and change the frame rate to 60 whenever the screen changes. -If you would like to modify the behavior of speeding up or cooling down the frame rate, please set Window.onFrameRateSpeedUp and/or Window.onFrameRateCoolDown to your own functions. +To build an App that is able to adjust the frame rate automatically, please open Project Settings, and +in the Quality tab, set the "V Sync Count" option of the target platform to "Don't Sync". The default +logic is to set the frame rate to 25 when the screen is static, and change the frame rate to 60 whenever +the screen changes. If you would like to modify the behavior of speeding up or cooling down the frame +rate, please set Window.onFrameRateSpeedUp and/or Window.onFrameRateCoolDown to your own functions. #### WebGL Canvas Device Pixel Ratio Plugin + The width and height of the Canvas in browser may differ from the number of pixels the Canvas occupies on the screen. Therefore, the image may blur in the built WebGL program. The Plugin Plugins/platform/webgl/UIWidgetsCanvasDevicePixelRatio_20xx.x.jslib (2018.3 and 2019.1 for now) solves this issue. -Please select the plugin of the Unity version corresponding to your project, and disable other versions of this plugin, as follows: select this plugin in the Project panel, and uncheck WebGL under Select platforms for plugin in the Inspector panel. +Please select the plugin of the Unity version corresponding to your project, and disable other versions of this plugin, as +follows: select this plugin in the Project panel, and uncheck WebGL under Select platforms for plugin in the Inspector panel. If you need to disable this plugin for any reason, please disable all the versions of this plugin as described above. This plugin overrides the following parameters in the Unity WebGL building module: @@ -254,19 +268,26 @@ JS_SystemInfo_GetCurrentCanvasHeight \$Browser \$JSEvents -If you would like to implement your own WebGL plugin, and your plugin overrides at least one of the above parameters, you need to disable the UIWidgetsCanvasDevicePixelRatio plugin in the above mentioned way to avoid possible conflicts. -If you still need the function provided by this plugin, you can manually apply the modification to Unity WebGL building module introduced in this plugin. -All the modifications introduced in UIWidgetsCanvasDevicePixelRatio are marked by ////////// Modification Start //////////// and ////////// Modification End ////////////. +If you would like to implement your own WebGL plugin, and your plugin overrides at least one of the above parameters, +you need to disable the UIWidgetsCanvasDevicePixelRatio plugin in the above mentioned way to avoid possible conflicts. +If you still need the function provided by this plugin, you can manually apply the modification to Unity WebGL +building module introduced in this plugin. All the modifications introduced in UIWidgetsCanvasDevicePixelRatio are +marked by ////////// Modification Start //////////// and ////////// Modification End ////////////. In the marked codes, all the multiplications and divisions with devicePixelRatio are introduced by our modification. -To learn about the original script in detail, please refer to SystemInfo.js and UnityNativeJS/UnityNative.js in PlaybackEngines/WebGLSupport/BuildTools/lib in your Unity Editor installation. +To learn about the original script in detail, please refer to SystemInfo.js and UnityNativeJS/UnityNative.js in +PlaybackEngines/WebGLSupport/BuildTools/lib in your Unity Editor installation. #### Image Import Setting + Unity, by default, resizes the width and height of an imported image to the nearest integer that is a power of 2. -In UIWidgets, you should almost always disable this by selecting the image in the "Project" panel, then in the "Inspector" panel set the "Non Power of 2" option (in "Advanced") to "None", to prevent your image from being resized unexpectedly. +In UIWidgets, you should almost always disable this by selecting the image in the "Project" panel, then in the +"Inspector" panel set the "Non Power of 2" option (in "Advanced") to "None", to prevent your image from being +resized unexpectedly. ## Debug UIWidgets Application #### Define UIWidgets_DEBUG + It's recommended to define the UIWidgets_DEBUG script symbol in editor, this will turn on debug assertion in UIWidgets, which will help to find potential bugs earlier. To do this: please go to Player Settings -> Other Settings -> Configuration -> Scripting Define Symbols, @@ -274,6 +295,7 @@ and add UIWidgets_DEBUG. The symbol is for debug purpose, please remove it from your release build. #### UIWidgets Inspector + The UIWidgets Inspector tool is for visualizing and exploring the widget trees. You can find it via Window/Analysis/UIWidgets inspector in Editor menu. @@ -285,6 +307,7 @@ Note ## Learn #### Samples + You can find many UIWidgets App samples in the UIWidgets package in the Samples folder. Feel free to try them out and make modifications to see the results. To get started, the UIWidgetsTheatre scene provides you @@ -294,6 +317,7 @@ You can also try UIWidgets-based Editor windows by clicking UIWidgetsTest on the and open one of the dropdown samples. #### Wiki + The develop team is still working on the UIWidgets Wiki. However, since UIWidgets is mainly derived from Flutter, you can refer to Flutter Wiki to access detailed descriptions of UIWidgets APIs from those of their Flutter counterparts. @@ -301,9 +325,9 @@ Meanwhile, you can join the discussion channel at (https://connect.unity.com/g/u #### FAQ -Can I create standalone App using UIWidgets? Yes -Can I use UIWidgets to build game UIs? Yes -Can I develop Unity Editor plugins using UIWidgets? Yes +Can I create standalone App using UIWidgets? Yes +Can I use UIWidgets to build game UIs? Yes +Can I develop Unity Editor plugins using UIWidgets? Yes Is UIWidgets a extension of UGUI/NGUI? No Is UIWidgets just a copy of Flutter? No Can I create UI with UIWidgets by simply drag&drop? No From 131edec9efdb762445be08d4a2471f10a306cf03 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 22 May 2019 11:58:31 +0800 Subject: [PATCH 18/52] Update packman script. --- scripts/asset_store | 2 +- scripts/packman | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/asset_store b/scripts/asset_store index 327df329..22678160 100755 --- a/scripts/asset_store +++ b/scripts/asset_store @@ -15,7 +15,7 @@ target_project=$1 echo "Copying to $target_project" if ! [ -d $target_project ]; then - echo "Target respository does not exist!" + echo "Target project does not exist!" exit -1 fi diff --git a/scripts/packman b/scripts/packman index 318c018f..01ab033c 100755 --- a/scripts/packman +++ b/scripts/packman @@ -67,7 +67,11 @@ rm -rf $target_repository/Documentation~ mkdir $target_repository/Documentation~ sed '/README-ZH.md/d ; s/CONTRIBUTING.md/CONTRIBUTING/g' README.md > $target_repository/Documentation~/com.unity.uiwidgets.md cp $target_repository/Documentation~/{com.unity.uiwidgets.md,index.md} -cp CONTRIBUTING.md $target_repository/Documentation~ +cat > $target_repository/Documentation~/CONTRIBUTING.md << END +This repository exists for the sole purpose of publishing to package manager. Please contribute to https://github.com/UnityTech/UIWidgets instead. + +END +cat CONTRIBUTING.md >> $target_repository/Documentation~/CONTRIBUTING.md cp README-ZH.md $target_repository/Documentation~/index-zh.md cat > $target_repository/Documentation~/TableOfContents.md << END * [UIWidgets Documentation](index) From 792a80aad91f9fd0330e473e4ce1cba820561b4c Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 22 May 2019 16:10:03 +0800 Subject: [PATCH 19/52] Modify Images. --- .../UIWidgetsGallery/demo/contacts_demo.cs | 2 +- Samples/UIWidgetsGallery/gallery.unity | 41 +++++- Samples/UIWidgetsGallery/gallery/home.cs | 4 +- Tests/Resources/6.png | Bin 183 -> 0 bytes Tests/Resources/6.png.meta | 88 ------------- Tests/Resources/ali_landscape.png | Bin 944547 -> 0 bytes Tests/Resources/ali_landscape.png.meta | 121 ------------------ .../india_chettinad_silk_maker.png.meta | 52 +++++++- .../Resources/india_thanjavur_market.png.meta | 52 +++++++- Tests/Resources/people/ali_landscape.png.meta | 52 +++++++- Tests/Resources/people/square/ali.png.meta | 52 +++++++- Tests/Resources/people/square/peter.png.meta | 52 +++++++- Tests/Resources/people/square/sandra.png.meta | 52 +++++++- Tests/Resources/people/square/stella.png.meta | 52 +++++++- Tests/Resources/people/square/trevor.png.meta | 52 +++++++- Tests/Resources/products/backpack.png.meta | 52 +++++++- Tests/Resources/products/belt.png.meta | 52 +++++++- Tests/Resources/products/cup.png.meta | 52 +++++++- Tests/Resources/products/deskset.png.meta | 52 +++++++- Tests/Resources/products/dress.png.meta | 52 +++++++- Tests/Resources/products/earrings.png.meta | 52 +++++++- Tests/Resources/products/hat.png.meta | 52 +++++++- Tests/Resources/products/jumper.png.meta | 52 +++++++- .../products/kitchen_quattro.png.meta | 52 +++++++- Tests/Resources/products/platter.png.meta | 52 +++++++- Tests/Resources/unity-black.png | Bin 21439 -> 51691 bytes Tests/Resources/unity-black.png.meta | 52 +++++++- Tests/Resources/unity-white.png | Bin 21065 -> 51477 bytes Tests/Resources/unity-white.png.meta | 52 +++++++- 29 files changed, 1019 insertions(+), 277 deletions(-) delete mode 100644 Tests/Resources/6.png delete mode 100644 Tests/Resources/6.png.meta delete mode 100644 Tests/Resources/ali_landscape.png delete mode 100644 Tests/Resources/ali_landscape.png.meta diff --git a/Samples/UIWidgetsGallery/demo/contacts_demo.cs b/Samples/UIWidgetsGallery/demo/contacts_demo.cs index 0277a1fe..f729e994 100644 --- a/Samples/UIWidgetsGallery/demo/contacts_demo.cs +++ b/Samples/UIWidgetsGallery/demo/contacts_demo.cs @@ -176,7 +176,7 @@ public override Widget build(BuildContext context) { fit: StackFit.expand, children: new List { Image.asset( - "ali_landscape", + "people/ali_landscape", fit: BoxFit.cover, height: _appBarHeight ), diff --git a/Samples/UIWidgetsGallery/gallery.unity b/Samples/UIWidgetsGallery/gallery.unity index 18788968..10e15321 100644 --- a/Samples/UIWidgetsGallery/gallery.unity +++ b/Samples/UIWidgetsGallery/gallery.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657892, g: 0.4964127, b: 0.5748172, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.49641287, b: 0.5748173, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -54,7 +54,7 @@ LightmapSettings: m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_LightmapEditorSettings: - serializedVersion: 10 + serializedVersion: 12 m_Resolution: 2 m_BakeResolution: 40 m_AtlasSize: 1024 @@ -62,6 +62,7 @@ LightmapSettings: m_AOMaxDistance: 1 m_CompAOExponent: 1 m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 m_Padding: 2 m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 @@ -76,10 +77,16 @@ LightmapSettings: m_PVRDirectSampleCount: 32 m_PVRSampleCount: 500 m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 m_PVRFilterTypeDirect: 0 m_PVRFilterTypeIndirect: 0 m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 1 + m_PVREnvironmentMIS: 0 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 m_PVRFilteringGaussRadiusIndirect: 5 @@ -88,6 +95,7 @@ LightmapSettings: m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 m_ShowResolutionOverlay: 1 + m_ExportTrainingData: 0 m_LightingDataAsset: {fileID: 0} m_UseShadowmask: 1 --- !u!196 &4 @@ -376,12 +384,13 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1304413924} m_Enabled: 1 - serializedVersion: 8 + serializedVersion: 9 m_Type: 1 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 m_CookieSize: 10 m_Shadows: m_Type: 2 @@ -391,6 +400,24 @@ Light: m_Bias: 0.05 m_NormalBias: 0.4 m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 m_Cookie: {fileID: 0} m_DrawHalo: 0 m_Flare: {fileID: 0} @@ -398,12 +425,15 @@ Light: m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 + m_RenderingLayerMask: 1 m_Lightmapping: 4 m_LightShadowCasterMode: 0 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 m_ColorTemperature: 6570 m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &1304413926 @@ -458,9 +488,10 @@ Camera: m_ClearFlags: 1 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 diff --git a/Samples/UIWidgetsGallery/gallery/home.cs b/Samples/UIWidgetsGallery/gallery/home.cs index 141fc17c..ad6820e0 100644 --- a/Samples/UIWidgetsGallery/gallery/home.cs +++ b/Samples/UIWidgetsGallery/gallery/home.cs @@ -30,8 +30,8 @@ public _UIWidgetsLogo(Key key = null, bool isDark = false) : base(key: key) { public override Widget build(BuildContext context) { return new Center( child: new Container( - width: 34.0f, - height: 34.0f, + width: 32f, + height: 32f, decoration: new BoxDecoration( image: new DecorationImage( image: new AssetImage( diff --git a/Tests/Resources/6.png b/Tests/Resources/6.png deleted file mode 100644 index a83dfc4eb41ecc0942a0a07aca9ecf87c40360c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGJMI!_nJkcv5PZXV=hHsoPAXtCq} zw7F6&me<&g^OYn12xio`owHp0J$tSD^LqF7`YH?5kl?ob+wYfuj{nchl!Xj8KfPW1 p;6KY1WO#=iMF~^ZexT+5|64OlG?ed2Is)V{c)I$ztaD0e0suzyKi>cV diff --git a/Tests/Resources/6.png.meta b/Tests/Resources/6.png.meta deleted file mode 100644 index 800b8e3b..00000000 --- a/Tests/Resources/6.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: d8fa175306ac44f8ea120cf256fd21d9 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 7 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/Resources/ali_landscape.png b/Tests/Resources/ali_landscape.png deleted file mode 100644 index 8ac86a5dcecd2889977539949986e2d58cf03d9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 944547 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