Compare commits

...

125 Commits

Author SHA1 Message Date
Simon (Darkside) Jackson 69c96ab471
Merge pull request #446 from wanliyun/release
Fix Bug!NeicerOutline color.a Lose when m_UseGraphicAlpha is true!
2023-07-22 16:53:23 +01:00
Simon (Darkside) Jackson 884a8d63f1
Update case sensitivity of agent labels 2023-07-22 16:45:39 +01:00
Simon (Darkside) Jackson 5f535e0431
Merge branch 'development' into release 2023-07-22 16:12:16 +01:00
Simon (Darkside) Jackson 17b69878de
Merge pull request #442 from sandr01d/development
Fix release date of v2.3
2023-07-22 16:11:54 +01:00
Simon (Darkside) Jackson 70f98806e9
Merge branch 'development' into release 2023-07-22 16:11:29 +01:00
Simon (Darkside) Jackson 5ef4736e68
Merge branch 'development' into development 2023-07-22 16:09:32 +01:00
SimonDarksideJ 9fbcd39b88 Deprecated Text Effects with Unity 2022 as they are incompatible with TextMeshPro 2023-07-09 16:48:55 +01:00
wanliyun 6a68933e48 Fix Bug!NeicerOutline color.a Lose when m_UseGraphicAlpha is true!
if (m_UseGraphicAlpha)
    newColor.a = (byte)((newColor.a * verts[i].color.a) / 255);  //newColor's type cannot be Color.Should be Color32.
2023-07-06 13:20:50 +08:00
Sandroid 4857492384 Fix release date of v2.3 2023-06-21 15:10:24 +02:00
SimonDarksideJ 796f66c310 Updated LineRenderer and UILIneConnector implementations to both be safer and include warning about placing a UILineRenderer at any other position than 0,0,0. 2023-06-17 18:33:22 +01:00
SimonDarksideJ e7babe0dd6 Updated HSS/VSS to ensure events fire correctly if the control is dragged but not moved:
Resolves: #186
2023-06-17 17:16:31 +01:00
action ab34212ade Auto increment pre-release version to 2.3.2-pre.3 [skip ci] 2023-03-29 13:41:56 +00:00
Simon (Darkside) Jackson 531059bf0e
Merge pull request #439 from Unity-UI-Extensions/feature/updateCodeOwners
Patch workflow for correct secret
2023-03-29 14:41:37 +01:00
Simon (Darkside) Jackson a4fb11f0b4
Patch workflow for correct secret 2023-03-29 14:32:05 +01:00
Simon (Darkside) Jackson 09b17fae52
Merge pull request #436 from victornor/linerenderer_points
Linerenderer points
2023-03-29 14:16:07 +01:00
Simon (Darkside) Jackson 7becb9cae4
Merge branch 'development' into linerenderer_points 2023-03-29 14:15:48 +01:00
Victor 7127f8bca7 chore: make CalculatePointOnCurve public 2023-03-20 13:43:43 +01:00
Victor ba7b21fdae feat: add CalculatePointOnCurve for linerenderer 2023-03-20 13:42:33 +01:00
victornor 5e7282c27d
fix: GetPosition when Segments is null 2023-03-20 13:33:14 +01:00
action 14aa9ae491 Auto increment pre-release version to 2.3.2-pre.2 [skip ci] 2023-03-12 12:13:16 +00:00
Simon (Darkside) Jackson a45509ee55
Merge pull request #435 from Unity-UI-Extensions/fix/resolveflowoverflow
Resolve FlowLayoutGroup overflow issue
2023-03-12 12:12:52 +00:00
Simon (Darkside) Jackson 2ccf119f7d
fix package version 2023-03-12 12:06:34 +00:00
SimonDarksideJ 14548049a5 Update workflows 2023-03-12 11:58:04 +00:00
SimonDarksideJ 02da81ef28 Resolves an issue where the last line in a flow layout group would overflow the rect bounds
Fixes - https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/432
2023-03-12 11:44:50 +00:00
SimonDarksideJ 3e8eaa0643 Merge branch 'development' of https://github.com/Unity-UI-Extensions/com.unity.uiextensions into development 2023-03-12 11:43:06 +00:00
Simon (Darkside) Jackson 8ddcaa839e
Merge pull request #434 from FejZa/release
Fix ResetSelectableHighlight resets button to normal when it's actually disabled
2023-03-02 17:43:55 +00:00
Simon (Darkside) Jackson c61fbeeceb
Merge branch 'development' into release 2023-03-02 17:42:42 +00:00
Simon (Darkside) Jackson d8c99e4398
Instigate development branch 2023-03-02 17:41:00 +00:00
Dino Fejzagić 8fc9e8aba5
Update ResetSelectableHighlight.cs 2023-03-01 11:32:14 +01:00
Simon Jackson 688a879f31 Merge branch 'release' of https://github.com/Unity-UI-Extensions/com.unity.uiextensions into development 2023-02-07 14:59:14 +00:00
Simon (Darkside) Jackson ffdc0316a4
Merge branch 'release' into development 2023-02-07 14:56:38 +00:00
Simon (Darkside) Jackson 8384bd5ced
patchfix - erroneous namespace in combobox??? 2023-02-07 14:52:00 +00:00
Simon (Darkside) Jackson 649506cd3d
Set version to 2.3.0 for initial release 2023-02-07 14:33:47 +00:00
action 589e02ffaf Auto increment pre-release version to 2.3.0-pre-release.2 [skip ci] 2023-02-07 14:29:17 +00:00
action af10498e0e Auto increment pre-release version to 2.3.0-pre-release.1 [skip ci] 2023-02-07 14:08:42 +00:00
Simon (Darkside) Jackson 8cbd1c3c1e
Merge pull request #413 from Unity-UI-Extensions/feature/V2.3.0
Feature/v2.3.0
2023-02-07 14:06:08 +00:00
Simon Jackson 2a90891ee9 Final checks for merge! 2023-02-07 14:05:04 +00:00
Simon (Darkside) Jackson 28000ad5b7
Update pipelines for release 2023-02-07 12:07:01 +00:00
Simon (Darkside) Jackson 68edffc749
Merge branch 'release' into feature/V2.3.0 2023-02-06 14:11:17 +00:00
Simon Jackson 968fdab8cc Merge branch 'development' of https://github.com/Unity-UI-Extensions/com.unity.uiextensions into feature/V2.3.0 2023-02-06 14:07:44 +00:00
Simon Jackson e085cbe076 Resolved issues with DisplayAbove and using a 0 ItemsToDisplay 2023-02-06 13:32:05 +00:00
Simon Jackson b3bb76246b Merge branch 'feature/V2.3.0' of https://github.com/Unity-UI-Extensions/com.unity.uiextensions into feature/V2.3.0 2023-02-05 11:35:34 +00:00
Simon Jackson 33cd5a9be4 Several lifetime feature updates for the ComboBox controls:
- Resolves startup issue that prevented the control being used (Unity changed the start order in some instances), this was causing null reference issues with comboboxes
- Added the ability to set a specific item on start and not just the first
- Added the ability to disable the dropdown to make a read-only dropdown

Resolves:
- https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/426
- https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/425
2023-02-05 11:35:18 +00:00
Simon (Darkside) Jackson 30d50cc04e
Switch android builds to windows 2023-02-05 09:15:54 +00:00
Simon Jackson 9ce7661af6 Add 2019 to the testing validation 2023-02-04 19:25:13 +00:00
Simon Jackson b59f5132c3 Remove editor validation and add error checking for the ColorLabel component 2023-02-04 19:23:26 +00:00
Simon Jackson 8d18515a4a The BIG Unity 2022 Text reorganisation 2023-02-04 11:22:31 +00:00
Simon Jackson 1002db24f2 Resolves issue in 2022 with the missing Text component
Fixes: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/424
2023-02-04 10:30:40 +00:00
Simon Jackson 7545ab9fde Added ResetSelectableHighlight component 2023-02-01 15:10:40 +00:00
Simon Jackson 462eec558b Add the Version upgrade pipeline 2023-01-29 15:54:02 +00:00
Simon (Darkside) Jackson 5a14d4d3a4
Fix github issue templates 2023-01-29 10:18:25 +00:00
Simon Jackson 1c0c217931 Add updated test flow for builds 2023-01-29 10:12:08 +00:00
Simon Jackson 54a71dcf05 Updated NonDrawingGraphic to require a CanvasRender, else it causes an error on run (and doesn't work)
- Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/420
2023-01-26 14:21:17 +00:00
Simon Jackson 07ec98c989 Fix class spellings and update MultiTouchScrollRect 2023-01-22 17:26:01 +00:00
Simon Jackson e05bfb788d Added new submodule for extracted examples 2023-01-22 12:29:51 +00:00
Simon Jackson b752435eb7 Removed legacy Examples link, moving to separate repository 2023-01-22 12:26:52 +00:00
Simon Jackson c41b4af0e3 Revised the Curly UI fix as it was preventing the graphic from being updated in the scene view. Thanks to @solidsign for the update. 2023-01-22 10:40:29 +00:00
Simon Jackson 78d3b898c1 Updated build issue with ReorderableListElement 2023-01-03 19:22:19 +00:00
Simon Jackson 2f19deeb78 Updating GitHub artifacts and automation 2023-01-03 13:41:52 +00:00
Simon Jackson 696fc36926 Update Examples module to new home 2023-01-03 12:38:56 +00:00
Simon Jackson 84ec39aa6c Break Module 2023-01-03 12:27:43 +00:00
Simon Jackson 7e61dd398d Remove broken examples link 2023-01-03 12:26:53 +00:00
Simon Jackson 048fa7269f Refresh FancyScrollView with latest fixes 2023-01-03 12:25:02 +00:00
Simon Jackson 12f6174469 Cleanup and ensuring the UIParticleSystem is disposed on Destroy correctly.
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/412
2023-01-03 11:42:22 +00:00
Simon Jackson 60eed9b87a Base update for pointers to new version / package home 2023-01-01 16:56:37 +00:00
Simon Jackson fe97fa7599 Updated panel drawing for ComboBox controls and added DropdownOffset
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/393
2023-01-01 16:52:08 +00:00
Simon Jackson 9b23206c9a Updated ReorderableList/ReorderableListElement to prevent creating a "Fake" droppable when the item is not transferable
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/164
2023-01-01 16:13:40 +00:00
Simon Jackson 4b1c5412f1 Updated UIVerticalScroller for standards and added UIHorizontalScroller
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/205
2023-01-01 15:57:31 +00:00
Simon Jackson 70661a4823 Updated "Action" use to "UnityAction" to avoid Unity issues
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/253
2023-01-01 13:29:53 +00:00
Simon Jackson eceaa87e93 Clean-up of ScrollSnapBase 2023-01-01 13:22:53 +00:00
Simon Jackson c61e5b7e7c Added new FIFO based UI Line Render when dynamic line rendering is needed (basic, no Beziers)
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/324
2023-01-01 13:03:28 +00:00
Simon Jackson d1b94bf6f1 Updated initialisation logic to not cause an endless loop in the TabNavigationHelper
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/208
2023-01-01 12:16:33 +00:00
Simon Jackson 55489bd617 Updated Editor menu layout 2023-01-01 11:45:02 +00:00
Simon Jackson 2c5a7bb47f Updated Editor create options to add the correct Event System Input module for the Input system used, now or old.
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/378
2023-01-01 11:33:42 +00:00
Simon Jackson 1853ad7e89 Marked TileSizeFitter as obsolete as Unity has made this unworkable
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/214
2023-01-01 11:32:37 +00:00
Simon Jackson 4ffa631059 Added Editor Menu Option to create a Min/Max slider
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/270
2022-12-30 17:54:17 +00:00
Simon Jackson 2848008f63 Checking in new MinMaxSlider
TODO
- Finish Editor creator
2022-12-24 14:52:49 +00:00
Simon Jackson 3ed20ecaed Updated all components using "LayoutGroup" to override their OnDisable feature to incorporate this fix:
https://gist.github.com/randomize/73ca6d3b6aa7210073692eb5cabd537e

Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/178
2022-12-24 13:28:19 +00:00
Simon Jackson e78a2806ed Resolved issue whereby the last row in a flow layout group would not size correctly.
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/357
2022-12-24 13:20:19 +00:00
Simon Jackson 18ebf8121d Removed unneeded size calculation which caused some issues with mixed height/width children.
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/380
2022-12-24 13:09:26 +00:00
Simon Jackson dced045001 Updated ScrollPositionControllerEditor as obsolete too 2022-12-24 13:02:50 +00:00
Simon Jackson b4d9f08dc4 Marked ScrollPositionController as Obsolete, users should use the newer Scroller component instead, will be removed in a future release.
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/305
2022-12-24 12:54:57 +00:00
Simon Jackson 2a37530aea Added SetArc method to UICircle as requested
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/280
2022-12-24 12:49:39 +00:00
Simon Jackson 35c778f5f7 Protecting Remove too 2022-12-24 12:45:31 +00:00
Simon Jackson a317663268 Added error handling around setting Unity UI Components for Vertical/Horizontal scrolling
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/296
2022-12-24 12:44:23 +00:00
Simon Jackson 85ee380ee9 Updated Cooldown button to work with Keyboard input
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/171
2022-12-18 19:29:40 +00:00
Simon Jackson 00b67b7046 Updated Points to always be an array of 1 when set to nothing.
Resolves: https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/295
2022-12-18 18:09:58 +00:00
Simon Jackson c08a91f421 Hard reset of Colour picker guids 2022-11-27 16:54:19 +00:00
Simon Jackson 7de501c42b Add newly generated HSV picker meta files 2022-11-27 16:44:25 +00:00
Simon Jackson ebbed37836 Remove meta duplicates for HSVColour Picker 2022-11-27 16:42:34 +00:00
Simon Jackson 3dbd9261cd Updated Depth Texture sampler in UI Particles Shaders
Resolves:
- https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/401
2022-11-27 16:28:14 +00:00
Simon Jackson c2ada36c41 Updated Curly UI to wait until end of the frame to recalculate positions
Also updated Editor script to work in 2022

Resolves:
- https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/409
2022-11-27 15:14:52 +00:00
Simon Jackson c5a8af63f8 Updated UIVertical scroller to be 2022 compliant
Resolves:
- https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/410
2022-11-27 14:32:16 +00:00
Simon Jackson 8004bcf39b Updated #if filter inclusion to 2019_1_OR_Newer
resolves:
- https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues/411
2022-11-27 13:51:39 +00:00
Simon Jackson afd645a470 Merged in fix/ReorderableListTransferability (pull request #137)
Fix IsTransferable behaviour of ReOrderable List Element
2022-04-23 22:38:00 +00:00
Simon Jackson 10e5273b31 Fixed issue which allowed an item marked as NOT transferable to actually be transferred between lists
Resolves #382
2022-04-23 23:36:50 +01:00
Simon Jackson a041f188b6 Merged in fix/UIConnectorAsPrefab (pull request #136)
UI Connector as Prefab fix
2022-04-23 22:26:27 +00:00
Simon Jackson 5db15808e2 Fixed the UIConnector to safely handle when no parent canvas can be found.
Resolves #392
2022-04-23 23:25:31 +01:00
Simon Jackson 30c5d8c1ff Merged in fix/UIParticleSystemUpdate (pull request #135)
Fix/UIParticleSystemUpdate
2022-04-23 22:13:29 +00:00
Simon Jackson c059e2338a Updated UIParticleSystem access to Particles array to ensure it is more stable.
Updated some #if statements to be better future proofed

Resolves #360
2022-04-23 23:12:42 +01:00
Simon Jackson 8a31713e46 Merge branch 'development' of https://github.com/Unity-UI-Extensions/com.unity.uiextensions into development 2022-04-23 21:26:05 +01:00
Simon Jackson 711ee02cb3 Merged in fix/StepperWarnings (pull request #134)
Fixed issue with SendMessage events raised by the Stepper control
2022-04-23 20:25:23 +00:00
Simon Jackson d0fbb28b05 Resolves #397
Moved OnValidate checks which redraw the component to the RectTransformDimensionsCHanged event
2022-04-23 21:24:18 +01:00
Simon Jackson 5bd7df19e1 Merged in fix/NextPreviousScrollsnapFix (pull request #133)
Scroll Snap buttons fix
2022-04-23 20:02:37 +00:00
Simon Jackson fc6ea6089d Fixes issue #398 where the Next / Previous buttons filed to work if the ScrollSnap was previously scrolling.
Also renamed the Extension Methods scripts and added a new function.

Resolves: #398
2022-04-23 21:01:37 +01:00
Simon Jackson 142582847b Remove old BitBucket Pipeline for GitHub 2022-04-23 14:59:49 +01:00
Simon Jackson 30b65fb979 Merged in fix manually because... Bitbucket
https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/pull-requests/130
2022-04-23 11:53:17 +01:00
Simon Jackson 3582824afa Applying PR manually, because Bitbucket
https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/pull-requests/128
2022-04-23 11:49:46 +01:00
Simon Jackson 771c7776c0 Taking in fix from
https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/pull-requests/132
2022-04-23 11:45:32 +01:00
Ben MacKinnon ca090d1797 Merged in RangeSlider-upgrade (pull request #131)
Upgraded RangeSlider to work in both Horizontal and Verticle setups, just like regular slider.

Approved-by: Simon Jackson
2022-04-23 10:43:01 +00:00
Ben MacKinnon 33568a6d67 Upgraded RangeSlider to work in both Horizontal and Verticle setups, just like regular slider.
Also fixed a minor issue with offset when dragging on the bar.

# Conflicts:
#	Runtime/Scripts/Controls/RangeSlider.cs
2022-03-21 18:32:08 +00:00
Simon Jackson d47b99ce0c Merged in feature/controlTouchUp (pull request #127)
Feature/controlTouchUp
2021-10-21 13:03:22 +00:00
Simon Jackson 056419a87b Updated Dropdown list to NOT resize text Rect on draw 2021-10-21 13:57:42 +01:00
Simon Jackson f101afbb29 Clean up range slider unused variables 2021-10-21 13:48:44 +01:00
Simon Jackson 3dae7181cd Merged in fix/infinitescrollcontentsize (pull request #126)
Fix/infinitescrollcontentsize
2021-09-05 14:43:46 +00:00
Simon Jackson 1a6181842a Merged in fix/ragesliderfix (pull request #125)
fix: Range slider low value stuck in max position
2021-09-05 14:43:29 +00:00
Simon Jackson 6333967b9a Patches from PR 2021-09-05 15:39:28 +01:00
Robert Rioja 9363fd3221 Merged in feature/improved-ui-highlightable (pull request #123)
Improved UI Highlightable Utility

Approved-by: Simon Jackson
2021-09-05 14:36:58 +00:00
Simon Jackson 1c68432e02 Clean-up and reset pivots on scene start 2021-09-05 15:33:24 +01:00
Simon Jackson 0410ca53d7 Updated Infinite scroll to work with content of different sizes 2021-09-05 15:23:48 +01:00
Simon Jackson 774f8de199 Resolves issue where the lower range value would become stuck when moved to the max value position
Resolves: https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/issues/381/cant-move-range-slider-if-low-is-moved-to
2021-09-05 09:33:19 +01:00
Simon Jackson b0f161a4e0 Update package preview release 2021-09-05 09:04:15 +01:00
Simon (Darkside) Jackson 830a4466eb Patch fix for UILineRenderer 2021-06-23 13:23:13 +01:00
Robert Rioja 0de91f60fb Added OnHighlightChanged and OnPressChanged events
Added getters and setters for Highlighted and Pressed
2021-05-27 18:38:47 +00:00
Simon (Darkside) Jackson dff07c6952 Package upver for Development 2021-05-10 20:42:38 +01:00
22 changed files with 728 additions and 423 deletions

View File

@ -1,10 +1,10 @@
name: Build and test UPM packages for platforms on all available Unity Versions
name: Build and test UPM packages for platforms, all branches except main
on:
pull_request:
branches-ignore:
- 'release'
# Ignore PRs targetting main
# Ignore PRs targeting main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
@ -14,6 +14,7 @@ concurrency:
cancel-in-progress: true
jobs:
# Check Unity version required by the package
# Run Unity build unit tests defined in the package for a single version for feature branches
Run-Partial-Unit-Tests:
name: Run Unity Unit Tests
@ -26,12 +27,4 @@ jobs:
Run-Full-Unit-Tests:
name: Run Unity Unit Tests
if: github.ref == 'refs/heads/development'
uses: ./.github/workflows/rununitybuildmultiversion.yml
# Update the package release version
Update-Version:
name: Update Package Version
uses: ./.github/workflows/tagrelease.yml
with:
build-target: windows
secrets: inherit
uses: ./.github/workflows/rununitybuildmultiversion.yml

View File

@ -0,0 +1,26 @@
name: Publish development branch on Merge
on:
pull_request:
types:
- closed
branches:
- development
# On close of PR targeting development
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
release_on_merge:
if: github.event.pull_request.merged == true
name: Tag and Publish UPM package
uses: ./.github/workflows/upversionandtagrelease.yml
with:
build-host: ubuntu-latest
build-type: pre-release
secrets: inherit

91
.github/workflows/main-publish.yml vendored Normal file
View File

@ -0,0 +1,91 @@
name: Publish main branch and increment version
on:
pull_request:
types:
- closed
branches:
- main
jobs:
# Get Version to tag and release the branch, no up-version - [no-ver] included in PR title
validate-environment:
if: github.event.pull_request.merged == true && contains(github.event.pull_request.title, 'no-ver')
name: Get Version from UPM package
uses: ./.github/workflows/getpackageversionfrompackage.yml
with:
build-host: ubuntu-latest
# Perform tagging
release-Package-only:
needs: validate-environment
name: Release package only, no upversion
uses: ./.github/workflows/tagrelease.yml
with:
build-host: ubuntu-latest
version: ${{ needs.validate-environment.outputs.packageversion }}
secrets: inherit
# Up version the release and publish major release
upversion-major-Package:
if: github.event.pull_request.merged == true && contains(github.event.pull_request.title, 'no-ver') == false && contains(github.event.pull_request.title, 'major-release')
name: Major Version package and release
uses: ./.github/workflows/upversionandtagrelease.yml
with:
build-host: ubuntu-latest
build-type: major
secrets: inherit
# Up version the release and publish minor release
upversion-minor-Package:
if: github.event.pull_request.merged == true && contains(github.event.pull_request.title, 'no-ver') == false && contains(github.event.pull_request.title, 'minor-release')
name: Minor Version package and release
uses: ./.github/workflows/upversionandtagrelease.yml
with:
build-host: ubuntu-latest
build-type: minor
secrets: inherit
# Up version the release and publish patch release (default)
upversion-patch-Package:
if: github.event.pull_request.merged == true && contains(github.event.pull_request.title, 'no-ver') == false && contains(github.event.pull_request.title, 'minor-release') == false && contains(github.event.pull_request.title, 'major-release') == false
name: Patch Version package and release
uses: ./.github/workflows/upversionandtagrelease.yml
with:
build-host: ubuntu-latest
build-type: patch-release
secrets: inherit
release-Complete:
if: ${{ always() }}
needs: [upversion-major-Package, upversion-minor-Package, upversion-patch-Package, release-Package-only]
name: Release complete
runs-on: ubuntu-latest
steps:
- name: Script Version
run: echo "Release done, updating Development"
# Refresh the development branch with the main publish
refresh-development:
if: ${{ always() }}
needs: [release-Complete]
name: Refresh development branch
uses: ./.github/workflows/refreshbranch.yml
with:
build-host: ubuntu-latest
target-branch: development
source-branch: main
secrets: inherit
# Up version the development branch ready for future development
upversion-development:
if: ${{ always() }}
needs: [refresh-development]
name: UpVersion the development branch for the next release
uses: ./.github/workflows/upversionandtagrelease.yml
with:
build-host: ubuntu-latest
build-type: patch
target-branch: development
createTag: false
secrets: inherit

43
.github/workflows/refreshbranch.yml vendored Normal file
View File

@ -0,0 +1,43 @@
name: Refresh branch
on:
workflow_call:
inputs:
build-host:
required: true
type: string
target-branch:
required: true
type: string
source-branch:
required: true
type: string
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
packageRelease:
name: Refresh ${{ inputs.target-branch }} branch from ${{ inputs.source-branch }} branch
runs-on: ${{ inputs.build-host }}
steps:
- name: Script Version
run: |
echo "::group::Script Versioning"
$scriptVersion = "1.0.1"
echo "Build Script Version: $scriptVersion"
echo "::endgroup::"
shell: pwsh
- uses: actions/checkout@v3
with:
ref: ${{ inputs.target-branch }}
clean: true
token: ${{ secrets.GIT_PAT }}
- name: Refresh from Source Branch
run: |
git pull origin ${{ inputs.source-branch }}
git commit -m "Branch ${{ inputs.target-branch }} updated with changes from ${{ inputs.source-branch }} [skip ci]"
git push origin ${{ inputs.target-branch }}
echo "Branch ${{ inputs.target-branch }} updated with changes from ${{ inputs.source-branch }}"
shell: pwsh

View File

@ -18,7 +18,7 @@ jobs:
- os: windows
unityVersion: 2019.4
build-target: Android
- os: macos
- os: macOS
unityVersion: 2019.4
build-target: iOS
- os: windows
@ -30,7 +30,7 @@ jobs:
- os: windows
unityVersion: 2020.3
build-target: Android
- os: macos
- os: macOS
unityVersion: 2020.3
build-target: iOS
- os: windows
@ -42,7 +42,7 @@ jobs:
- os: windows
unityVersion: 2021.3
build-target: Android
- os: macos
- os: macOS
unityVersion: 2021.3
build-target: iOS
- os: windows
@ -54,7 +54,7 @@ jobs:
- os: windows
unityVersion: 2022.2
build-target: Android
- os: macos
- os: macOS
unityVersion: 2022.2
build-target: iOS
- os: windows
@ -80,7 +80,7 @@ jobs:
name: 'Run Unity Builds'
run: |
echo "::group::Set Hub and editor locations"
$unityVersion = ${{ matrix.unityVersion }}
$unityVersion = '${{ matrix.unityVersion }}'
echo "::group::Set Hub and editor locations"
@ -90,6 +90,7 @@ jobs:
$hubPath = "C:\Program Files\Unity Hub\Unity Hub.exe"
$editorRootPath = "C:\Program Files\Unity\Hub\Editor\"
$editorFileEx = "\Editor\Unity.exe"
$directorySeparatorChar = "\"
#"Unity Hub.exe" -- --headless help
#. 'C:\Program Files\Unity Hub\Unity Hub.exe' -- --headless help
@ -100,11 +101,12 @@ jobs:
}
elseif ( $global:PSVersionTable.OS.Contains("Darwin") )
{
$hubPath = "/Applications/Unity Hub.app/Contents/MacOS/Unity Hub"
$hubPath = "/Applications/Unity Hub.app/Contents/macOS/Unity Hub"
$editorRootPath = "/Applications/Unity/Hub/Editor/"
$editorFileEx = "/Unity.app/Contents/MacOS/Unity"
$editorFileEx = "/Unity.app/Contents/macOS/Unity"
$directorySeparatorChar = "/"
# /Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless help
# /Applications/Unity\ Hub.app/Contents/macOS/Unity\ Hub -- --headless help
function unity-hub
{
& $hubPath -- --headless $args.Split(" ") | Out-String -NoNewline
@ -115,6 +117,7 @@ jobs:
$hubPath = "$HOME/Unity Hub/UnityHub.AppImage"
$editorRootPath = "$HOME/Unity/Hub/Editor/"
$editorFileEx = "/Editor/Unity"
$directorySeparatorChar = "/"
# /UnityHub.AppImage --headless help
# xvfb-run --auto-servernum "$HOME/Unity Hub/UnityHub.AppImage" --headless help
@ -126,8 +129,6 @@ jobs:
echo "::endgroup::"
echo "::group::Get String function to query a string for a value"
function GetString($InputString, $InputPattern, $MatchIndex)
@ -151,10 +152,9 @@ jobs:
echo "::endgroup::"
echo "::group::Get Installed Unity version based on Matrix"
echo 'Script Start'
echo "Unity hub path is {$hubPath}"
echo "Requested unity version is {$unityVersion}"
$InstalledUnityVersions = unity-hub editors
$editorRootPath = unity-hub ip -g
echo "Installed unity versions are {$InstalledUnityVersions}"
@ -171,7 +171,7 @@ jobs:
$queryUnityVersion = GetString $InstalledUnityVersions "$unityVersion" -MatchIndex 0
}
echo "Found unity version is {$queryUnityVersion}"
echo "Found unity version is {$queryUnityVersion} for input {$unityVersion}"
if ($queryUnityVersion -ne 0)
{
@ -218,7 +218,7 @@ jobs:
}
elseif ( $global:PSVersionTable.OS.Contains("Darwin") ) {
echo 'Building using Mac'
$editorFileEx = "/Unity.app/Contents/MacOS/Unity"
$editorFileEx = "/Unity.app/Contents/macOS/Unity"
$editorrunpath = Join-Path $editorRootPath $unityVersion $editorFileEx
function unity-editor {
@ -456,4 +456,4 @@ jobs:
if: always()
with:
name: unity-build-log
path: Logs/**
path: Logs/**

View File

@ -19,7 +19,7 @@ jobs:
strategy:
matrix:
include:
- os: macos
- os: macOS
build-target: iOS
- os: windows
build-target: Android
@ -40,12 +40,11 @@ jobs:
with:
submodules: recursive
clean: true
- id: build
name: 'Run Unity Builds'
run: |
echo "::group::Set Hub and editor locations"
$unityVersion = ${{ inputs.unityVersion }}
$unityVersion = '${{ inputs.unityVersion }}'
echo "::group::Set Hub and editor locations"
@ -55,6 +54,7 @@ jobs:
$hubPath = "C:\Program Files\Unity Hub\Unity Hub.exe"
$editorRootPath = "C:\Program Files\Unity\Hub\Editor\"
$editorFileEx = "\Editor\Unity.exe"
$directorySeparatorChar = "\"
#"Unity Hub.exe" -- --headless help
#. 'C:\Program Files\Unity Hub\Unity Hub.exe' -- --headless help
@ -68,6 +68,7 @@ jobs:
$hubPath = "/Applications/Unity Hub.app/Contents/MacOS/Unity Hub"
$editorRootPath = "/Applications/Unity/Hub/Editor/"
$editorFileEx = "/Unity.app/Contents/MacOS/Unity"
$directorySeparatorChar = "/"
# /Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless help
function unity-hub
@ -80,6 +81,7 @@ jobs:
$hubPath = "$HOME/Unity Hub/UnityHub.AppImage"
$editorRootPath = "$HOME/Unity/Hub/Editor/"
$editorFileEx = "/Editor/Unity"
$directorySeparatorChar = "/"
# /UnityHub.AppImage --headless help
# xvfb-run --auto-servernum "$HOME/Unity Hub/UnityHub.AppImage" --headless help
@ -91,8 +93,6 @@ jobs:
echo "::endgroup::"
echo "::group::Get String function to query a string for a value"
function GetString($InputString, $InputPattern, $MatchIndex)
@ -115,8 +115,7 @@ jobs:
}
echo "::endgroup::"
echo "::group::Get Installed Unity version based on Matrix"
echo 'Script Start'
echo "::group::Find Installed Unity version based on input"
echo "Unity hub path is {$hubPath}"
echo "Requested unity version is {$unityVersion}"
@ -136,7 +135,7 @@ jobs:
$queryUnityVersion = GetString $InstalledUnityVersions "$unityVersion" -MatchIndex 0
}
echo "Found unity version is {$queryUnityVersion}"
echo "Found unity version is {$queryUnityVersion} for input {$unityVersion}"
if ($queryUnityVersion -ne 0)
{
@ -421,4 +420,4 @@ jobs:
if: always()
with:
name: unity-build-log
path: Logs/**
path: Logs/**

View File

@ -1,33 +1,26 @@
name: Package UPM project and deploy
name: Tag Release
on:
workflow_call:
inputs:
build-target:
build-host:
required: true
type: string
version:
required: true
type: string
build-type:
required: false
default: 'pre-release'
type: string
# options:
# - major
# - minor
# - patch
# - pre-release
# - build
outputs:
packageversion:
description: "Returns the version of Unity the UPM package requires"
value: ${{ jobs.packageRelease.outputs.packageversion }}
secrets:
GIT_USER_NAME:
required: false
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
packageRelease:
name: Package UPM Project and tag
runs-on: ${{ inputs.build-target }}
runs-on: ${{ inputs.build-host }}
outputs:
packageversion: ${{ steps.getpackageversion.outputs.packageversion }}
steps:
@ -40,6 +33,7 @@ jobs:
shell: pwsh
- uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: recursive
clean: true
token: ${{ secrets.GIT_PAT }}
@ -60,87 +54,26 @@ jobs:
$gitUser = "${{ secrets.GIT_USER_NAME }}"
$gitEmail = "$gitUser@users.noreply.github.com"
}
echo "email $gitUser@users.noreply.github.com"
git config --global user.email "$gitUser@users.noreply.github.com"
git config --global user.name "$gitUser"
shell: pwsh
- id: getpackageversion
name: Bump UPM Package version
shell: pwsh
- name: Check if Tag Exists
run: |
function UpdateProjectVersionJSON {
param (
[Parameter(Mandatory)]
$type,
$packageFile = 'package.json'
)
<#
Type of build can be one of the following
- 'build' # Build release - 1.0.0-pre-release.0+1
- 'pre-release' # Pre-Release release - 1.0.0-pre-release.1
- 'patch' # Patch release - 1.0.1
- 'minor' # Minor release - 1.1.0
- 'major' # Major release - 2.0.0
#>
if ( -not (Test-Path -Path $packageFile) ) {
Write-Error "Failed to find a valid project manifest at `"$packageFile`""
return $null
$tagVersion = "${{ inputs.version }}"
$tags = git tag
echo "Tags found are [$tags], searching for [$tagVersion]"
foreach ($tag in $tags)
{
if($tag.Trim() -eq "$tagVersion")
{
Write-Error "$tagVersion tag already exists"
exit 1
}
$packageInfo = (Get-Content $packageFile -Raw) | ConvertFrom-Json
Write-Host "Detected Project Version:" $packageInfo.version
function IfNull($a, $b, $c) { if ($null -eq $a) { return $b } else { return $c } }
$packageSemVer = [System.Management.Automation.SemanticVersion]$packageInfo.version
$majorVersion = if($null -eq $packageSemVer.Major) {0} else {$packageSemVer.Major}
$minorVersion = if($null -eq $packageSemVer.Minor) {0} else {$packageSemVer.Minor}
$patchVersion = if($null -eq $packageSemVer.Patch) {0} else {$packageSemVer.Patch}
$prereleaseVersion = if($null -eq $packageSemVer.PreReleaseLabel) {0} else {$packageSemVer.PreReleaseLabel.Replace('pre-release.','')}
$buildVersion = if($null -eq $packageSemVer.BuildLabel) {0} else {$packageSemVer.BuildLabel}
# work out new version
switch ($type) {
'build' {
[int]$buildVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, $patchVersion, "pre-release." + $prereleaseVersion, $buildVersion)
}
'pre-release' {
[int]$prereleaseVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, $patchVersion, "pre-release." + $prereleaseVersion)
}
'patch' {
[int]$patchVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, $patchVersion)
}
'minor' {
[int]$minorVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, 0)
}
'major' {
[int]$majorVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, 0, 0)
}
}
Write-Host "Upgrading project version [$packageSemVer] to [$newPackageSemVer]"
# Write out updated package info
$packageInfo.version = $newPackageSemVer.ToString()
$packageInfo | ConvertTo-Json | Set-Content $packageFile
return $packageInfo.version
}
$packageFile = 'package.json'
$result = UpdateProjectVersionJSON("${{ inputs.build-type }}","$packageFile")
if([string]::IsNullOrEmpty($result)) {
echo "Version patch failed"
exit 1
}
echo "packageversion=$result" >> $env:GITHUB_OUTPUT
git add "$packageFile"
git commit -m "Auto increment pre-release version to $result [skip ci]"
git tag -fa "$result" "${GITHUB_SHA}" -m "$result Release"
git push origin --force
shell: pwsh
shell: pwsh
- name: Create tag and push
run: |
$tagVersion = "${{ inputs.version }}"
git tag -fa "v$tagVersion" "${GITHUB_SHA}" -m "v$tagVersion Release [skip ci]"
git push origin "v$tagVersion" --force
shell: pwsh

View File

@ -0,0 +1,181 @@
name: UpVersion Package UPM project and create new tag
on:
workflow_call:
inputs:
build-host:
required: true
type: string
build-type:
required: false
default: 'pre-release'
type: string
# options:
# - major
# - minor
# - patch
# - patch-release
# - pre-release
# - build
target-branch:
required: false
type: string
default: ${{ github.ref }}
createTag:
required: false
type: boolean
default: true
outputs:
packageversion:
description: "Returns the version of Unity the UPM package requires"
value: ${{ jobs.packageRelease.outputs.packageversion }}
secrets:
GIT_PAT:
required: true
jobs:
packageRelease:
name: Package UPM Project and tag
runs-on: ${{ inputs.build-host }}
outputs:
packageversion: ${{ steps.getpackageversion.outputs.packageversion }}
steps:
- name: Script Version
run: |
echo "::group::Script Versioning"
$scriptVersion = "1.0.2"
echo "Build Script Version: $scriptVersion"
echo "::endgroup::"
shell: pwsh
- uses: actions/checkout@v3
with:
ref: ${{ inputs.target-branch }}
fetch-depth: 0
submodules: recursive
clean: true
token: ${{ secrets.GIT_PAT }}
- uses: actions/setup-node@v3
- name: Set Github vars
run: |
if([string]::IsNullOrEmpty('${{ secrets.GIT_USER_NAME }}')){
if([string]::IsNullOrEmpty('${{ secrets.GIT_USER_NAME }}')){
$gitUser = "action"
$gitEmail = "action@github.com"
}
else {
$gitUser = "${GITHUB_ACTOR}"
$gitEmail = "$gitUser@users.noreply.github.com"
}
}
else {
$gitUser = "${{ secrets.GIT_USER_NAME }}"
$gitEmail = "$gitUser@users.noreply.github.com"
}
git config --global user.email "$gitUser@users.noreply.github.com"
git config --global user.name "$gitUser"
shell: pwsh
- id: getpackageversion
name: Bump UPM Package version
run: |
function UpdateProjectVersionJSON {
param (
[Parameter(Mandatory)]
$type,
$packageFile = 'package.json'
)
<#
Type of build can be one of the following
- 'build' # Build release - 1.0.0-pre.0+1
- 'pre-release' # Pre-Release - 1.0.0-pre.1
- 'patch-release' # Patch release - 1.0.1 (reset preview version to current patch, no increase)
- 'patch' # Patch release - 1.0.1
- 'minor' # Minor release - 1.1.0
- 'major' # Major release - 2.0.0
#>
if ( -not (Test-Path -Path $packageFile) ) {
Write-Error "Failed to find a valid project manifest at `"$packageFile`""
return $null
}
$packageInfo = (Get-Content $packageFile -Raw) | ConvertFrom-Json
Write-Host "Detected Project Version:" $packageInfo.version
function IfNull($a, $b, $c) { if ($null -eq $a) { return $b } else { return $c } }
$packageSemVer = [System.Management.Automation.SemanticVersion]$packageInfo.version
$majorVersion = if($null -eq $packageSemVer.Major) {0} else {$packageSemVer.Major}
$minorVersion = if($null -eq $packageSemVer.Minor) {0} else {$packageSemVer.Minor}
$patchVersion = if($null -eq $packageSemVer.Patch) {0} else {$packageSemVer.Patch}
$prereleaseVersion = if($null -eq $packageSemVer.PreReleaseLabel) {0} else {$packageSemVer.PreReleaseLabel.Replace('pre.','')}
$buildVersion = if($null -eq $packageSemVer.BuildLabel) {0} else {$packageSemVer.BuildLabel}
# work out new version
switch ($type) {
'build' {
[int]$buildVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, $patchVersion, "pre." + $prereleaseVersion, $buildVersion)
}
'pre-release' {
[int]$prereleaseVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, $patchVersion, "pre." + $prereleaseVersion)
}
'patch-release' {
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, $patchVersion)
}
'patch' {
[int]$patchVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, $patchVersion)
}
'minor' {
[int]$minorVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, $minorVersion, 0)
}
'major' {
[int]$majorVersion += 1
$newPackageSemVer = [System.Management.Automation.SemanticVersion]::New($majorVersion, 0, 0)
}
}
Write-Host "Upgrading project version [$packageSemVer] to [$newPackageSemVer]"
# Write out updated package info
$packageInfo.version = $newPackageSemVer.ToString()
$packageInfo | ConvertTo-Json | Set-Content $packageFile
return $packageInfo.version
}
$packageFile = 'package.json'
$result = UpdateProjectVersionJSON("${{ inputs.build-type }}","$packageFile")
if([string]::IsNullOrEmpty($result)) {
echo "Version patch failed"
exit 1
}
git add "$packageFile"
git commit -m "Auto increment pre-release version to $result [skip ci]"
git push origin
echo "packageversion=$result" >> $env:GITHUB_OUTPUT
shell: pwsh
- name: Check if Tag Exists
run: |
$tagVersion = '${{steps.getpackageversion.outputs.packageversion }}'
$tags = git tag
echo "Tags found are [$tags], searching for [$tagVersion]"
foreach ($tag in $tags)
{
if($tag.Trim() -eq "$tagVersion")
{
Write-Error "$tagVersion tag already exists"
exit 1
}
}
shell: pwsh
- name: Publish package tag
if: ${{inputs.createTag == true}}
run: |
$outputVersion = '${{steps.getpackageversion.outputs.packageversion }}'
git tag -fa "v$outputVersion" "${GITHUB_SHA}" -m "v$outputVersion Release"
git push origin "v$outputVersion" --force --tags
shell: pwsh

View File

@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/).
## Release 2.3 - Reanimation - 2022/02/07
## Release 2.3 - Reanimation - 2023/02/07
It has been a tough time for all since the last update, but things have been moving steadily along. In the past few months there has been a concerted effort to revamp and update the project ready for Unity 2022, as well as migrating the source repository over to GitHub and refreshing all the things.
We hope the new release is better for everyone and we have paid close attention to the editor menus and places to find all the controls for this release.

View File

@ -209,6 +209,8 @@ There are almost 70+ extension controls / effect and other utilities in the proj
|NicerOutline|RaycastMask|UIFlippable|UIImageCrop|SoftAlphaMask|
|CylinderText|UIParticleSystem|CurlyUI|Shine Effect|Shader Effects|
> Text Effects are not supported with TextMeshPro due to its architecture, try using the native TextMeshPro effects instead.
[Additional Components](https://unity-ui-extensions.github.io/Controls.html#additional-components)
|ReturnKeyTrigger|TabNavigation|uGUITools|ScrollRectTweener|ScrollRectLinker|

View File

@ -1,13 +1,10 @@
/// Credit Breyer
/// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1777407
#if !UNITY_2022_1_OR_NEWER
namespace UnityEngine.UI.Extensions
{
#if UNITY_2022_1_OR_NEWER
[RequireComponent(typeof(TMPro.TMP_Text))]
#else
[RequireComponent(typeof(Text))]
#endif
[RequireComponent(typeof(RectTransform))]
[AddComponentMenu("UI/Effects/Extensions/Curved Text")]
public class CurvedText : BaseMeshEffect
@ -87,3 +84,4 @@ namespace UnityEngine.UI.Extensions
}
}
}
#endif

View File

@ -1,14 +1,11 @@
/// adaption for cylindrical bending by herbst
/// Credit Breyer
/// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1777407
#if UNITY_2022_1_OR_NEWER
namespace UnityEngine.UI.Extensions
{
#if UNITY_2022_1_OR_NEWER
[RequireComponent(typeof(TMPro.TMP_Text))]
#else
[RequireComponent(typeof(Text))]
#endif
[RequireComponent(typeof(RectTransform))]
[AddComponentMenu("UI/Effects/Extensions/Cylinder Text")]
public class CylinderText : BaseMeshEffect
@ -57,3 +54,4 @@ namespace UnityEngine.UI.Extensions
}
}
}
#endif

View File

@ -40,7 +40,7 @@ use HTML-like tags in your text. Try it out, you'll see what I mean. It doesn't
break down entirely, but it doesn't really do what you'd want either.
*/
#if !UNITY_2022_1_OR_NEWER
using System.Collections.Generic;
namespace UnityEngine.UI.Extensions
@ -74,6 +74,11 @@ namespace UnityEngine.UI.Extensions
}
}
protected override void Awake()
{
Debug.Log($"Awake, [{m_spacing}]");
}
public override void ModifyMesh(VertexHelper vh)
{
if (! IsActive()) return;
@ -81,11 +86,8 @@ namespace UnityEngine.UI.Extensions
List<UIVertex> verts = new List<UIVertex>();
vh.GetUIVertexStream(verts);
#if UNITY_2022_1_OR_NEWER
var text = GetComponent<TMPro.TMP_Text>();
#else
var text = GetComponent<Text>();
#endif
if (text == null)
{
Debug.LogWarning("LetterSpacing: Missing Text component");
@ -98,28 +100,6 @@ namespace UnityEngine.UI.Extensions
float alignmentFactor = 0;
int glyphIdx = 0;
#if UNITY_2022_1_OR_NEWER
switch (text.alignment)
{
case TMPro.TextAlignmentOptions.BottomLeft:
case TMPro.TextAlignmentOptions.MidlineLeft:
case TMPro.TextAlignmentOptions.TopLeft:
alignmentFactor = 0f;
break;
case TMPro.TextAlignmentOptions.BottomJustified:
case TMPro.TextAlignmentOptions.MidlineJustified:
case TMPro.TextAlignmentOptions.TopJustified:
alignmentFactor = 0.5f;
break;
case TMPro.TextAlignmentOptions.BottomRight:
case TMPro.TextAlignmentOptions.MidlineRight:
case TMPro.TextAlignmentOptions.TopRight:
alignmentFactor = 1f;
break;
}
#else
switch (text.alignment)
{
case TextAnchor.LowerLeft:
@ -140,8 +120,7 @@ namespace UnityEngine.UI.Extensions
alignmentFactor = 1f;
break;
}
#endif
for (int lineIdx=0; lineIdx < lines.Length; lineIdx++)
{
string line = lines[lineIdx];
@ -193,3 +172,4 @@ namespace UnityEngine.UI.Extensions
}
}
}
#endif

View File

@ -40,17 +40,14 @@ use HTML-like tags in your text. Try it out, you'll see what I mean. It doesn't
break down entirely, but it doesn't really do what you'd want either.
*/
#if !UNITY_2022_1_OR_NEWER
using System.Collections.Generic;
namespace UnityEngine.UI.Extensions
{
[AddComponentMenu("UI/Effects/Extensions/Mono Spacing")]
#if UNITY_2022_1_OR_NEWER
[RequireComponent(typeof(TMPro.TMP_Text))]
#else
[RequireComponent(typeof(Text))]
#endif
[RequireComponent(typeof(RectTransform))]
///Summary
/// Note, Vertex Count has changed in 5.2.1+, is now 6 (two tris) instead of 4 (tri strip).
@ -62,21 +59,15 @@ namespace UnityEngine.UI.Extensions
public bool UseHalfCharWidth = false;
private RectTransform rectTransform;
#if UNITY_2022_1_OR_NEWER
private TMPro.TMP_Text text;
#else
private Text text;
#endif
protected MonoSpacing() { }
protected override void Awake()
{
#if UNITY_2022_1_OR_NEWER
text = GetComponent<TMPro.TMP_Text>();
#else
text = GetComponent<Text>();
#endif
if (text == null)
{
Debug.LogWarning("MonoSpacing: Missing Text component");
@ -117,28 +108,6 @@ namespace UnityEngine.UI.Extensions
float alignmentFactor = 0;
int glyphIdx = 0;
#if UNITY_2022_1_OR_NEWER
switch (text.alignment)
{
case TMPro.TextAlignmentOptions.BottomLeft:
case TMPro.TextAlignmentOptions.MidlineLeft:
case TMPro.TextAlignmentOptions.TopLeft:
alignmentFactor = 0f;
break;
case TMPro.TextAlignmentOptions.BottomJustified:
case TMPro.TextAlignmentOptions.MidlineJustified:
case TMPro.TextAlignmentOptions.TopJustified:
alignmentFactor = 0.5f;
break;
case TMPro.TextAlignmentOptions.BottomRight:
case TMPro.TextAlignmentOptions.MidlineRight:
case TMPro.TextAlignmentOptions.TopRight:
alignmentFactor = 1f;
break;
}
#else
switch (text.alignment)
{
case TextAnchor.LowerLeft:
@ -159,7 +128,7 @@ namespace UnityEngine.UI.Extensions
alignmentFactor = 1f;
break;
}
#endif
for (int lineIdx=0; lineIdx < lines.Length; lineIdx++)
{
string line = lines[lineIdx];
@ -221,4 +190,5 @@ namespace UnityEngine.UI.Extensions
vh.AddUIVertexTriangleStream(verts);
}
}
}
}
#endif

View File

@ -134,7 +134,7 @@ namespace UnityEngine.UI.Extensions
start += ApplyText(m_Verts, vh, start);
}
private int ApplyOutlineNoGC(List<UIVertex> verts, Color color, float x, float y, VertexHelper vh, int startIndex)
private int ApplyOutlineNoGC(List<UIVertex> verts, Color32 color, float x, float y, VertexHelper vh, int startIndex)
{
int length = verts.Count;
for (int i = 0; i < length; ++i)

View File

@ -6,6 +6,7 @@
/// Vertical Flow by Ramon Molossi
using System.Collections.Generic;
using System.Text;
namespace UnityEngine.UI.Extensions
{
@ -17,27 +18,32 @@ namespace UnityEngine.UI.Extensions
{
public enum Axis { Horizontal = 0, Vertical = 1 }
public float SpacingX = 0f;
private float _layoutHeight;
private float _layoutWidth;
public float SpacingX = 0f;
public float SpacingY = 0f;
public bool ExpandHorizontalSpacing = false;
public bool ChildForceExpandWidth = false;
public bool ChildForceExpandHeight = false;
public bool invertOrder = false;
private float _layoutHeight;
private float _layoutWidth;
[SerializeField] protected Axis m_StartAxis = Axis.Horizontal;
public Axis startAxis { get { return m_StartAxis; } set { SetProperty(ref m_StartAxis, value); } }
[SerializeField]
protected Axis m_StartAxis = Axis.Horizontal;
public Axis StartAxis { get { return m_StartAxis; } set { SetProperty(ref m_StartAxis, value); } }
public override void CalculateLayoutInputHorizontal()
{
if (startAxis == Axis.Horizontal) {
base.CalculateLayoutInputHorizontal ();
var minWidth = GetGreatestMinimumChildWidth () + padding.left + padding.right;
SetLayoutInputForAxis (minWidth, -1, -1, 0);
} else {
_layoutWidth = SetLayout (0, true);
if (StartAxis == Axis.Horizontal)
{
base.CalculateLayoutInputHorizontal();
var minWidth = GetGreatestMinimumChildWidth() + padding.left + padding.right;
SetLayoutInputForAxis(minWidth, -1, -1, 0);
}
else
{
_layoutWidth = SetLayout(0, true);
}
}
@ -54,55 +60,42 @@ namespace UnityEngine.UI.Extensions
public override void CalculateLayoutInputVertical()
{
if (startAxis == Axis.Horizontal) {
_layoutHeight = SetLayout (1, true);
} else {
base.CalculateLayoutInputHorizontal ();
var minHeight = GetGreatestMinimumChildHeigth () + padding.bottom + padding.top;
SetLayoutInputForAxis (minHeight, -1, -1, 1);
if (StartAxis == Axis.Horizontal)
{
_layoutHeight = SetLayout(1, true);
}
else
{
base.CalculateLayoutInputHorizontal();
var minHeight = GetGreatestMinimumChildHeigth() + padding.bottom + padding.top;
SetLayoutInputForAxis(minHeight, -1, -1, 1);
}
}
protected bool IsCenterAlign
{
get
{
return childAlignment == TextAnchor.LowerCenter || childAlignment == TextAnchor.MiddleCenter ||
childAlignment == TextAnchor.UpperCenter;
}
get => childAlignment == TextAnchor.LowerCenter || childAlignment == TextAnchor.MiddleCenter || childAlignment == TextAnchor.UpperCenter;
}
protected bool IsRightAlign
{
get
{
return childAlignment == TextAnchor.LowerRight || childAlignment == TextAnchor.MiddleRight ||
childAlignment == TextAnchor.UpperRight;
}
get => childAlignment == TextAnchor.LowerRight || childAlignment == TextAnchor.MiddleRight || childAlignment == TextAnchor.UpperRight;
}
protected bool IsMiddleAlign
{
get
{
return childAlignment == TextAnchor.MiddleLeft || childAlignment == TextAnchor.MiddleRight ||
childAlignment == TextAnchor.MiddleCenter;
}
get => childAlignment == TextAnchor.MiddleLeft || childAlignment == TextAnchor.MiddleRight || childAlignment == TextAnchor.MiddleCenter;
}
protected bool IsLowerAlign
{
get
{
return childAlignment == TextAnchor.LowerLeft || childAlignment == TextAnchor.LowerRight ||
childAlignment == TextAnchor.LowerCenter;
}
get => childAlignment == TextAnchor.LowerLeft || childAlignment == TextAnchor.LowerRight || childAlignment == TextAnchor.LowerCenter;
}
/// <summary>
/// Holds the rects that will make up the current bar being processed
/// </summary>
private readonly IList<RectTransform> _itemList = new List<RectTransform>();
private readonly IList<RectTransform> _itemList = new List<RectTransform>();
/// <summary>
/// Main layout method
@ -122,25 +115,34 @@ namespace UnityEngine.UI.Extensions
float counterOffset = 0;
float groupSize = 0;
float workingSize = 0;
if (startAxis == Axis.Horizontal) {
if (StartAxis == Axis.Horizontal)
{
groupSize = groupHeight;
workingSize = groupWidth - padding.left - padding.right;
if (IsLowerAlign) {
if (IsLowerAlign)
{
offset = (float)padding.bottom;
counterOffset = (float)padding.top;
} else {
}
else
{
offset = (float)padding.top;
counterOffset = (float)padding.bottom;
}
spacingBetweenBars = SpacingY;
spacingBetweenElements = SpacingX;
} else if (startAxis == Axis.Vertical) {
}
else if (StartAxis == Axis.Vertical)
{
groupSize = groupWidth;
workingSize = groupHeight - padding.top - padding.bottom;
if (IsRightAlign) {
if (IsRightAlign)
{
offset = (float)padding.right;
counterOffset = (float)padding.left;
} else {
}
else
{
offset = (float)padding.left;
counterOffset = (float)padding.right;
}
@ -151,50 +153,59 @@ namespace UnityEngine.UI.Extensions
var currentBarSize = 0f;
var currentBarSpace = 0f;
for (var i = 0; i < rectChildren.Count; i++) {
for (var i = 0; i < rectChildren.Count; i++)
{
int index = i;
var child = rectChildren [index];
var child = rectChildren[index];
float childSize = 0;
float childOtherSize = 0;
//get height and width of elements.
if (startAxis == Axis.Horizontal) {
if (invertOrder) {
index = IsLowerAlign ? rectChildren.Count - 1 - i : i;
if (StartAxis == Axis.Horizontal)
{
if (invertOrder)
{
index = IsLowerAlign ? rectChildren.Count - 1 - i : i;
}
child = rectChildren [index];
childSize = LayoutUtility.GetPreferredSize (child, 0);
childSize = Mathf.Min (childSize, workingSize);
childOtherSize = LayoutUtility.GetPreferredSize (child, 1);
} else if (startAxis == Axis.Vertical) {
if (invertOrder) {
child = rectChildren[index];
childSize = LayoutUtility.GetPreferredSize(child, 0);
childSize = Mathf.Min(childSize, workingSize);
childOtherSize = LayoutUtility.GetPreferredSize(child, 1);
}
else if (StartAxis == Axis.Vertical)
{
if (invertOrder)
{
index = IsRightAlign ? rectChildren.Count - 1 - i : i;
}
child = rectChildren [index];
childSize = LayoutUtility.GetPreferredSize (child, 1);
childSize = Mathf.Min (childSize, workingSize);
childOtherSize = LayoutUtility.GetPreferredSize (child, 0);
child = rectChildren[index];
childSize = LayoutUtility.GetPreferredSize(child, 1);
childSize = Mathf.Min(childSize, workingSize);
childOtherSize = LayoutUtility.GetPreferredSize(child, 0);
}
// If adding this element would exceed the bounds of the container,
// go to a new bar after processing the current bar
if (currentBarSize + childSize > workingSize) {
if (currentBarSize + childSize > workingSize)
{
currentBarSize -= spacingBetweenElements;
// Process current bar elements positioning
if (!layoutInput) {
if (startAxis == Axis.Horizontal) {
float newOffset = CalculateRowVerticalOffset (groupSize, offset, currentBarSpace);
LayoutRow (_itemList, currentBarSize, currentBarSpace, workingSize, padding.left, newOffset, axis);
} else if (startAxis == Axis.Vertical) {
float newOffset = CalculateColHorizontalOffset (groupSize, offset, currentBarSpace);
LayoutCol (_itemList, currentBarSpace, currentBarSize, workingSize, newOffset, padding.top, axis);
if (!layoutInput)
{
if (StartAxis == Axis.Horizontal)
{
float newOffset = CalculateRowVerticalOffset(groupSize, offset, currentBarSpace);
LayoutRow(_itemList, currentBarSize, currentBarSpace, workingSize, padding.left, newOffset, axis);
}
else if (StartAxis == Axis.Vertical)
{
float newOffset = CalculateColHorizontalOffset(groupSize, offset, currentBarSpace);
LayoutCol(_itemList, currentBarSpace, currentBarSize, workingSize, newOffset, padding.top, axis);
}
}
// Clear existing bar
_itemList.Clear ();
_itemList.Clear();
// Add the current bar space to total barSpace accumulator, and reset to 0 for the next row
offset += currentBarSpace;
@ -202,31 +213,28 @@ namespace UnityEngine.UI.Extensions
currentBarSpace = 0;
currentBarSize = 0;
}
currentBarSize += childSize;
_itemList.Add (child);
_itemList.Add(child);
// We need the largest element height to determine the starting position of the next line
if (childOtherSize > currentBarSpace) {
currentBarSpace = childOtherSize;
}
currentBarSpace = childOtherSize > currentBarSpace ? childOtherSize : currentBarSpace;
// Don't do this for the last one
if (i < rectChildren.Count - 1){
currentBarSize += spacingBetweenElements;
}
currentBarSize += spacingBetweenElements;
}
// Layout the final bar
if (!layoutInput) {
if (startAxis == Axis.Horizontal) {
float newOffset = CalculateRowVerticalOffset (groupHeight, offset, currentBarSpace);
if (!layoutInput)
{
if (StartAxis == Axis.Horizontal)
{
float newOffset = CalculateRowVerticalOffset(groupHeight, offset, currentBarSpace);
currentBarSize -= spacingBetweenElements;
LayoutRow (_itemList, currentBarSize, currentBarSpace, workingSize, padding.left, newOffset, axis);
}else if (startAxis == Axis.Vertical) {
LayoutRow(_itemList, currentBarSize, currentBarSpace, workingSize, padding.left, newOffset, axis);
}
else if (StartAxis == Axis.Vertical)
{
float newOffset = CalculateColHorizontalOffset(groupWidth, offset, currentBarSpace);
currentBarSize -= spacingBetweenElements;
LayoutCol(_itemList, currentBarSpace, currentBarSize, workingSize, newOffset, padding.top, axis);
@ -239,7 +247,8 @@ namespace UnityEngine.UI.Extensions
offset += currentBarSpace;
offset += counterOffset;
if (layoutInput) {
if (layoutInput)
{
SetLayoutInputForAxis(offset, offset, -1, axis);
}
return offset;
@ -247,87 +256,109 @@ namespace UnityEngine.UI.Extensions
private float CalculateRowVerticalOffset(float groupHeight, float yOffset, float currentRowHeight)
{
if (IsLowerAlign) {
if (IsLowerAlign)
{
return groupHeight - yOffset - currentRowHeight;
} else if (IsMiddleAlign) {
return groupHeight * 0.5f - _layoutHeight * 0.5f + yOffset;
} else {
return yOffset;
}
else if (IsMiddleAlign)
{
return groupHeight * 0.5f - _layoutHeight * 0.5f + yOffset;
}
return yOffset;
}
private float CalculateColHorizontalOffset(float groupWidth, float xOffset, float currentColWidth)
{
if (IsRightAlign) {
if (IsRightAlign)
{
return groupWidth - xOffset - currentColWidth;
} else if (IsCenterAlign) {
return groupWidth * 0.5f - _layoutWidth * 0.5f + xOffset;
} else {
return xOffset;
}
else if (IsCenterAlign)
{
return groupWidth * 0.5f - _layoutWidth * 0.5f + xOffset;
}
return xOffset;
}
protected void LayoutRow(IList<RectTransform> contents, float rowWidth, float rowHeight, float maxWidth, float xOffset, float yOffset, int axis)
{
var xPos = xOffset;
if (!ChildForceExpandWidth && IsCenterAlign) {
if (!ChildForceExpandWidth && IsCenterAlign)
{
xPos += (maxWidth - rowWidth) * 0.5f;
} else if (!ChildForceExpandWidth && IsRightAlign) {
}
else if (!ChildForceExpandWidth && IsRightAlign)
{
xPos += (maxWidth - rowWidth);
}
var extraWidth = 0f;
var extraSpacing = 0f;
if (ChildForceExpandWidth) {
extraWidth = (maxWidth - rowWidth)/_itemList.Count;
if (ChildForceExpandWidth)
{
extraWidth = (maxWidth - rowWidth) / contents.Count;
}
else if (ExpandHorizontalSpacing) {
extraSpacing = (maxWidth - rowWidth)/(_itemList.Count - 1);
if (_itemList.Count > 1) {
if (IsCenterAlign) {
xPos -= extraSpacing * 0.5f * (_itemList.Count - 1);
} else if (IsRightAlign) {
xPos -= extraSpacing * (_itemList.Count - 1);
else if (ExpandHorizontalSpacing)
{
extraSpacing = (maxWidth - rowWidth) / (contents.Count - 1);
if (contents.Count > 1)
{
if (IsCenterAlign)
{
xPos -= extraSpacing * 0.5f * (contents.Count - 1);
}
else if (IsRightAlign)
{
xPos -= extraSpacing * (contents.Count - 1);
}
}
}
for (var j = 0; j < _itemList.Count; j++) {
for (var j = 0; j < contents.Count; j++)
{
var index = IsLowerAlign ? contents.Count - 1 - j : j;
var index = IsLowerAlign ? _itemList.Count - 1 - j : j;
var rowChild = _itemList[index];
var rowChild = contents[index];
var rowChildWidth = LayoutUtility.GetPreferredSize(rowChild, 0) + extraWidth;
var rowChildHeight = LayoutUtility.GetPreferredSize(rowChild, 1);
if (ChildForceExpandHeight)
{
rowChildHeight = rowHeight;
}
rowChildWidth = Mathf.Min(rowChildWidth, maxWidth);
var yPos = yOffset;
if (IsMiddleAlign) {
if (IsMiddleAlign)
{
yPos += (rowHeight - rowChildHeight) * 0.5f;
} else if (IsLowerAlign) {
}
else if (IsLowerAlign)
{
yPos += (rowHeight - rowChildHeight);
}
if (ExpandHorizontalSpacing && j > 0) {
if (ExpandHorizontalSpacing && j > 0)
{
xPos += extraSpacing;
}
if (axis == 0) {
SetChildAlongAxis (rowChild, 0, xPos, rowChildWidth);
} else {
SetChildAlongAxis (rowChild, 1, yPos, rowChildHeight);
if (axis == 0)
{
SetChildAlongAxis(rowChild, 0, xPos, rowChildWidth);
}
else
{
SetChildAlongAxis(rowChild, 1, yPos, rowChildHeight);
}
// Don't do horizontal spacing for the last one
if (j < _itemList.Count - 1) {
if (j < contents.Count - 1)
{
xPos += rowChildWidth + SpacingX;
}
}
@ -337,39 +368,49 @@ namespace UnityEngine.UI.Extensions
{
var yPos = yOffset;
if (!ChildForceExpandHeight && IsMiddleAlign) {
if (!ChildForceExpandHeight && IsMiddleAlign)
{
yPos += (maxHeight - colHeight) * 0.5f;
} else if (!ChildForceExpandHeight && IsLowerAlign) {
}
else if (!ChildForceExpandHeight && IsLowerAlign)
{
yPos += (maxHeight - colHeight);
}
var extraHeight = 0f;
var extraSpacing = 0f;
if (ChildForceExpandHeight) {
extraHeight = (maxHeight - colHeight)/_itemList.Count;
if (ChildForceExpandHeight)
{
extraHeight = (maxHeight - colHeight) / contents.Count;
}
else if (ExpandHorizontalSpacing) {
extraSpacing = (maxHeight - colHeight)/(_itemList.Count - 1);
if (_itemList.Count > 1) {
if (IsMiddleAlign) {
yPos -= extraSpacing * 0.5f * (_itemList.Count - 1);
} else if (IsLowerAlign) {
yPos -= extraSpacing * (_itemList.Count - 1);
else if (ExpandHorizontalSpacing)
{
extraSpacing = (maxHeight - colHeight) / (contents.Count - 1);
if (contents.Count > 1)
{
if (IsMiddleAlign)
{
yPos -= extraSpacing * 0.5f * (contents.Count - 1);
}
else if (IsLowerAlign)
{
yPos -= extraSpacing * (contents.Count - 1);
}
}
}
for (var j = 0; j < _itemList.Count; j++) {
for (var j = 0; j < contents.Count; j++)
{
var index = IsRightAlign ? contents.Count - 1 - j : j;
var index = IsRightAlign ? _itemList.Count - 1 - j : j;
var rowChild = contents[index];
var rowChild = _itemList[index];
var rowChildWidth = LayoutUtility.GetPreferredSize(rowChild, 0) ;
var rowChildWidth = LayoutUtility.GetPreferredSize(rowChild, 0);
var rowChildHeight = LayoutUtility.GetPreferredSize(rowChild, 1) + extraHeight;
if (ChildForceExpandWidth) {
if (ChildForceExpandWidth)
{
rowChildWidth = colWidth;
}
@ -377,25 +418,32 @@ namespace UnityEngine.UI.Extensions
var xPos = xOffset;
if (IsCenterAlign) {
if (IsCenterAlign)
{
xPos += (colWidth - rowChildWidth) * 0.5f;
} else if (IsRightAlign) {
}
else if (IsRightAlign)
{
xPos += (colWidth - rowChildWidth);
}
//
if (ExpandHorizontalSpacing && j > 0) {
if (ExpandHorizontalSpacing && j > 0)
{
yPos += extraSpacing;
}
if (axis == 0) {
SetChildAlongAxis (rowChild, 0, xPos, rowChildWidth);
} else {
SetChildAlongAxis (rowChild, 1, yPos, rowChildHeight);
if (axis == 0)
{
SetChildAlongAxis(rowChild, 0, xPos, rowChildWidth);
}
else
{
SetChildAlongAxis(rowChild, 1, yPos, rowChildHeight);
}
// Don't do vertical spacing for the last one
if (j < _itemList.Count - 1) {
if (j < contents.Count - 1)
{
yPos += rowChildHeight + SpacingY;
}
}
@ -404,9 +452,9 @@ namespace UnityEngine.UI.Extensions
public float GetGreatestMinimumChildWidth()
{
var max = 0f;
for (var i = 0; i < rectChildren.Count; i++) {
for (var i = 0; i < rectChildren.Count; i++)
{
var w = LayoutUtility.GetMinWidth(rectChildren[i]);
max = Mathf.Max(w, max);
}
return max;
@ -415,20 +463,18 @@ namespace UnityEngine.UI.Extensions
public float GetGreatestMinimumChildHeigth()
{
var max = 0f;
for (var i = 0; i < rectChildren.Count; i++) {
for (var i = 0; i < rectChildren.Count; i++)
{
var w = LayoutUtility.GetMinHeight(rectChildren[i]);
max = Mathf.Max(w, max);
}
return max;
}
protected override void OnDisable()
{
m_Tracker.Clear();
LayoutRebuilder.MarkLayoutForRebuild(rectTransform);
}
}
protected override void OnDisable()
{
m_Tracker.Clear();
LayoutRebuilder.MarkLayoutForRebuild(rectTransform);
}
}
}

View File

@ -328,6 +328,10 @@ namespace UnityEngine.UI.Extensions
}
}
}
else if (distance == 0)
{
EndScreenChange();
}
}
}
}

View File

@ -321,6 +321,10 @@ namespace UnityEngine.UI.Extensions
}
}
}
else if (distance == 0)
{
EndScreenChange();
}
}
}
}

View File

@ -296,8 +296,6 @@ namespace UnityEngine.UI.Extensions
PopulateMesh (vh, pointsToDraw);
}
}
}
private UIVertex[] CreateLineCap(Vector2 start, Vector2 end, SegmentType type)
@ -419,7 +417,7 @@ namespace UnityEngine.UI.Extensions
{
return Segments[segmentIndex - 1][index - 1];
}
else if (Segments.Count > 0)
else if (Segments?.Count > 0)
{
var segmentIndexCount = 0;
var indexCount = index;
@ -443,6 +441,29 @@ namespace UnityEngine.UI.Extensions
}
}
/// <summary>
/// Calculates the position of a point on the curve, given t (0-1), start point, control points and end point.
/// </summary>
/// <param name="t">Required Percentage between start and end point, in the range 0 to 1</param>
/// <param name="p1">Required Starting point</param>
/// <param name="p1">Required Control point 1</param>
/// <param name="p1">Required Control point 2</param>
/// <param name="p1">Required End point</param>
/// <returns>Vector2 position of point on curve at t percentage between p1 and p4</returns>
public Vector2 CalculatePointOnCurve(float t, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4)
{
var t2 = t * t;
var t3 = t2 * t;
var x = p1.x + (-p1.x * 3 + t * (3 * p1.x - p1.x * t)) * t + (3 * p2.x + t * (-6 * p2.x + p2.x * 3 * t)) * t +
(p3.x * 3 - p3.x * 3 * t) * t2 + p4.x * t3;
var y = p1.y + (-p1.y * 3 + t * (3 * p1.y - p1.y * t)) * t + (3 * p2.y + t * (-6 * p2.y + p2.y * 3 * t)) * t +
(p3.y * 3 - p3.y * 3 * t) * t2 + p4.y * t3;
return new Vector2(x, y);
}
/// <summary>
/// Get the Vector2 position of a line within a specific segment
/// </summary>
@ -478,6 +499,10 @@ namespace UnityEngine.UI.Extensions
{
m_points = new Vector2[1];
}
if (transform.GetComponent<RectTransform>().position != Vector3.zero)
{
Debug.LogWarning("A Line Renderer component should be on a RectTransform positioned at (0,0,0), do not use in child Objects.\nFor best results, create separate RectTransforms as children of the canvas positioned at (0,0) for a UILineRenderer and do not move.");
}
}
}
}
}

View File

@ -1,29 +1,24 @@
/// Credit SimonDarksideJ
using UnityEngine.EventSystems;
namespace UnityEngine.UI.Extensions
{
/*
Handy Selectable script to un-highlight a selectable component in Unity (e.g. a Button) when the user moves away from it, EVEN IF the user has holding a button on it.
Resolves the situation where Unity UI Components remain in a highlighted state even after the pointer has moved away (e.g. user holding a button, mouse, pointer down).
Now whenever the cursor leaves the component, it will force the UI component to revert to un-highlighted.
*/
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/// <summary>
/// Handy Selectable script to un-highlight a selectable component in Unity (e.g. a Button) when the user moves away from it, EVEN IF the user has holding a button on it.
/// Resolves the situation where Unity UI Components remain in a highlighted state even after the pointer has moved away (e.g. user holding a button, mouse, pointer down).
/// Now whenever the cursor leaves the component, it will force the UI component to revert to un-highlighted.
/// </summary>
[AddComponentMenu("UI/Extensions/ResetSelectableHighlight", 31)]
[RequireComponent(typeof(Selectable))]
public class ResetSelectableHighlight : MonoBehaviour, IPointerExitHandler
{
[SerializeField]
private Selectable attachedSelectable;
private Selectable attachedSelectable = null;
// Start is called before the first frame update
void Awake()
private void Awake()
{
if (!attachedSelectable)
if (attachedSelectable == null || !attachedSelectable)
{
attachedSelectable = GetComponent<Selectable>();
}
@ -31,7 +26,12 @@ namespace UnityEngine.UI.Extensions
public void OnPointerExit(PointerEventData eventData)
{
if (!attachedSelectable.interactable)
{
return;
}
attachedSelectable.targetGraphic.CrossFadeColor(attachedSelectable.colors.normalColor, 0f, true, true);
}
}
}
}

View File

@ -40,6 +40,10 @@ namespace UnityEngine.UI.Extensions
bool updateLine = false;
for (int i = 0; i < transforms.Length; i++)
{
if (transforms[i] == null)
{
continue;
}
if (!updateLine && previousPositions[i] != transforms[i].position)
{
updateLine = true;
@ -60,6 +64,10 @@ namespace UnityEngine.UI.Extensions
// First, convert the pivot to worldspace
for (int i = 0; i < transforms.Length; i++)
{
if (transforms[i] == null)
{
continue;
}
worldSpaces[i] = transforms[i].TransformPoint(thisPivot);
}
@ -83,6 +91,10 @@ namespace UnityEngine.UI.Extensions
previousPositions = new Vector3[transforms.Length];
for (int i = 0; i < transforms.Length; i++)
{
if (transforms[i] == null)
{
continue;
}
previousPositions[i] = transforms[i].position;
}
}

View File

@ -1,35 +1,35 @@
{
"name": "com.unity.uiextensions",
"displayName": "Unity UI Extensions",
"version": "2.3.0",
"description": "An extension project for the Unity3D UI system, all crafted and contributed by the awesome Unity community",
"author": "Simon darkside Jackson <@SimonDarksideJ>",
"contributors": [
{
"name": "SimonDarksideJ",
"twitter": "@SimonDarksideJ"
}
],
"unity": "2020.3",
"repository": {
"type": "git",
"url": "git+https://github.com/Unity-UI-Extensions/com.unity.uiextensions.git"
},
"bugs": {
"url": "https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues"
},
"keywords": [
"Unity3D",
"Unity",
"Unity UI",
"UI Extensions"
],
"samples": [
{
"displayName": "UI Extensions Samples",
"description": "Examples and demonstrations of the Unity UI Extensions controls",
"path": "Examples~"
}
],
"license": "BSD3"
}
{
"name": "com.unity.uiextensions",
"displayName": "Unity UI Extensions",
"version": "2.3.2-pre.3",
"description": "An extension project for the Unity3D UI system, all crafted and contributed by the awesome Unity community",
"author": "Simon darkside Jackson <@SimonDarksideJ>",
"contributors": [
{
"name": "SimonDarksideJ",
"twitter": "@SimonDarksideJ"
}
],
"unity": "2020.3",
"repository": {
"type": "git",
"url": "git+https://github.com/Unity-UI-Extensions/com.unity.uiextensions.git"
},
"bugs": {
"url": "https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues"
},
"keywords": [
"Unity3D",
"Unity",
"Unity UI",
"UI Extensions"
],
"samples": [
{
"displayName": "UI Extensions Samples",
"description": "Examples and demonstrations of the Unity UI Extensions controls",
"path": "Examples~"
}
],
"license": "BSD3"
}