Compare commits
63 Commits
v2.3.2-pre
...
release
Author | SHA1 | Date |
---|---|---|
|
35b9985bf2 | |
|
05682c7dd9 | |
|
855607ab67 | |
|
17835a66e8 | |
|
6f09750bf0 | |
|
1ed83c429d | |
|
14279705a7 | |
|
8694f1a134 | |
|
98ab33952a | |
|
5ec4b0ba93 | |
|
d69ee0c2c9 | |
|
a11eff0f51 | |
|
e909d73a6a | |
|
2db16bbdb2 | |
|
bce6e8b815 | |
|
18a2269d63 | |
|
c2c098cad6 | |
|
b171b2c1c2 | |
|
a47d694796 | |
|
9c7a59c9f2 | |
|
b615c4b681 | |
|
5eaf48d256 | |
|
518bc09602 | |
|
ad4ec2d920 | |
|
aa4d41322e | |
|
0b8f1a0555 | |
|
162e4d3ed9 | |
|
54d951350a | |
|
1464ae97bd | |
|
250befb08c | |
|
3000e3b40b | |
|
9a823060a7 | |
|
15cb41b838 | |
|
322e804f25 | |
|
289a50d796 | |
|
95f1956f48 | |
|
2a59f37653 | |
|
c06cd38081 | |
|
69c96ab471 | |
|
884a8d63f1 | |
|
5f535e0431 | |
|
17b69878de | |
|
70f98806e9 | |
|
90fd22498f | |
|
0dd1e6d7bb | |
|
0a424334e9 | |
|
5ef4736e68 | |
|
9fbcd39b88 | |
|
6a68933e48 | |
|
11de683781 | |
|
2a925fcf65 | |
|
34e3f82395 | |
|
4857492384 | |
|
796f66c310 | |
|
e7babe0dd6 | |
|
ab34212ade | |
|
531059bf0e | |
|
a4fb11f0b4 | |
|
09b17fae52 | |
|
7becb9cae4 | |
|
7127f8bca7 | |
|
ba7b21fdae | |
|
5e7282c27d |
|
@ -0,0 +1,70 @@
|
||||||
|
name: Get the Package version from a UPM Package.json file
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
build-host:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
version-file-path:
|
||||||
|
description: 'Optional, specify a path to search for the upm package.json file. Use this if validation fails to find a valid package.json file.\n **Note, Version file MUST contain the attribute "Unity" with the full Unity version expected, e.g. "2020.2.3f1"'
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
outputs:
|
||||||
|
packageversion:
|
||||||
|
description: "Returns the version of the UPM package"
|
||||||
|
value: ${{ jobs.get_package_version.outputs.upmpackageversion }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
get_package_version:
|
||||||
|
name: Get required Package version from UPM Package
|
||||||
|
runs-on: ${{ inputs.build-host }}
|
||||||
|
outputs:
|
||||||
|
upmpackageversion: ${{ steps.getVersion.outputs.packageversion }}
|
||||||
|
steps:
|
||||||
|
- name: Script Version
|
||||||
|
run: |
|
||||||
|
echo "::group::Script Versioning"
|
||||||
|
$scriptVersion = "1.0.0"
|
||||||
|
echo "Build Script Version: $scriptVersion"
|
||||||
|
echo "::endgroup::"
|
||||||
|
shell: pwsh
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
clean: true
|
||||||
|
- id: getVersion
|
||||||
|
name: 'Get Package Version Number'
|
||||||
|
run: |
|
||||||
|
echo "::group::Validating input"
|
||||||
|
|
||||||
|
$versionFile = "${{ inputs.version-file-path }}"
|
||||||
|
if([string]::IsNullOrEmpty($versionFile))
|
||||||
|
{
|
||||||
|
echo 'version input was empty, using default'
|
||||||
|
$versionFile = 'package.json'
|
||||||
|
}
|
||||||
|
echo 'Checking for project json at $versionFile'
|
||||||
|
|
||||||
|
if ( -not (Test-Path -Path $versionFile) ) {
|
||||||
|
Write-Error "Failed to find a valid package.json file"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::Package Version UPM check"
|
||||||
|
|
||||||
|
$package_json = Get-Content -Path $versionFile | ConvertFrom-Json
|
||||||
|
$packageVersion = $package_json.version
|
||||||
|
|
||||||
|
if([string]::IsNullOrEmpty($packageVersion)) {
|
||||||
|
Write-Error "Project.json version number does not exist or is empty"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "packageversion=$packageVersion" >> $env:GITHUB_OUTPUT
|
||||||
|
|
||||||
|
echo "Detected version is $packageVersion"
|
||||||
|
echo "::endgroup::"
|
||||||
|
shell: pwsh
|
|
@ -5,7 +5,7 @@ on:
|
||||||
types:
|
types:
|
||||||
- closed
|
- closed
|
||||||
branches:
|
branches:
|
||||||
- main
|
- release
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# Get Version to tag and release the branch, no up-version - [no-ver] included in PR title
|
# Get Version to tag and release the branch, no up-version - [no-ver] included in PR title
|
||||||
|
|
|
@ -18,7 +18,7 @@ jobs:
|
||||||
- os: windows
|
- os: windows
|
||||||
unityVersion: 2019.4
|
unityVersion: 2019.4
|
||||||
build-target: Android
|
build-target: Android
|
||||||
- os: macos
|
- os: macOS
|
||||||
unityVersion: 2019.4
|
unityVersion: 2019.4
|
||||||
build-target: iOS
|
build-target: iOS
|
||||||
- os: windows
|
- os: windows
|
||||||
|
@ -30,7 +30,7 @@ jobs:
|
||||||
- os: windows
|
- os: windows
|
||||||
unityVersion: 2020.3
|
unityVersion: 2020.3
|
||||||
build-target: Android
|
build-target: Android
|
||||||
- os: macos
|
- os: macOS
|
||||||
unityVersion: 2020.3
|
unityVersion: 2020.3
|
||||||
build-target: iOS
|
build-target: iOS
|
||||||
- os: windows
|
- os: windows
|
||||||
|
@ -42,7 +42,7 @@ jobs:
|
||||||
- os: windows
|
- os: windows
|
||||||
unityVersion: 2021.3
|
unityVersion: 2021.3
|
||||||
build-target: Android
|
build-target: Android
|
||||||
- os: macos
|
- os: macOS
|
||||||
unityVersion: 2021.3
|
unityVersion: 2021.3
|
||||||
build-target: iOS
|
build-target: iOS
|
||||||
- os: windows
|
- os: windows
|
||||||
|
@ -52,17 +52,29 @@ jobs:
|
||||||
unityVersion: 2021.3
|
unityVersion: 2021.3
|
||||||
build-target: WSAPlayer
|
build-target: WSAPlayer
|
||||||
- os: windows
|
- os: windows
|
||||||
unityVersion: 2022.2
|
unityVersion: 2022.3
|
||||||
build-target: Android
|
build-target: Android
|
||||||
- os: macos
|
- os: macOS
|
||||||
unityVersion: 2022.2
|
unityVersion: 2022.3
|
||||||
build-target: iOS
|
build-target: iOS
|
||||||
- os: windows
|
- os: windows
|
||||||
unityVersion: 2022.2
|
unityVersion: 2022.3
|
||||||
build-target: StandaloneWindows64
|
build-target: StandaloneWindows64
|
||||||
- os: windows
|
- os: windows
|
||||||
unityVersion: 2022.2
|
unityVersion: 2022.3
|
||||||
build-target: WSAPlayer
|
build-target: WSAPlayer
|
||||||
|
- os: windows
|
||||||
|
unityVersion: 2023.1
|
||||||
|
build-target: Android
|
||||||
|
- os: macOS
|
||||||
|
unityVersion: 2023.1
|
||||||
|
build-target: iOS
|
||||||
|
- os: windows
|
||||||
|
unityVersion: 2023.1
|
||||||
|
build-target: StandaloneWindows64
|
||||||
|
- os: windows
|
||||||
|
unityVersion: 2023.1
|
||||||
|
build-target: WSAPlayer
|
||||||
steps:
|
steps:
|
||||||
- name: Script Version
|
- name: Script Version
|
||||||
run: |
|
run: |
|
||||||
|
@ -101,12 +113,12 @@ jobs:
|
||||||
}
|
}
|
||||||
elseif ( $global:PSVersionTable.OS.Contains("Darwin") )
|
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/"
|
$editorRootPath = "/Applications/Unity/Hub/Editor/"
|
||||||
$editorFileEx = "/Unity.app/Contents/MacOS/Unity"
|
$editorFileEx = "/Unity.app/Contents/macOS/Unity"
|
||||||
$directorySeparatorChar = "/"
|
$directorySeparatorChar = "/"
|
||||||
|
|
||||||
# /Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless help
|
# /Applications/Unity\ Hub.app/Contents/macOS/Unity\ Hub -- --headless help
|
||||||
function unity-hub
|
function unity-hub
|
||||||
{
|
{
|
||||||
& $hubPath -- --headless $args.Split(" ") | Out-String -NoNewline
|
& $hubPath -- --headless $args.Split(" ") | Out-String -NoNewline
|
||||||
|
@ -218,7 +230,7 @@ jobs:
|
||||||
}
|
}
|
||||||
elseif ( $global:PSVersionTable.OS.Contains("Darwin") ) {
|
elseif ( $global:PSVersionTable.OS.Contains("Darwin") ) {
|
||||||
echo 'Building using Mac'
|
echo 'Building using Mac'
|
||||||
$editorFileEx = "/Unity.app/Contents/MacOS/Unity"
|
$editorFileEx = "/Unity.app/Contents/macOS/Unity"
|
||||||
$editorrunpath = Join-Path $editorRootPath $unityVersion $editorFileEx
|
$editorrunpath = Join-Path $editorRootPath $unityVersion $editorFileEx
|
||||||
|
|
||||||
function unity-editor {
|
function unity-editor {
|
||||||
|
|
|
@ -19,7 +19,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: macos
|
- os: macOS
|
||||||
build-target: iOS
|
build-target: iOS
|
||||||
- os: windows
|
- os: windows
|
||||||
build-target: Android
|
build-target: Android
|
||||||
|
|
|
@ -31,8 +31,8 @@ on:
|
||||||
description: "Returns the version of Unity the UPM package requires"
|
description: "Returns the version of Unity the UPM package requires"
|
||||||
value: ${{ jobs.packageRelease.outputs.packageversion }}
|
value: ${{ jobs.packageRelease.outputs.packageversion }}
|
||||||
secrets:
|
secrets:
|
||||||
GIT_USER_NAME:
|
GIT_PAT:
|
||||||
required: false
|
required: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
packageRelease:
|
packageRelease:
|
||||||
|
|
73
CHANGELOG.md
73
CHANGELOG.md
|
@ -4,17 +4,18 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](http://keepachangelog.com/).
|
The format is based on [Keep a Changelog](http://keepachangelog.com/).
|
||||||
|
|
||||||
## Release 2.3 - Reanimation - 2022/02/07
|
## Release 2.3.2 - Rejuvenation - 2023/11/26
|
||||||
|
|
||||||
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.
|
2023 is certainly an interesting year to keep you on your toes, and finding time to keep managing all the requests and updates that come in are taking their toll, especially for a FREE project, but nonetheless, I still do it.
|
||||||
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.
|
|
||||||
|
Mainly bugfixes for the end of year update, promoting some resolutions that have been verified and tested since the last release.
|
||||||
|
|
||||||
To get up to speed with the Unity UI Extensions, check out the [Getting Started](https://unity-ui-extensions.github.io/GettingStarted.html) Page.
|
To get up to speed with the Unity UI Extensions, check out the [Getting Started](https://unity-ui-extensions.github.io/GettingStarted.html) Page.
|
||||||
|
|
||||||
> Ways to get in touch:
|
> Ways to get in touch:
|
||||||
>
|
>
|
||||||
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
|
||||||
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
||||||
|
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
||||||
>
|
>
|
||||||
> Much easier that posting a question / issue on YouTube, Twitter or Facebook :D
|
> Much easier that posting a question / issue on YouTube, Twitter or Facebook :D
|
||||||
|
|
||||||
|
@ -28,64 +29,23 @@ For more details, see the [deprecation notice](https://github.com/Unity-UI-Exten
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
- Added new FIFO based UI Line Render when dynamic line rendering is needed.
|
- Add CalculatePointOnCurve for uilinerenderer (@victornor)
|
||||||
- Added ResetSelectableHighlight component.
|
|
||||||
- Added SetArc method to UICircle as requested.
|
|
||||||
- Added new UIHorizontalScroller based on UIVerticalScroller.
|
|
||||||
- Added OnHighlightChanged and OnPressChanged events for UI Button.
|
|
||||||
- Added error handling around setting Unity UI Components for Vertical/Horizontal ScrollSnaps.
|
|
||||||
- Added Editor Menu Option to create a Min/Max slider.
|
|
||||||
- Added the ability to set a specific item for combobox controls on start and not just the first.
|
|
||||||
- Added the ability to disable the combo boxes and make them read-only.
|
|
||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
- Refresh FancyScrollView with the latest fixes
|
- fix: Fixed an null reference exception with the ResetSelectableHighlight (@FejZa)
|
||||||
- All Text based components updated to use TextMeshPro from Unity 2022 **Breaking Change**
|
- fix: Resolved an issue where the last line in a flow layout group would overflow the rect bounds.
|
||||||
|
- fix: GetPosition when Segments is null (@victornor)
|
||||||
- Clean-up and reset pivots on scene start.
|
- fix: Fix Bug! NicerOutline color.a Loss when m_UseGraphicAlpha is true (wanliyun)
|
||||||
- Merged in feature/improved-ui-highlightable (pull request UILineRenderer - issues with specifying point locations at runtime #123).
|
- fix: Update to force Enumerated start for Accordion elements, Resolves: #455
|
||||||
- Merged in fix/rangesliderfix (pull request HorizontalScrollSnap Mask Area doesn't work when content created dynamically #125).
|
- Added argument to the UpdateLayout method for the HSS/VSS to move to a new starting page.
|
||||||
- Merged in fix/infinitescrollcontentsize (pull request Gradient initialization should be in Awake() #126).
|
- Updated implementations to handle 2023 support, with 2023 moving in to public release.
|
||||||
- Merged in feature/controlTouchUp (pull request UILineRenderer mesh not updating in Editor scene view #127).
|
- Added extra event on the AutoCompleteComboBox, to fire when an item in the list is selected, with its display name.
|
||||||
- Upgraded RangeSlider to work in both Horizontal and Vertical setups.
|
- FlowLayoutGroup components updated to latest (likely the last as the author has stopped development)
|
||||||
- Merged in RangeSlider-upgrade. (pull request Newtonsoft.Json.dll conflict #131)
|
|
||||||
- Updated UIVertical scroller to be 2022 compliant.
|
|
||||||
- Updated Curly UI to wait until end of the frame to recalculate positions.
|
|
||||||
- Updated Depth Texture sampler in UI Particles Shaders.
|
|
||||||
- Updated Points to always be an array of 1 when set to nothing for the Line Renderer.
|
|
||||||
- Updated Cooldown button to work with Keyboard input.
|
|
||||||
- Removed unneeded size calculation which caused some issues with mixed content.
|
|
||||||
- Resolved an issue whereby the last row in a flow layout group would not size correctly.
|
|
||||||
- Updated all components using "LayoutGroup" to override their OnDisable.
|
|
||||||
- Updated validation in the new MinMaxSlider.
|
|
||||||
- Updated Editor create options to add the correct Event System Input manager.
|
|
||||||
- Updated initialisation logic to not cause an endless loop in the TabNavigationHelper.
|
|
||||||
- Updated "Action" use to "UnityAction" to avoid Unity issues for DropDowns.
|
|
||||||
- Updated UIVerticalScroller for standards.
|
|
||||||
- Updated ReorderableList/ReorderableListElement to prevent creating a fake object for non-transferable items.
|
|
||||||
- Updated panel drawing for ComboBox controls and added DropdownOffset.
|
|
||||||
- Updated build issue with ReorderableListElement.
|
|
||||||
- Updated NonDrawingGraphic to require a CanvasRender, else it causes an error on run.
|
|
||||||
|
|
||||||
## Deprecated
|
## Deprecated
|
||||||
|
|
||||||
- Marked ScrollPositionController as Obsolete, users should use the new Scoller.
|
- All deprecated Text based components now have "obsolete" tags, to avoid breaking code. Note, these do not function in 2022 and above, as Unity have "changed" things. For any affected component, I recommend updating to use TextMeshPro native features.
|
||||||
- BestFitOutline - Deprecated in Unity 2020 onwards. (still available for earlier versions)
|
|
||||||
- NicerOutline - Deprecated in Unity 2020 onwards. (still available for earlier versions)
|
|
||||||
- Marked TileSizeFitter as obsolete as Unity has made this unworkable.
|
|
||||||
|
|
||||||
## Fixed
|
|
||||||
|
|
||||||
- Resolved issues with DisplayAbove and using a 0 ItemsToDisplay for ComboBox controls.
|
|
||||||
- Resolved startup issue that prevented the control from being used (Unity changed the start order in some instances), this was causing null reference issues with comboboxes.
|
|
||||||
- Patch fix for UILineRenderer.
|
|
||||||
- Resolves issue where the lower range value would become stuck when moving.
|
|
||||||
- Updated Infinite scroll to work with content of different sizes.
|
|
||||||
- Updated Dropdown list to NOT resize text Rect on draw.
|
|
||||||
- Revised the Curly UI fix as it was preventing the graphic from being updated in the scene view.
|
|
||||||
- Cleanup and ensuring the UIParticleSystem is disposed in onDestroy correctly.
|
|
||||||
- Clean up range slider unused variables.
|
|
||||||
|
|
||||||
## Additional Notes
|
## Additional Notes
|
||||||
|
|
||||||
|
@ -98,6 +58,7 @@ New for 2020, we have added OpenUPM support and the package can be installed usi
|
||||||
```cli
|
```cli
|
||||||
`openupm add com.unity.uiextensions`
|
`openupm add com.unity.uiextensions`
|
||||||
```
|
```
|
||||||
|
|
||||||
> For more details on using [OpenUPM CLI, check the docs here](https://github.com/openupm/openupm-cli#installation).
|
> For more details on using [OpenUPM CLI, check the docs here](https://github.com/openupm/openupm-cli#installation).
|
||||||
|
|
||||||
- Unity Package Manager - manual
|
- Unity Package Manager - manual
|
||||||
|
|
|
@ -42,17 +42,18 @@ This version of the Unity UI Extensions is compatible with the following version
|
||||||
|
|
||||||
## [Release Notes](https://unity-ui-extensions.github.io/ReleaseNotes/RELEASENOTES)
|
## [Release Notes](https://unity-ui-extensions.github.io/ReleaseNotes/RELEASENOTES)
|
||||||
|
|
||||||
## Release 2.3 - Reanimation - 2022/02/07
|
## Release 2.3.2 - Rejuvenation - 2023/11/26
|
||||||
|
|
||||||
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.
|
2023 is certainly an interesting year to keep you on your toes, and finding time to keep managing all the requests and updates that come in are taking their toll, especially for a FREE project, but nonetheless, I still do it.
|
||||||
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.
|
|
||||||
|
Mainly bugfixes for the end of year update, promoting some resolutions that have been verified and tested since the last release.
|
||||||
|
|
||||||
To get up to speed with the Unity UI Extensions, check out the [Getting Started](https://unity-ui-extensions.github.io/GettingStarted.html) Page.
|
To get up to speed with the Unity UI Extensions, check out the [Getting Started](https://unity-ui-extensions.github.io/GettingStarted.html) Page.
|
||||||
|
|
||||||
> Ways to get in touch:
|
> Ways to get in touch:
|
||||||
>
|
>
|
||||||
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
|
||||||
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
||||||
|
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
||||||
>
|
>
|
||||||
> Much easier that posting a question / issue on YouTube, Twitter or Facebook :D
|
> Much easier that posting a question / issue on YouTube, Twitter or Facebook :D
|
||||||
|
|
||||||
|
@ -66,64 +67,23 @@ For more details, see the [deprecation notice](https://github.com/Unity-UI-Exten
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
- Added new FIFO based UI Line Render when dynamic line rendering is needed.
|
- Add CalculatePointOnCurve for uilinerenderer (@victornor)
|
||||||
- Added ResetSelectableHighlight component.
|
|
||||||
- Added SetArc method to UICircle as requested.
|
|
||||||
- Added new UIHorizontalScroller based on UIVerticalScroller.
|
|
||||||
- Added OnHighlightChanged and OnPressChanged events for UI Button.
|
|
||||||
- Added error handling around setting Unity UI Components for Vertical/Horizontal ScrollSnaps.
|
|
||||||
- Added Editor Menu Option to create a Min/Max slider.
|
|
||||||
- Added the ability to set a specific item for combobox controls on start and not just the first.
|
|
||||||
- Added the ability to disable the combo boxes and make them read-only.
|
|
||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
- Refresh FancyScrollView with the latest fixes
|
- fix: Fixed an null reference exception with the ResetSelectableHighlight (@FejZa)
|
||||||
- All Text based components updated to use TextMeshPro from Unity 2022 **Breaking Change**
|
- fix: Resolved an issue where the last line in a flow layout group would overflow the rect bounds.
|
||||||
|
- fix: GetPosition when Segments is null (@victornor)
|
||||||
- Clean-up and reset pivots on scene start.
|
- fix: Fix Bug! NicerOutline color.a Loss when m_UseGraphicAlpha is true (wanliyun)
|
||||||
- Merged in feature/improved-ui-highlightable (pull request UILineRenderer - issues with specifying point locations at runtime #123).
|
- fix: Update to force Enumerated start for Accordion elements, Resolves: #455
|
||||||
- Merged in fix/ragesliderfix (pull request HorizontalScrollSnap Mask Area doesn't work when content created dynamically #125).
|
- Added argument to the UpdateLayout method for the HSS/VSS to move to a new starting page.
|
||||||
- Merged in fix/infinitescrollcontentsize (pull request Gradient initialization should be in Awake() #126).
|
- Updated implementations to handle 2023 support, with 2023 moving in to public release.
|
||||||
- Merged in feature/controlTouchUp (pull request UILineRenderer mesh not updating in Editor scene view #127).
|
- Added extra event on the AutoCompleteComboBox, to fire when an item in the list is selected, with its display name.
|
||||||
- Upgraded RangeSlider to work in both Horizontal and Vertical setups.
|
- FlowLayoutGroup components updated to latest (likely the last as the author has stopped development)
|
||||||
- Merged in RangeSlider-upgrade. (pull request Newtonsoft.Json.dll conflict #131)
|
|
||||||
- Updated UIVertical scroller to be 2022 compliant.
|
|
||||||
- Updated Curly UI to wait until end of the frame to recalculate positions.
|
|
||||||
- Updated Depth Texture sampler in UI Particles Shaders.
|
|
||||||
- Updated Points to always be an array of 1 when set to nothing for the Line Renderer.
|
|
||||||
- Updated Cooldown button to work with Keyboard input.
|
|
||||||
- Removed unneeded size calculation which caused some issues with mixed content.
|
|
||||||
- Resolved an issue whereby the last row in a flow layout group would not size correctly.
|
|
||||||
- Updated all components using "LayoutGroup" to override their OnDisable.
|
|
||||||
- Updated validation in the new MinMaxSlider.
|
|
||||||
- Updated Editor create options to add the correct Event System Input manager.
|
|
||||||
- Updated initialisation logic to not cause an endless loop in the TabNavigationHelper.
|
|
||||||
- Updated "Action" use to "UnityAction" to avoid Unity issues for DropDowns.
|
|
||||||
- Updated UIVerticalScroller for standards.
|
|
||||||
- Updated ReorderableList/ReorderableListElement to prevent creating a fake object for non-transferable items.
|
|
||||||
- Updated panel drawing for ComboBox controls and added DropdownOffset.
|
|
||||||
- Updated build issue with ReorderableListElement.
|
|
||||||
- Updated NonDrawingGraphic to require a CanvasRender, else it causes an error on run.
|
|
||||||
|
|
||||||
## Deprecated
|
## Deprecated
|
||||||
|
|
||||||
- Marked ScrollPositionController as Obsolete, users should use the new Scoller.
|
- All deprecated Text based components now have "obsolete" tags, to avoid breaking code. Note, these do not function in 2022 and above, as Unity have "changed" things. For any affected component, I recommend updating to use TextMeshPro native features.
|
||||||
- BestFitOutline - Deprecated in Unity 2020 onwards. (still available for earlier versions)
|
|
||||||
- NicerOutline - Deprecated in Unity 2020 onwards. (still available for earlier versions)
|
|
||||||
- Marked TileSizeFitter as obsolete as Unity has made this unworkable.
|
|
||||||
|
|
||||||
## Fixed
|
|
||||||
|
|
||||||
- Resolved issues with DisplayAbove and using a 0 ItemsToDisplay for ComboBox controls.
|
|
||||||
- Resolved startup issue that prevented the control from being used (Unity changed the start order in some instances), this was causing null reference issues with comboboxes.
|
|
||||||
- Patch fix for UILineRenderer.
|
|
||||||
- Resolves issue where the lower range value would become stuck when moving.
|
|
||||||
- Updated Infinite scroll to work with content of different sizes.
|
|
||||||
- Updated Dropdown list to NOT resize text Rect on draw.
|
|
||||||
- Revised the Curly UI fix as it was preventing the graphic from being updated in the scene view.
|
|
||||||
- Cleanup and ensuring the UIParticleSystem is disposed in onDestroy correctly.
|
|
||||||
- Clean up range slider unused variables.
|
|
||||||
|
|
||||||
- [UI Extensions Issue log](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues)
|
- [UI Extensions Issue log](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues)
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,11 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
void ObtainCanvasGroups()
|
void ObtainCanvasGroups()
|
||||||
{
|
{
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
canvasGroups = GameObject.FindObjectsByType<CanvasGroup>(FindObjectsSortMode.None);
|
||||||
|
#else
|
||||||
canvasGroups = GameObject.FindObjectsOfType<CanvasGroup>();
|
canvasGroups = GameObject.FindObjectsOfType<CanvasGroup>();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnGUI()
|
void OnGUI()
|
||||||
|
|
|
@ -159,7 +159,11 @@ namespace UnityEditor.UI
|
||||||
|
|
||||||
private static void CreateEventSystem(bool select, GameObject parent)
|
private static void CreateEventSystem(bool select, GameObject parent)
|
||||||
{
|
{
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
var esys = Object.FindFirstObjectByType<EventSystem>();
|
||||||
|
#else
|
||||||
var esys = Object.FindObjectOfType<EventSystem>();
|
var esys = Object.FindObjectOfType<EventSystem>();
|
||||||
|
#endif
|
||||||
if (esys == null)
|
if (esys == null)
|
||||||
{
|
{
|
||||||
var eventSystem = new GameObject("EventSystem");
|
var eventSystem = new GameObject("EventSystem");
|
||||||
|
@ -191,7 +195,11 @@ namespace UnityEditor.UI
|
||||||
return canvas.gameObject;
|
return canvas.gameObject;
|
||||||
|
|
||||||
// No canvas in selection or its parents? Then use just any canvas..
|
// No canvas in selection or its parents? Then use just any canvas..
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
canvas = Object.FindFirstObjectByType<Canvas>();
|
||||||
|
#else
|
||||||
canvas = Object.FindObjectOfType(typeof(Canvas)) as Canvas;
|
canvas = Object.FindObjectOfType(typeof(Canvas)) as Canvas;
|
||||||
|
#endif
|
||||||
if (canvas != null && canvas.gameObject.activeInHierarchy)
|
if (canvas != null && canvas.gameObject.activeInHierarchy)
|
||||||
return canvas.gameObject;
|
return canvas.gameObject;
|
||||||
|
|
||||||
|
@ -1121,7 +1129,7 @@ namespace UnityEditor.UI
|
||||||
mainButtonRT.anchorMin = Vector2.zero;
|
mainButtonRT.anchorMin = Vector2.zero;
|
||||||
mainButtonRT.anchorMax = Vector2.one;
|
mainButtonRT.anchorMax = Vector2.one;
|
||||||
mainButtonRT.sizeDelta = Vector2.zero;
|
mainButtonRT.sizeDelta = Vector2.zero;
|
||||||
Events.UnityEventTools.AddBoolPersistentListener(mainButton.GetComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(dropDownList.ToggleDropdownPanel), true);
|
Events.UnityEventTools.AddPersistentListener(mainButton.GetComponent<Button>().onClick, dropDownList.ToggleDropdownPanel);
|
||||||
var mainButtonText = mainButton.GetComponentInChildren<Text>();
|
var mainButtonText = mainButton.GetComponentInChildren<Text>();
|
||||||
mainButtonText.alignment = TextAnchor.MiddleLeft;
|
mainButtonText.alignment = TextAnchor.MiddleLeft;
|
||||||
mainButtonText.text = "Select Item...";
|
mainButtonText.text = "Select Item...";
|
||||||
|
@ -1149,7 +1157,7 @@ namespace UnityEditor.UI
|
||||||
overlayRT.sizeDelta = new Vector2(0f, 1f);
|
overlayRT.sizeDelta = new Vector2(0f, 1f);
|
||||||
overlayRT.pivot = new Vector2(0f, 1f);
|
overlayRT.pivot = new Vector2(0f, 1f);
|
||||||
overlay.AddComponent<Image>().color = new Color(0.243f, 0.871f, 0f, 0f);
|
overlay.AddComponent<Image>().color = new Color(0.243f, 0.871f, 0f, 0f);
|
||||||
Events.UnityEventTools.AddBoolPersistentListener(overlay.AddComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(dropDownList.ToggleDropdownPanel), true);
|
Events.UnityEventTools.AddPersistentListener(overlay.AddComponent<Button>().onClick, dropDownList.ToggleDropdownPanel);
|
||||||
//Overlay Scroll Panel
|
//Overlay Scroll Panel
|
||||||
var overlayScrollPanelRT = overlayScrollPanel.GetComponent<RectTransform>();
|
var overlayScrollPanelRT = overlayScrollPanel.GetComponent<RectTransform>();
|
||||||
overlayScrollPanelRT.position += new Vector3(0, -cbbRT.sizeDelta.y, 0);
|
overlayScrollPanelRT.position += new Vector3(0, -cbbRT.sizeDelta.y, 0);
|
||||||
|
@ -1257,7 +1265,11 @@ namespace UnityEditor.UI
|
||||||
|
|
||||||
private static void CreateToolTipItem(bool select, GameObject parent)
|
private static void CreateToolTipItem(bool select, GameObject parent)
|
||||||
{
|
{
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
var btti = Object.FindFirstObjectByType<BoundTooltipItem>();
|
||||||
|
#else
|
||||||
var btti = Object.FindObjectOfType<BoundTooltipItem>();
|
var btti = Object.FindObjectOfType<BoundTooltipItem>();
|
||||||
|
#endif
|
||||||
if (btti == null)
|
if (btti == null)
|
||||||
{
|
{
|
||||||
var boundTooltipItem = CreateUIObject("ToolTipItem", parent.GetComponentInParent<Canvas>().gameObject);
|
var boundTooltipItem = CreateUIObject("ToolTipItem", parent.GetComponentInParent<Canvas>().gameObject);
|
||||||
|
|
|
@ -6,7 +6,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
public static class uGUITools
|
public static class uGUITools
|
||||||
{
|
{
|
||||||
[MenuItem("uGUI/Anchors to Corners %[")]
|
[MenuItem("Tools/UnityUIExtensions/Anchors to Corners %[")]
|
||||||
static void AnchorsToCorners()
|
static void AnchorsToCorners()
|
||||||
{
|
{
|
||||||
if (Selection.transforms == null || Selection.transforms.Length == 0)
|
if (Selection.transforms == null || Selection.transforms.Length == 0)
|
||||||
|
@ -37,7 +37,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
Undo.CollapseUndoOperations(undoGroup);
|
Undo.CollapseUndoOperations(undoGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("uGUI/Corners to Anchors %]")]
|
[MenuItem("Tools/UnityUIExtensions/Corners to Anchors %]")]
|
||||||
static void CornersToAnchors()
|
static void CornersToAnchors()
|
||||||
{
|
{
|
||||||
if (Selection.transforms == null || Selection.transforms.Length == 0)
|
if (Selection.transforms == null || Selection.transforms.Length == 0)
|
||||||
|
@ -60,13 +60,13 @@ namespace UnityEngine.UI.Extensions
|
||||||
Undo.CollapseUndoOperations(undoGroup);
|
Undo.CollapseUndoOperations(undoGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("uGUI/Mirror Horizontally Around Anchors %;")]
|
[MenuItem("Tools/UnityUIExtensions/Mirror Horizontally Around Anchors %;")]
|
||||||
static void MirrorHorizontallyAnchors()
|
static void MirrorHorizontallyAnchors()
|
||||||
{
|
{
|
||||||
MirrorHorizontally(false);
|
MirrorHorizontally(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("uGUI/Mirror Horizontally Around Parent Center %:")]
|
[MenuItem("Tools/UnityUIExtensions/Mirror Horizontally Around Parent Center %:")]
|
||||||
static void MirrorHorizontallyParent()
|
static void MirrorHorizontallyParent()
|
||||||
{
|
{
|
||||||
MirrorHorizontally(true);
|
MirrorHorizontally(true);
|
||||||
|
@ -96,13 +96,13 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("uGUI/Mirror Vertically Around Anchors %'")]
|
[MenuItem("Tools/UnityUIExtensions/Mirror Vertically Around Anchors %'")]
|
||||||
static void MirrorVerticallyAnchors()
|
static void MirrorVerticallyAnchors()
|
||||||
{
|
{
|
||||||
MirrorVertically(false);
|
MirrorVertically(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("uGUI/Mirror Vertically Around Parent Center %\"")]
|
[MenuItem("Tools/UnityUIExtensions/Mirror Vertically Around Parent Center %\"")]
|
||||||
static void MirrorVerticallyParent()
|
static void MirrorVerticallyParent()
|
||||||
{
|
{
|
||||||
MirrorVertically(true);
|
MirrorVertically(true);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 2b2dba57650838e285c3336b4a26847931462570
|
Subproject commit 1cfaa42b3fcc454950009cc03a8280fd18e38197
|
89
README.md
89
README.md
|
@ -4,6 +4,11 @@ This is an extension project for the new Unity UI system which can be found at:
|
||||||
|
|
||||||
> [Check out the control demos on our Tumblr page](https://unityuiextensions.tumblr.com/)
|
> [Check out the control demos on our Tumblr page](https://unityuiextensions.tumblr.com/)
|
||||||
|
|
||||||
|
[](https://openupm.com/packages/com.unity.uiextensions/)
|
||||||
|
[](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/actions/workflows/main-publish.yml)
|
||||||
|
[](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/actions/workflows/development-publish.yml)
|
||||||
|
[](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/actions/workflows/development-buildandtestupmrelease.yml)
|
||||||
|
|
||||||
## [Intro](https://unity-ui-extensions.github.io/GettingStarted)
|
## [Intro](https://unity-ui-extensions.github.io/GettingStarted)
|
||||||
|
|
||||||
For more info, here's a little introduction video for the project:
|
For more info, here's a little introduction video for the project:
|
||||||
|
@ -69,17 +74,18 @@ To get started with the project, here's a little guide:
|
||||||
|
|
||||||
## [Updates:](https://unity-ui-extensions.github.io/ReleaseNotes/RELEASENOTES)
|
## [Updates:](https://unity-ui-extensions.github.io/ReleaseNotes/RELEASENOTES)
|
||||||
|
|
||||||
## Release 2.3 - Reanimation - 2022/02/07
|
## Release 2.3.2 - Rejuvenation - 2023/11/26
|
||||||
|
|
||||||
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.
|
2023 is certainly an interesting year to keep you on your toes, and finding time to keep managing all the requests and updates that come in are taking their toll, especially for a FREE project, but nonetheless, I still do it.
|
||||||
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.
|
|
||||||
|
Mainly bugfixes for the end of year update, promoting some resolutions that have been verified and tested since the last release.
|
||||||
|
|
||||||
To get up to speed with the Unity UI Extensions, check out the [Getting Started](https://unity-ui-extensions.github.io/GettingStarted.html) Page.
|
To get up to speed with the Unity UI Extensions, check out the [Getting Started](https://unity-ui-extensions.github.io/GettingStarted.html) Page.
|
||||||
|
|
||||||
> Ways to get in touch:
|
> Ways to get in touch:
|
||||||
>
|
>
|
||||||
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
|
||||||
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
||||||
|
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
||||||
>
|
>
|
||||||
> Much easier that posting a question / issue on YouTube, Twitter or Facebook :D
|
> Much easier that posting a question / issue on YouTube, Twitter or Facebook :D
|
||||||
|
|
||||||
|
@ -93,66 +99,25 @@ For more details, see the [deprecation notice](https://github.com/Unity-UI-Exten
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
- Added new FIFO based UI Line Render when dynamic line rendering is needed.
|
- Add CalculatePointOnCurve for uilinerenderer (@victornor)
|
||||||
- Added ResetSelectableHighlight component.
|
|
||||||
- Added SetArc method to UICircle as requested.
|
|
||||||
- Added new UIHorizontalScroller based on UIVerticalScroller.
|
|
||||||
- Added OnHighlightChanged and OnPressChanged events for UI Button.
|
|
||||||
- Added error handling around setting Unity UI Components for Vertical/Horizontal ScrollSnaps.
|
|
||||||
- Added Editor Menu Option to create a Min/Max slider.
|
|
||||||
- Added the ability to set a specific item for combobox controls on start and not just the first.
|
|
||||||
- Added the ability to disable the combo boxes and make them read-only.
|
|
||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
- Refresh FancyScrollView with the latest fixes
|
- fix: Fixed an null reference exception with the ResetSelectableHighlight (@FejZa)
|
||||||
- All Text based components updated to use TextMeshPro from Unity 2022 **Breaking Change**
|
- fix: Resolved an issue where the last line in a flow layout group would overflow the rect bounds.
|
||||||
|
- fix: GetPosition when Segments is null (@victornor)
|
||||||
- Clean-up and reset pivots on scene start.
|
- fix: Fix Bug! NicerOutline color.a Loss when m_UseGraphicAlpha is true (wanliyun)
|
||||||
- Merged in feature/improved-ui-highlightable (pull request UILineRenderer - issues with specifying point locations at runtime #123).
|
- fix: Update to force Enumerated start for Accordion elements, Resolves: #455
|
||||||
- Merged in fix/ragesliderfix (pull request HorizontalScrollSnap Mask Area doesn't work when content created dynamically #125).
|
- Added argument to the UpdateLayout method for the HSS/VSS to move to a new starting page.
|
||||||
- Merged in fix/infinitescrollcontentsize (pull request Gradient initialization should be in Awake() #126).
|
- Updated implementations to handle 2023 support, with 2023 moving in to public release.
|
||||||
- Merged in feature/controlTouchUp (pull request UILineRenderer mesh not updating in Editor scene view #127).
|
- Added extra event on the AutoCompleteComboBox, to fire when an item in the list is selected, with its display name.
|
||||||
- Upgraded RangeSlider to work in both Horizontal and Vertical setups.
|
- FlowLayoutGroup components updated to latest (likely the last as the author has stopped development)
|
||||||
- Merged in RangeSlider-upgrade. (pull request Newtonsoft.Json.dll conflict #131)
|
|
||||||
- Updated UIVertical scroller to be 2022 compliant.
|
|
||||||
- Updated Curly UI to wait until end of the frame to recalculate positions.
|
|
||||||
- Updated Depth Texture sampler in UI Particles Shaders.
|
|
||||||
- Updated Points to always be an array of 1 when set to nothing for the Line Renderer.
|
|
||||||
- Updated Cooldown button to work with Keyboard input.
|
|
||||||
- Removed unneeded size calculation which caused some issues with mixed content.
|
|
||||||
- Resolved an issue whereby the last row in a flow layout group would not size correctly.
|
|
||||||
- Updated all components using "LayoutGroup" to override their OnDisable.
|
|
||||||
- Updated validation in the new MinMaxSlider.
|
|
||||||
- Updated Editor create options to add the correct Event System Input manager.
|
|
||||||
- Updated initialisation logic to not cause an endless loop in the TabNavigationHelper.
|
|
||||||
- Updated "Action" use to "UnityAction" to avoid Unity issues for DropDowns.
|
|
||||||
- Updated UIVerticalScroller for standards.
|
|
||||||
- Updated ReorderableList/ReorderableListElement to prevent creating a fake object for non-transferable items.
|
|
||||||
- Updated panel drawing for ComboBox controls and added DropdownOffset.
|
|
||||||
- Updated build issue with ReorderableListElement.
|
|
||||||
- Updated NonDrawingGraphic to require a CanvasRender, else it causes an error on run.
|
|
||||||
|
|
||||||
## Deprecated
|
## Deprecated
|
||||||
|
|
||||||
- Marked ScrollPositionController as Obsolete, users should use the new Scoller.
|
- All deprecated Text based components now have "obsolete" tags, to avoid breaking code. Note, these do not function in 2022 and above, as Unity have "changed" things. For any affected component, I recommend updating to use TextMeshPro native features.
|
||||||
- BestFitOutline - Deprecated in Unity 2020 onwards. (still available for earlier versions)
|
|
||||||
- NicerOutline - Deprecated in Unity 2020 onwards. (still available for earlier versions)
|
|
||||||
- Marked TileSizeFitter as obsolete as Unity has made this unworkable.
|
|
||||||
|
|
||||||
## Fixed
|
- [UI Extensions Issue log](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues)
|
||||||
|
|
||||||
- Resolved issues with DisplayAbove and using a 0 ItemsToDisplay for ComboBox controls.
|
|
||||||
- Resolved startup issue that prevented the control from being used (Unity changed the start order in some instances), this was causing null reference issues with comboboxes.
|
|
||||||
- Patch fix for UILineRenderer.
|
|
||||||
- Resolves issue where the lower range value would become stuck when moving.
|
|
||||||
- Updated Infinite scroll to work with content of different sizes.
|
|
||||||
- Updated Dropdown list to NOT resize text Rect on draw.
|
|
||||||
- Revised the Curly UI fix as it was preventing the graphic from being updated in the scene view.
|
|
||||||
- Cleanup and ensuring the UIParticleSystem is disposed in onDestroy correctly.
|
|
||||||
- Clean up range slider unused variables.
|
|
||||||
|
|
||||||
* [UI Extensions Issue log](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues)
|
|
||||||
|
|
||||||
## Upgrade Notes
|
## Upgrade Notes
|
||||||
|
|
||||||
|
@ -209,6 +174,8 @@ There are almost 70+ extension controls / effect and other utilities in the proj
|
||||||
|NicerOutline|RaycastMask|UIFlippable|UIImageCrop|SoftAlphaMask|
|
|NicerOutline|RaycastMask|UIFlippable|UIImageCrop|SoftAlphaMask|
|
||||||
|CylinderText|UIParticleSystem|CurlyUI|Shine Effect|Shader Effects|
|
|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)
|
[Additional Components](https://unity-ui-extensions.github.io/Controls.html#additional-components)
|
||||||
|
|
||||||
|ReturnKeyTrigger|TabNavigation|uGUITools|ScrollRectTweener|ScrollRectLinker|
|
|ReturnKeyTrigger|TabNavigation|uGUITools|ScrollRectTweener|ScrollRectLinker|
|
||||||
|
@ -249,9 +216,9 @@ Got a script you want added? Then just fork the [GitHub repository](https://gith
|
||||||
|
|
||||||
Just ensure:
|
Just ensure:
|
||||||
|
|
||||||
* The header of the script should match the standard used in all scripts.
|
- The header of the script should match the standard used in all scripts.
|
||||||
* The script uses the **Unity.UI.Extensions** namespace so they do not affect any other developments.
|
- The script uses the **Unity.UI.Extensions** namespace so they do not affect any other developments.
|
||||||
* (optional) Add Component and Editor options where possible. (editor options are in the Editor\UIExtensionsMenuOptions.cs file)
|
- (optional) Add Component and Editor options where possible. (editor options are in the Editor\UIExtensionsMenuOptions.cs file)
|
||||||
|
|
||||||
## [License](https://raw.githubusercontent.com/Unity-UI-Extensions/com.unity.uiextensions/release/LICENSE.md)
|
## [License](https://raw.githubusercontent.com/Unity-UI-Extensions/com.unity.uiextensions/release/LICENSE.md)
|
||||||
|
|
||||||
|
@ -264,7 +231,7 @@ Check out the [page on my blog](http://bit.ly/Unity3DUIEssentials) for more deta
|
||||||
|
|
||||||
## [The downloads](https://unity-ui-extensions.github.io/Downloads)
|
## [The downloads](https://unity-ui-extensions.github.io/Downloads)
|
||||||
|
|
||||||
As this repo was created to support my new Unity UI Title ["Unity 3D UI Essentials"](http://bit.ly/Unity3DUIEssentials), in the downloads section you will find two custom assets (SpaceShip-DemoScene-Start.unitypackage and RollABallSample-Start.unitypackage). These are just here as starter scenes for doing UI tasks in the book.
|
As this repo was created to support my new Unity UI Title ["Unity 3D UI Essentials"](http://bit.ly/Unity3DUIEssentials), in the downloads section you will find two custom assets (SpaceShip-DemoScene-Start.unitypackage and RollABallSample-Start.unitypackage). These are just here as starter scenes for doing UI tasks in the book.
|
||||||
|
|
||||||
I will add more sample scenes for the UI examples in this repository and detail them above over time.
|
I will add more sample scenes for the UI examples in this repository and detail them above over time.
|
||||||
|
|
||||||
|
|
|
@ -2,217 +2,225 @@
|
||||||
///Sourced from - http://forum.unity3d.com/threads/accordion-type-layout.271818/
|
///Sourced from - http://forum.unity3d.com/threads/accordion-type-layout.271818/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using UnityEngine.UI.Extensions.Tweens;
|
using UnityEngine.UI.Extensions.Tweens;
|
||||||
|
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
[RequireComponent(typeof(RectTransform), typeof(LayoutElement))]
|
[RequireComponent(typeof(RectTransform), typeof(LayoutElement))]
|
||||||
[AddComponentMenu("UI/Extensions/Accordion/Accordion Element")]
|
[AddComponentMenu("UI/Extensions/Accordion/Accordion Element")]
|
||||||
public class AccordionElement : Toggle
|
public class AccordionElement : Toggle
|
||||||
{
|
{
|
||||||
|
|
||||||
[SerializeField] private float m_MinHeight = 18f;
|
[SerializeField] private float m_MinHeight = 18f;
|
||||||
|
|
||||||
public float MinHeight => m_MinHeight;
|
public float MinHeight => m_MinHeight;
|
||||||
|
|
||||||
[SerializeField] private float m_MinWidth = 40f;
|
[SerializeField] private float m_MinWidth = 40f;
|
||||||
|
|
||||||
public float MinWidth => m_MinWidth;
|
public float MinWidth => m_MinWidth;
|
||||||
|
|
||||||
private Accordion m_Accordion;
|
private Accordion m_Accordion;
|
||||||
private RectTransform m_RectTransform;
|
private RectTransform m_RectTransform;
|
||||||
private LayoutElement m_LayoutElement;
|
private LayoutElement m_LayoutElement;
|
||||||
|
|
||||||
[NonSerialized]
|
[NonSerialized]
|
||||||
private readonly TweenRunner<FloatTween> m_FloatTweenRunner;
|
private readonly TweenRunner<FloatTween> m_FloatTweenRunner;
|
||||||
|
|
||||||
protected AccordionElement()
|
protected AccordionElement()
|
||||||
{
|
{
|
||||||
if (this.m_FloatTweenRunner == null)
|
if (this.m_FloatTweenRunner == null)
|
||||||
this.m_FloatTweenRunner = new TweenRunner<FloatTween>();
|
this.m_FloatTweenRunner = new TweenRunner<FloatTween>();
|
||||||
|
|
||||||
this.m_FloatTweenRunner.Init(this);
|
this.m_FloatTweenRunner.Init(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Awake()
|
protected override void Awake()
|
||||||
{
|
{
|
||||||
base.Awake();
|
base.Awake();
|
||||||
base.transition = Transition.None;
|
base.transition = Transition.None;
|
||||||
base.toggleTransition = ToggleTransition.None;
|
base.toggleTransition = ToggleTransition.None;
|
||||||
this.m_Accordion = this.gameObject.GetComponentInParent<Accordion>();
|
this.m_Accordion = this.gameObject.GetComponentInParent<Accordion>();
|
||||||
this.m_RectTransform = this.transform as RectTransform;
|
this.m_RectTransform = this.transform as RectTransform;
|
||||||
this.m_LayoutElement = this.gameObject.GetComponent<LayoutElement>();
|
this.m_LayoutElement = this.gameObject.GetComponent<LayoutElement>();
|
||||||
this.onValueChanged.AddListener(OnValueChanged);
|
this.onValueChanged.AddListener(OnValueChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private new IEnumerator Start()
|
||||||
|
{
|
||||||
|
base.Start();
|
||||||
|
yield return new WaitForEndOfFrame(); // Wait for the first frame
|
||||||
|
OnValueChanged(this.isOn);
|
||||||
|
}
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
protected override void OnValidate()
|
protected override void OnValidate()
|
||||||
{
|
{
|
||||||
base.OnValidate();
|
base.OnValidate();
|
||||||
this.m_Accordion = this.gameObject.GetComponentInParent<Accordion>();
|
this.m_Accordion = this.gameObject.GetComponentInParent<Accordion>();
|
||||||
|
|
||||||
if (this.group == null)
|
if (this.group == null)
|
||||||
{
|
{
|
||||||
ToggleGroup tg = this.GetComponentInParent<ToggleGroup>();
|
ToggleGroup tg = this.GetComponentInParent<ToggleGroup>();
|
||||||
|
|
||||||
if (tg != null)
|
|
||||||
{
|
|
||||||
this.group = tg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LayoutElement le = this.gameObject.GetComponent<LayoutElement>();
|
|
||||||
|
|
||||||
if (le != null && m_Accordion != null)
|
if (tg != null)
|
||||||
{
|
{
|
||||||
if (this.isOn)
|
this.group = tg;
|
||||||
{
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LayoutElement le = this.gameObject.GetComponent<LayoutElement>();
|
||||||
|
|
||||||
|
if (le != null && m_Accordion != null)
|
||||||
|
{
|
||||||
|
if (this.isOn)
|
||||||
|
{
|
||||||
if (m_Accordion.ExpandVerticval)
|
if (m_Accordion.ExpandVerticval)
|
||||||
{
|
{
|
||||||
le.preferredHeight = -1f;
|
le.preferredHeight = -1f;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
le.preferredWidth = -1f;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (m_Accordion.ExpandVerticval)
|
|
||||||
{
|
|
||||||
le.preferredHeight = this.m_MinHeight;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
le.preferredWidth = this.m_MinWidth;
|
le.preferredWidth = -1f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_Accordion.ExpandVerticval)
|
||||||
|
{
|
||||||
|
le.preferredHeight = this.m_MinHeight;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
le.preferredWidth = this.m_MinWidth;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public void OnValueChanged(bool state)
|
public void OnValueChanged(bool state)
|
||||||
{
|
{
|
||||||
if (this.m_LayoutElement == null)
|
if (this.m_LayoutElement == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Accordion.Transition transition = (this.m_Accordion != null) ? this.m_Accordion.transition : Accordion.Transition.Instant;
|
|
||||||
|
|
||||||
if (transition == Accordion.Transition.Instant && m_Accordion != null)
|
Accordion.Transition transition = (this.m_Accordion != null) ? this.m_Accordion.transition : Accordion.Transition.Instant;
|
||||||
{
|
|
||||||
if (state)
|
if (transition == Accordion.Transition.Instant && m_Accordion != null)
|
||||||
{
|
{
|
||||||
if (m_Accordion.ExpandVerticval)
|
if (state)
|
||||||
{
|
{
|
||||||
this.m_LayoutElement.preferredHeight = -1f;
|
if (m_Accordion.ExpandVerticval)
|
||||||
}
|
{
|
||||||
|
this.m_LayoutElement.preferredHeight = -1f;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.m_LayoutElement.preferredWidth = -1f;
|
this.m_LayoutElement.preferredWidth = -1f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_Accordion.ExpandVerticval)
|
if (m_Accordion.ExpandVerticval)
|
||||||
{
|
{
|
||||||
this.m_LayoutElement.preferredHeight = this.m_MinHeight;
|
this.m_LayoutElement.preferredHeight = this.m_MinHeight;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.m_LayoutElement.preferredWidth = this.m_MinWidth;
|
this.m_LayoutElement.preferredWidth = this.m_MinWidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (transition == Accordion.Transition.Tween)
|
else if (transition == Accordion.Transition.Tween)
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
{
|
{
|
||||||
if (m_Accordion.ExpandVerticval)
|
if (m_Accordion.ExpandVerticval)
|
||||||
{
|
{
|
||||||
this.StartTween(this.m_MinHeight, this.GetExpandedHeight());
|
this.StartTween(this.m_MinHeight, this.GetExpandedHeight());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.StartTween(this.m_MinWidth, this.GetExpandedWidth());
|
this.StartTween(this.m_MinWidth, this.GetExpandedWidth());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_Accordion.ExpandVerticval)
|
if (m_Accordion.ExpandVerticval)
|
||||||
{
|
{
|
||||||
this.StartTween(this.m_RectTransform.rect.height, this.m_MinHeight);
|
this.StartTween(this.m_RectTransform.rect.height, this.m_MinHeight);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.StartTween(this.m_RectTransform.rect.width, this.m_MinWidth);
|
this.StartTween(this.m_RectTransform.rect.width, this.m_MinWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected float GetExpandedHeight()
|
|
||||||
{
|
|
||||||
if (this.m_LayoutElement == null)
|
|
||||||
return this.m_MinHeight;
|
|
||||||
|
|
||||||
float originalPrefH = this.m_LayoutElement.preferredHeight;
|
|
||||||
this.m_LayoutElement.preferredHeight = -1f;
|
|
||||||
float h = LayoutUtility.GetPreferredHeight(this.m_RectTransform);
|
|
||||||
this.m_LayoutElement.preferredHeight = originalPrefH;
|
|
||||||
|
|
||||||
return h;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected float GetExpandedWidth()
|
protected float GetExpandedHeight()
|
||||||
{
|
{
|
||||||
if (this.m_LayoutElement == null)
|
if (this.m_LayoutElement == null)
|
||||||
return this.m_MinWidth;
|
return this.m_MinHeight;
|
||||||
|
|
||||||
float originalPrefW = this.m_LayoutElement.preferredWidth;
|
float originalPrefH = this.m_LayoutElement.preferredHeight;
|
||||||
this.m_LayoutElement.preferredWidth = -1f;
|
this.m_LayoutElement.preferredHeight = -1f;
|
||||||
float w = LayoutUtility.GetPreferredWidth(this.m_RectTransform);
|
float h = LayoutUtility.GetPreferredHeight(this.m_RectTransform);
|
||||||
this.m_LayoutElement.preferredWidth = originalPrefW;
|
this.m_LayoutElement.preferredHeight = originalPrefH;
|
||||||
|
|
||||||
return w;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void StartTween(float startFloat, float targetFloat)
|
protected float GetExpandedWidth()
|
||||||
{
|
{
|
||||||
float duration = (this.m_Accordion != null) ? this.m_Accordion.transitionDuration : 0.3f;
|
if (this.m_LayoutElement == null)
|
||||||
|
return this.m_MinWidth;
|
||||||
FloatTween info = new FloatTween
|
|
||||||
{
|
float originalPrefW = this.m_LayoutElement.preferredWidth;
|
||||||
duration = duration,
|
this.m_LayoutElement.preferredWidth = -1f;
|
||||||
startFloat = startFloat,
|
float w = LayoutUtility.GetPreferredWidth(this.m_RectTransform);
|
||||||
targetFloat = targetFloat
|
this.m_LayoutElement.preferredWidth = originalPrefW;
|
||||||
};
|
|
||||||
if (m_Accordion.ExpandVerticval)
|
return w;
|
||||||
{
|
}
|
||||||
info.AddOnChangedCallback(SetHeight);
|
|
||||||
}
|
protected void StartTween(float startFloat, float targetFloat)
|
||||||
|
{
|
||||||
|
float duration = (this.m_Accordion != null) ? this.m_Accordion.transitionDuration : 0.3f;
|
||||||
|
|
||||||
|
FloatTween info = new FloatTween
|
||||||
|
{
|
||||||
|
duration = duration,
|
||||||
|
startFloat = startFloat,
|
||||||
|
targetFloat = targetFloat
|
||||||
|
};
|
||||||
|
if (m_Accordion.ExpandVerticval)
|
||||||
|
{
|
||||||
|
info.AddOnChangedCallback(SetHeight);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
info.AddOnChangedCallback(SetWidth);
|
info.AddOnChangedCallback(SetWidth);
|
||||||
}
|
}
|
||||||
info.ignoreTimeScale = true;
|
info.ignoreTimeScale = true;
|
||||||
this.m_FloatTweenRunner.StartTween(info);
|
this.m_FloatTweenRunner.StartTween(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void SetHeight(float height)
|
|
||||||
{
|
|
||||||
if (this.m_LayoutElement == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.m_LayoutElement.preferredHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void SetWidth(float width)
|
protected void SetHeight(float height)
|
||||||
{
|
{
|
||||||
if (this.m_LayoutElement == null)
|
if (this.m_LayoutElement == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.m_LayoutElement.preferredWidth = width;
|
this.m_LayoutElement.preferredHeight = height;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
protected void SetWidth(float width)
|
||||||
|
{
|
||||||
|
if (this.m_LayoutElement == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.m_LayoutElement.preferredWidth = width;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
///Credit perchik
|
///Credit perchik
|
||||||
///Sourced from - http://forum.unity3d.com/threads/receive-onclick-event-and-pass-it-on-to-lower-ui-elements.293642/
|
///Sourced from - http://forum.unity3d.com/threads/receive-onclick-event-and-pass-it-on-to-lower-ui-elements.293642/
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
|
@ -132,6 +131,9 @@ namespace UnityEngine.UI.Extensions
|
||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
public class SelectionValidityChangedEvent : Events.UnityEvent<bool> { }
|
public class SelectionValidityChangedEvent : Events.UnityEvent<bool> { }
|
||||||
|
|
||||||
|
[System.Serializable]
|
||||||
|
public class ItemSelectedEvent : Events.UnityEvent<string> { }
|
||||||
|
|
||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
public class ControlDisabledEvent : Events.UnityEvent<bool> { }
|
public class ControlDisabledEvent : Events.UnityEvent<bool> { }
|
||||||
|
|
||||||
|
@ -142,6 +144,8 @@ namespace UnityEngine.UI.Extensions
|
||||||
public SelectionValidityChangedEvent OnSelectionValidityChanged;
|
public SelectionValidityChangedEvent OnSelectionValidityChanged;
|
||||||
// fires in both cases
|
// fires in both cases
|
||||||
public SelectionChangedEvent OnSelectionChanged;
|
public SelectionChangedEvent OnSelectionChanged;
|
||||||
|
// fires when an item is clicked
|
||||||
|
public ItemSelectedEvent OnItemSelected;
|
||||||
// fires when item is changed;
|
// fires when item is changed;
|
||||||
public ControlDisabledEvent OnControlDisabled;
|
public ControlDisabledEvent OnControlDisabled;
|
||||||
|
|
||||||
|
@ -359,10 +363,10 @@ namespace UnityEngine.UI.Extensions
|
||||||
/// <param name="item"></param>
|
/// <param name="item"></param>
|
||||||
private void OnItemClicked(string item)
|
private void OnItemClicked(string item)
|
||||||
{
|
{
|
||||||
//Debug.Log("item " + item + " clicked");
|
|
||||||
Text = item;
|
Text = item;
|
||||||
_mainInput.text = Text;
|
_mainInput.text = Text;
|
||||||
ToggleDropdownPanel(true);
|
ToggleDropdownPanel(true);
|
||||||
|
OnItemSelected?.Invoke(Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RedrawPanel()
|
private void RedrawPanel()
|
||||||
|
|
|
@ -1,29 +1,30 @@
|
||||||
///Credit perchik
|
///Credit perchik
|
||||||
///Sourced from - http://forum.unity3d.com/threads/receive-onclick-event-and-pass-it-on-to-lower-ui-elements.293642/
|
///Sourced from - http://forum.unity3d.com/threads/receive-onclick-event-and-pass-it-on-to-lower-ui-elements.293642/
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Extension to the UI class which creates a dropdown list
|
/// Extension to the UI class which creates a dropdown list
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[RequireComponent(typeof(RectTransform))]
|
[RequireComponent(typeof(RectTransform))]
|
||||||
[AddComponentMenu("UI/Extensions/ComboBox/Dropdown List")]
|
[AddComponentMenu("UI/Extensions/ComboBox/Dropdown List")]
|
||||||
public class DropDownList : MonoBehaviour
|
public class DropDownList : MonoBehaviour
|
||||||
{
|
{
|
||||||
public Color disabledTextColor;
|
public Color disabledTextColor;
|
||||||
public DropDownListItem SelectedItem { get; private set; } //outside world gets to get this, not set it
|
public DropDownListItem SelectedItem { get; private set; } //outside world gets to get this, not set it
|
||||||
|
|
||||||
[Header("Dropdown List Items")]
|
[Header("Dropdown List Items")]
|
||||||
public List<DropDownListItem> Items;
|
public List<DropDownListItem> Items;
|
||||||
|
|
||||||
[Header("Properties")]
|
[Header("Properties")]
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private bool isActive = true;
|
private bool isActive = true;
|
||||||
|
|
||||||
public bool OverrideHighlighted = true;
|
public bool OverrideHighlighted = true;
|
||||||
|
|
||||||
//private bool isInitialized = false;
|
//private bool isInitialized = false;
|
||||||
private bool _isPanelActive = false;
|
private bool _isPanelActive = false;
|
||||||
|
@ -46,10 +47,13 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
private List<DropDownListButton> _panelItems = new List<DropDownListButton>();
|
private List<DropDownListButton> _panelItems = new List<DropDownListButton>();
|
||||||
|
|
||||||
private GameObject _itemTemplate;
|
private GameObject _itemTemplate;
|
||||||
private bool _initialized;
|
private bool _initialized;
|
||||||
|
|
||||||
[SerializeField]
|
private string _defaultMainButtonCaption = null;
|
||||||
|
private Color _defaultNormalColor;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
private float _scrollBarWidth = 20.0f;
|
private float _scrollBarWidth = 20.0f;
|
||||||
public float ScrollBarWidth
|
public float ScrollBarWidth
|
||||||
{
|
{
|
||||||
|
@ -61,7 +65,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// private int scrollOffset; //offset of the selected item
|
|
||||||
private int _selectedIndex = -1;
|
private int _selectedIndex = -1;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
|
@ -76,42 +79,42 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private float dropdownOffset;
|
private float dropdownOffset;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private bool _displayPanelAbove = false;
|
private bool _displayPanelAbove = false;
|
||||||
|
|
||||||
public bool SelectFirstItemOnStart = false;
|
public bool SelectFirstItemOnStart = false;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private int selectItemIndexOnStart = 0;
|
private int selectItemIndexOnStart = 0;
|
||||||
private bool shouldSelectItemOnStart => SelectFirstItemOnStart || selectItemIndexOnStart > 0;
|
private bool shouldSelectItemOnStart => SelectFirstItemOnStart || selectItemIndexOnStart > 0;
|
||||||
|
|
||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
public class SelectionChangedEvent : Events.UnityEvent<int> { }
|
public class SelectionChangedEvent : Events.UnityEvent<int> { }
|
||||||
|
|
||||||
// fires when item is changed;
|
// fires when item is changed;
|
||||||
[Header("Events")]
|
[Header("Events")]
|
||||||
public SelectionChangedEvent OnSelectionChanged;
|
public SelectionChangedEvent OnSelectionChanged;
|
||||||
|
|
||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
public class ControlDisabledEvent : Events.UnityEvent<bool> { }
|
public class ControlDisabledEvent : Events.UnityEvent<bool> { }
|
||||||
|
|
||||||
// fires when item is changed;
|
// fires when item changes between enabled and disabled;
|
||||||
public ControlDisabledEvent OnControlDisabled;
|
public ControlDisabledEvent OnControlDisabled;
|
||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
Initialize();
|
Initialize();
|
||||||
if (shouldSelectItemOnStart && Items.Count > 0)
|
if (shouldSelectItemOnStart && Items.Count > 0)
|
||||||
{
|
{
|
||||||
SelectItemIndex(SelectFirstItemOnStart ? 0 : selectItemIndexOnStart);
|
SelectItemIndex(SelectFirstItemOnStart ? 0 : selectItemIndexOnStart);
|
||||||
}
|
}
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool Initialize()
|
private bool Initialize()
|
||||||
{
|
{
|
||||||
if (_initialized) return true;
|
if (_initialized) return true;
|
||||||
|
|
||||||
|
@ -121,6 +124,9 @@ namespace UnityEngine.UI.Extensions
|
||||||
_rectTransform = GetComponent<RectTransform>();
|
_rectTransform = GetComponent<RectTransform>();
|
||||||
_mainButton = new DropDownListButton(_rectTransform.Find("MainButton").gameObject);
|
_mainButton = new DropDownListButton(_rectTransform.Find("MainButton").gameObject);
|
||||||
|
|
||||||
|
_defaultMainButtonCaption = _mainButton.txt.text;
|
||||||
|
_defaultNormalColor = _mainButton.btn.colors.normalColor;
|
||||||
|
|
||||||
_overlayRT = _rectTransform.Find("Overlay").GetComponent<RectTransform>();
|
_overlayRT = _rectTransform.Find("Overlay").GetComponent<RectTransform>();
|
||||||
_overlayRT.gameObject.SetActive(false);
|
_overlayRT.gameObject.SetActive(false);
|
||||||
_scrollPanelRT = _overlayRT.Find("ScrollPanel").GetComponent<RectTransform>();
|
_scrollPanelRT = _overlayRT.Find("ScrollPanel").GetComponent<RectTransform>();
|
||||||
|
@ -147,32 +153,32 @@ namespace UnityEngine.UI.Extensions
|
||||||
Debug.LogError("Something is setup incorrectly with the dropdownlist component causing a Null Reference Exception");
|
Debug.LogError("Something is setup incorrectly with the dropdownlist component causing a Null Reference Exception");
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
|
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update the drop down selection to a specific index
|
/// Update the drop down selection to a specific index
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="index"></param>
|
/// <param name="index"></param>
|
||||||
public void SelectItemIndex(int index)
|
public void SelectItemIndex(int index)
|
||||||
{
|
{
|
||||||
ToggleDropdownPanel(false);
|
ToggleDropdownPanel();
|
||||||
OnItemClicked(index);
|
OnItemClicked(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// currently just using items in the list instead of being able to add to it.
|
// currently just using items in the list instead of being able to add to it.
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Rebuilds the list from a new collection.
|
/// Rebuilds the list from a new collection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// NOTE, this will clear all existing items
|
/// NOTE, this will clear all existing items
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
/// <param name="list"></param>
|
/// <param name="list"></param>
|
||||||
public void RefreshItems(params object[] list)
|
public void RefreshItems(params object[] list)
|
||||||
{
|
{
|
||||||
Items.Clear();
|
Items.Clear();
|
||||||
List<DropDownListItem> ddItems = new List<DropDownListItem>();
|
List<DropDownListItem> ddItems = new List<DropDownListItem>();
|
||||||
|
@ -197,76 +203,94 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
Items.AddRange(ddItems);
|
Items.AddRange(ddItems);
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds an additional item to the drop down list (recommended)
|
/// Adds an additional item to the drop down list (recommended)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">Item of type DropDownListItem</param>
|
/// <param name="item">Item of type DropDownListItem</param>
|
||||||
public void AddItem(DropDownListItem item)
|
public void AddItem(DropDownListItem item)
|
||||||
{
|
{
|
||||||
Items.Add(item);
|
Items.Add(item);
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds an additional drop down list item using a string name
|
/// Adds an additional drop down list item using a string name
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">Item of type String</param>
|
/// <param name="item">Item of type String</param>
|
||||||
public void AddItem(string item)
|
public void AddItem(string item)
|
||||||
{
|
{
|
||||||
Items.Add(new DropDownListItem(caption: (string)item));
|
Items.Add(new DropDownListItem(caption: (string)item));
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds an additional drop down list item using a sprite image
|
/// Adds an additional drop down list item using a sprite image
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">Item of type UI Sprite</param>
|
/// <param name="item">Item of type UI Sprite</param>
|
||||||
public void AddItem(Sprite item)
|
public void AddItem(Sprite item)
|
||||||
{
|
{
|
||||||
Items.Add(new DropDownListItem(image: (Sprite)item));
|
Items.Add(new DropDownListItem(image: (Sprite)item));
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Removes an item from the drop down list (recommended)
|
/// Removes an item from the drop down list (recommended)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">Item of type DropDownListItem</param>
|
/// <param name="item">Item of type DropDownListItem</param>
|
||||||
public void RemoveItem(DropDownListItem item)
|
public void RemoveItem(DropDownListItem item)
|
||||||
{
|
{
|
||||||
Items.Remove(item);
|
Items.Remove(item);
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Removes an item from the drop down list item using a string name
|
/// Removes an item from the drop down list item using a string name
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">Item of type String</param>
|
/// <param name="item">Item of type String</param>
|
||||||
public void RemoveItem(string item)
|
public void RemoveItem(string item)
|
||||||
{
|
{
|
||||||
Items.Remove(new DropDownListItem(caption: (string)item));
|
Items.Remove(new DropDownListItem(caption: (string)item));
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Removes an item from the drop down list item using a sprite image
|
/// Removes an item from the drop down list item using a sprite image
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">Item of type UI Sprite</param>
|
/// <param name="item">Item of type UI Sprite</param>
|
||||||
public void RemoveItem(Sprite item)
|
public void RemoveItem(Sprite item)
|
||||||
{
|
{
|
||||||
Items.Remove(new DropDownListItem(image: (Sprite)item));
|
Items.Remove(new DropDownListItem(image: (Sprite)item));
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
RedrawPanel();
|
RedrawPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetItems()
|
public void ResetDropDown()
|
||||||
|
{
|
||||||
|
if (!_initialized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_mainButton.txt.text = _defaultMainButtonCaption;
|
||||||
|
for (int i = 0; i < _itemsPanelRT.childCount; i++)
|
||||||
|
{
|
||||||
|
_panelItems[i].btnImg.color = _defaultNormalColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
_selectedIndex = -1;
|
||||||
|
_initialized = false;
|
||||||
|
Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ResetItems()
|
||||||
{
|
{
|
||||||
Items.Clear();
|
Items.Clear();
|
||||||
RebuildPanel();
|
RebuildPanel();
|
||||||
|
@ -304,7 +328,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
_panelItems[i].txt.text = item.Caption;
|
_panelItems[i].txt.text = item.Caption;
|
||||||
if (item.IsDisabled) _panelItems[i].txt.color = disabledTextColor;
|
if (item.IsDisabled) _panelItems[i].txt.color = disabledTextColor;
|
||||||
|
|
||||||
if (_panelItems[i].btnImg != null) _panelItems[i].btnImg.sprite = null;//hide the button image
|
if (_panelItems[i].btnImg != null) _panelItems[i].btnImg.sprite = null;//hide the button image
|
||||||
_panelItems[i].img.sprite = item.Image;
|
_panelItems[i].img.sprite = item.Image;
|
||||||
_panelItems[i].img.color = (item.Image == null) ? new Color(1, 1, 1, 0)
|
_panelItems[i].img.color = (item.Image == null) ? new Color(1, 1, 1, 0)
|
||||||
: item.IsDisabled ? new Color(1, 1, 1, .5f)
|
: item.IsDisabled ? new Color(1, 1, 1, .5f)
|
||||||
|
@ -327,7 +351,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
if (indx != _selectedIndex && OnSelectionChanged != null) OnSelectionChanged.Invoke(indx);
|
if (indx != _selectedIndex && OnSelectionChanged != null) OnSelectionChanged.Invoke(indx);
|
||||||
|
|
||||||
_selectedIndex = indx;
|
_selectedIndex = indx;
|
||||||
ToggleDropdownPanel(true);
|
ToggleDropdownPanel();
|
||||||
UpdateSelected();
|
UpdateSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,25 +373,25 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
_mainButton.txt.text = SelectedItem.Caption;
|
_mainButton.txt.text = SelectedItem.Caption;
|
||||||
|
|
||||||
//update selected index color
|
//update selected index color
|
||||||
if (OverrideHighlighted)
|
if (OverrideHighlighted)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _itemsPanelRT.childCount; i++)
|
for (int i = 0; i < _itemsPanelRT.childCount; i++)
|
||||||
{
|
{
|
||||||
_panelItems[i].btnImg.color = (_selectedIndex == i) ? _mainButton.btn.colors.highlightedColor : new Color(0, 0, 0, 0);
|
_panelItems[i].btnImg.color = (_selectedIndex == i) ? _mainButton.btn.colors.highlightedColor : new Color(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RedrawPanel()
|
private void RedrawPanel()
|
||||||
{
|
{
|
||||||
float scrollbarWidth = _panelItems.Count > ItemsToDisplay ? _scrollBarWidth : 0f;//hide the scrollbar if there's not enough items
|
float scrollbarWidth = _panelItems.Count > ItemsToDisplay ? _scrollBarWidth : 0f;//hide the scrollbar if there's not enough items
|
||||||
_scrollBarRT.gameObject.SetActive(_panelItems.Count > ItemsToDisplay);
|
_scrollBarRT.gameObject.SetActive(_panelItems.Count > ItemsToDisplay);
|
||||||
|
|
||||||
float dropdownHeight = _itemsToDisplay > 0 ? _rectTransform.sizeDelta.y * Mathf.Min(_itemsToDisplay, _panelItems.Count) : _rectTransform.sizeDelta.y * _panelItems.Count;
|
float dropdownHeight = _itemsToDisplay > 0 ? _rectTransform.sizeDelta.y * Mathf.Min(_itemsToDisplay, _panelItems.Count) : _rectTransform.sizeDelta.y * _panelItems.Count;
|
||||||
dropdownHeight += dropdownOffset;
|
dropdownHeight += dropdownOffset;
|
||||||
|
|
||||||
if (!_hasDrawnOnce || _rectTransform.sizeDelta != _mainButton.rectTransform.sizeDelta)
|
if (!_hasDrawnOnce || _rectTransform.sizeDelta != _mainButton.rectTransform.sizeDelta)
|
||||||
{
|
{
|
||||||
_hasDrawnOnce = true;
|
_hasDrawnOnce = true;
|
||||||
_mainButton.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, _rectTransform.sizeDelta.x);
|
_mainButton.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, _rectTransform.sizeDelta.x);
|
||||||
|
@ -377,12 +401,12 @@ namespace UnityEngine.UI.Extensions
|
||||||
itemsRemaining = itemsRemaining < 0 ? 0 : itemsRemaining;
|
itemsRemaining = itemsRemaining < 0 ? 0 : itemsRemaining;
|
||||||
|
|
||||||
_scrollPanelRT.SetParent(transform, true);
|
_scrollPanelRT.SetParent(transform, true);
|
||||||
_scrollPanelRT.anchoredPosition = _displayPanelAbove ?
|
_scrollPanelRT.anchoredPosition = _displayPanelAbove ?
|
||||||
new Vector2(0, dropdownOffset + dropdownHeight) :
|
new Vector2(0, dropdownOffset + dropdownHeight) :
|
||||||
new Vector2(0, -(dropdownOffset + _rectTransform.sizeDelta.y));
|
new Vector2(0, -(dropdownOffset + _rectTransform.sizeDelta.y));
|
||||||
|
|
||||||
//make the overlay fill the screen
|
//make the overlay fill the screen
|
||||||
_overlayRT.SetParent(_canvas.transform, false);
|
_overlayRT.SetParent(_canvas.transform, false);
|
||||||
_overlayRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, _canvasRT.sizeDelta.x);
|
_overlayRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, _canvasRT.sizeDelta.x);
|
||||||
_overlayRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, _canvasRT.sizeDelta.y);
|
_overlayRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, _canvasRT.sizeDelta.y);
|
||||||
|
|
||||||
|
@ -392,7 +416,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
if (_panelItems.Count < 1) return;
|
if (_panelItems.Count < 1) return;
|
||||||
|
|
||||||
_scrollPanelRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, dropdownHeight);
|
_scrollPanelRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, dropdownHeight);
|
||||||
_scrollPanelRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, _rectTransform.sizeDelta.x);
|
_scrollPanelRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, _rectTransform.sizeDelta.x);
|
||||||
|
|
||||||
_itemsPanelRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, _scrollPanelRT.sizeDelta.x - scrollbarWidth - 5);
|
_itemsPanelRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, _scrollPanelRT.sizeDelta.x - scrollbarWidth - 5);
|
||||||
|
@ -407,38 +431,63 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Toggle the drop down list
|
/// Toggle the drop down list if it is active
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="directClick"> whether an item was directly clicked on</param>
|
/// <param name="directClick">Retained for backwards compatibility only.</param>
|
||||||
public void ToggleDropdownPanel(bool directClick)
|
[Obsolete("DirectClick Parameter is no longer required")]
|
||||||
|
public void ToggleDropdownPanel(bool directClick = false)
|
||||||
{
|
{
|
||||||
if (!isActive) return;
|
ToggleDropdownPanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Toggle the drop down list if it is active
|
||||||
|
/// </summary>
|
||||||
|
public void ToggleDropdownPanel()
|
||||||
|
{
|
||||||
|
if (!isActive)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_overlayRT.transform.localScale = new Vector3(1, 1, 1);
|
_overlayRT.transform.localScale = new Vector3(1, 1, 1);
|
||||||
_scrollBarRT.transform.localScale = new Vector3(1, 1, 1);
|
_scrollBarRT.transform.localScale = new Vector3(1, 1, 1);
|
||||||
_isPanelActive = !_isPanelActive;
|
_isPanelActive = !_isPanelActive;
|
||||||
_overlayRT.gameObject.SetActive(_isPanelActive);
|
_overlayRT.gameObject.SetActive(_isPanelActive);
|
||||||
|
|
||||||
if (_isPanelActive)
|
if (_isPanelActive)
|
||||||
{
|
{
|
||||||
transform.SetAsLastSibling();
|
transform.SetAsLastSibling();
|
||||||
}
|
}
|
||||||
else if (directClick)
|
|
||||||
{
|
|
||||||
// scrollOffset = Mathf.RoundToInt(itemsPanelRT.anchoredPosition.y / _rectTransform.sizeDelta.y);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Updates the control and sets its active status, determines whether the dropdown will open ot not
|
/// Hides the drop down panel if its visible at the moment
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="status"></param>
|
public void HideDropDownPanel()
|
||||||
public void SetActive(bool status)
|
{
|
||||||
{
|
if (!_isPanelActive)
|
||||||
if (status != isActive)
|
{
|
||||||
{
|
return;
|
||||||
OnControlDisabled?.Invoke(status);
|
}
|
||||||
}
|
|
||||||
isActive = status;
|
ToggleDropdownPanel();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the control and sets its active status, determines whether the dropdown will open ot not
|
||||||
|
/// and takes care of the underlying button to follow the status.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="status"></param>
|
||||||
|
public void SetActive(bool status)
|
||||||
|
{
|
||||||
|
if (status == isActive)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isActive = status;
|
||||||
|
OnControlDisabled?.Invoke(isActive);
|
||||||
|
_mainButton.btn.enabled = isActive;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -13,7 +13,11 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
void Awake()
|
void Awake()
|
||||||
{
|
{
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
foreach (var list in FindObjectsByType<ReorderableList>(FindObjectsSortMode.None))
|
||||||
|
#else
|
||||||
foreach (var list in FindObjectsOfType<ReorderableList>())
|
foreach (var list in FindObjectsOfType<ReorderableList>())
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
list.OnElementDropped.AddListener(ElementDropped);
|
list.OnElementDropped.AddListener(ElementDropped);
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,7 +169,11 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
// If we do not have a group of selectables already set, we'll just loop through every object that's a monobehaviour, and look for selectable interfaces in them
|
// If we do not have a group of selectables already set, we'll just loop through every object that's a monobehaviour, and look for selectable interfaces in them
|
||||||
if (selectableGroup == null) {
|
if (selectableGroup == null) {
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
behavioursToGetSelectionsFrom = GameObject.FindObjectsByType<MonoBehaviour>(FindObjectsSortMode.None);
|
||||||
|
#else
|
||||||
behavioursToGetSelectionsFrom = GameObject.FindObjectsOfType<MonoBehaviour>();
|
behavioursToGetSelectionsFrom = GameObject.FindObjectsOfType<MonoBehaviour>();
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
behavioursToGetSelectionsFrom = selectableGroup;
|
behavioursToGetSelectionsFrom = selectableGroup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -367,5 +367,14 @@ namespace UnityEngine.UI.Extensions
|
||||||
eventData.useDragThreshold = false;
|
eventData.useDragThreshold = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetXWithoutNotify(float x)
|
||||||
|
{
|
||||||
|
SetX(x, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetYWithoutNotify(float y)
|
||||||
|
{
|
||||||
|
SetY(y, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,19 @@
|
||||||
/// Sourced from - http://forum.unity3d.com/members/melang.593409/
|
/// Sourced from - http://forum.unity3d.com/members/melang.593409/
|
||||||
/// NOT supported in Unity 2022
|
/// NOT supported in Unity 2022
|
||||||
|
|
||||||
|
using System;
|
||||||
#if !UNITY_2022_1_OR_NEWER
|
#if !UNITY_2022_1_OR_NEWER
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
|
#if UNITY_2022_1_OR_NEWER
|
||||||
|
[Obsolete("BestFitOutline is not supported in Unity 2022.1 or newer. Use TMPro instead.")]
|
||||||
|
public class BestFitOutline : Shadow
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#else
|
||||||
[AddComponentMenu("UI/Effects/Extensions/BestFit Outline")]
|
[AddComponentMenu("UI/Effects/Extensions/BestFit Outline")]
|
||||||
public class BestFitOutline : Shadow
|
public class BestFitOutline : Shadow
|
||||||
{
|
{
|
||||||
|
@ -61,5 +70,5 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
#endif
|
}
|
|
@ -1,13 +1,18 @@
|
||||||
/// Credit Breyer
|
|
||||||
/// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1777407
|
using System;
|
||||||
|
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
#if UNITY_2022_1_OR_NEWER
|
#if UNITY_2022_1_OR_NEWER
|
||||||
[RequireComponent(typeof(TMPro.TMP_Text))]
|
[Obsolete("CurvedText is not supported in Unity 2022.1 or newer. Use TMPro instead.")]
|
||||||
|
public class CurvedText : BaseMeshEffect
|
||||||
|
{
|
||||||
|
public override void ModifyMesh(VertexHelper vh)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
[RequireComponent(typeof(Text))]
|
[RequireComponent(typeof(Text))]
|
||||||
#endif
|
|
||||||
[RequireComponent(typeof(RectTransform))]
|
[RequireComponent(typeof(RectTransform))]
|
||||||
[AddComponentMenu("UI/Effects/Extensions/Curved Text")]
|
[AddComponentMenu("UI/Effects/Extensions/Curved Text")]
|
||||||
public class CurvedText : BaseMeshEffect
|
public class CurvedText : BaseMeshEffect
|
||||||
|
@ -86,4 +91,5 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
|
}
|
|
@ -1,14 +1,21 @@
|
||||||
/// adaption for cylindrical bending by herbst
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
/// adaption for cylindrical bending by herbst
|
||||||
/// Credit Breyer
|
/// Credit Breyer
|
||||||
/// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1777407
|
/// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1777407
|
||||||
|
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
#if UNITY_2022_1_OR_NEWER
|
#if UNITY_2022_1_OR_NEWER
|
||||||
[RequireComponent(typeof(TMPro.TMP_Text))]
|
[Obsolete("CylinderText is not supported in Unity 2022.1 or newer. Use TMPro instead.")]
|
||||||
|
public class CylinderText : BaseMeshEffect
|
||||||
|
{
|
||||||
|
public override void ModifyMesh(VertexHelper vh)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
[RequireComponent(typeof(Text))]
|
[RequireComponent(typeof(Text))]
|
||||||
#endif
|
|
||||||
[RequireComponent(typeof(RectTransform))]
|
[RequireComponent(typeof(RectTransform))]
|
||||||
[AddComponentMenu("UI/Effects/Extensions/Cylinder Text")]
|
[AddComponentMenu("UI/Effects/Extensions/Cylinder Text")]
|
||||||
public class CylinderText : BaseMeshEffect
|
public class CylinderText : BaseMeshEffect
|
||||||
|
@ -56,4 +63,5 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
|
}
|
|
@ -1,6 +1,4 @@
|
||||||
/// Credit Deeperbeige
|
/*
|
||||||
/// Sourced from - http://forum.unity3d.com/threads/adjustable-character-spacing-free-script.288277/
|
|
||||||
/*
|
|
||||||
|
|
||||||
Produces an simple tracking/letter-spacing effect on UI Text components.
|
Produces an simple tracking/letter-spacing effect on UI Text components.
|
||||||
|
|
||||||
|
@ -40,11 +38,25 @@ 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.
|
break down entirely, but it doesn't really do what you'd want either.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
#if !UNITY_2022_1_OR_NEWER
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
/// Credit Deeperbeige
|
||||||
|
/// Sourced from - http://forum.unity3d.com/threads/adjustable-character-spacing-free-script.288277/
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
|
#if UNITY_2022_1_OR_NEWER
|
||||||
|
[Obsolete("LetterSpacing is not supported in Unity 2022.1 or newer. Use TMPro instead.")]
|
||||||
|
public class LetterSpacing : BaseMeshEffect
|
||||||
|
{
|
||||||
|
public override void ModifyMesh(VertexHelper vh)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
[AddComponentMenu("UI/Effects/Extensions/Letter Spacing")]
|
[AddComponentMenu("UI/Effects/Extensions/Letter Spacing")]
|
||||||
///Summary
|
///Summary
|
||||||
/// Note, Vertex Count has changed in 5.2.1+, is now 6 (two tris) instead of 4 (tri strip).
|
/// Note, Vertex Count has changed in 5.2.1+, is now 6 (two tris) instead of 4 (tri strip).
|
||||||
|
@ -55,13 +67,13 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
protected LetterSpacing() { }
|
protected LetterSpacing() { }
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
protected override void OnValidate()
|
protected override void OnValidate()
|
||||||
{
|
{
|
||||||
spacing = m_spacing;
|
spacing = m_spacing;
|
||||||
base.OnValidate();
|
base.OnValidate();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public float spacing
|
public float spacing
|
||||||
{
|
{
|
||||||
|
@ -74,6 +86,11 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void Awake()
|
||||||
|
{
|
||||||
|
Debug.Log($"Awake, [{m_spacing}]");
|
||||||
|
}
|
||||||
|
|
||||||
public override void ModifyMesh(VertexHelper vh)
|
public override void ModifyMesh(VertexHelper vh)
|
||||||
{
|
{
|
||||||
if (! IsActive()) return;
|
if (! IsActive()) return;
|
||||||
|
@ -81,11 +98,8 @@ namespace UnityEngine.UI.Extensions
|
||||||
List<UIVertex> verts = new List<UIVertex>();
|
List<UIVertex> verts = new List<UIVertex>();
|
||||||
vh.GetUIVertexStream(verts);
|
vh.GetUIVertexStream(verts);
|
||||||
|
|
||||||
#if UNITY_2022_1_OR_NEWER
|
|
||||||
var text = GetComponent<TMPro.TMP_Text>();
|
|
||||||
#else
|
|
||||||
var text = GetComponent<Text>();
|
var text = GetComponent<Text>();
|
||||||
#endif
|
|
||||||
if (text == null)
|
if (text == null)
|
||||||
{
|
{
|
||||||
Debug.LogWarning("LetterSpacing: Missing Text component");
|
Debug.LogWarning("LetterSpacing: Missing Text component");
|
||||||
|
@ -98,28 +112,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
float alignmentFactor = 0;
|
float alignmentFactor = 0;
|
||||||
int glyphIdx = 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)
|
switch (text.alignment)
|
||||||
{
|
{
|
||||||
case TextAnchor.LowerLeft:
|
case TextAnchor.LowerLeft:
|
||||||
|
@ -140,8 +132,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
alignmentFactor = 1f;
|
alignmentFactor = 1f;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
for (int lineIdx=0; lineIdx < lines.Length; lineIdx++)
|
for (int lineIdx=0; lineIdx < lines.Length; lineIdx++)
|
||||||
{
|
{
|
||||||
string line = lines[lineIdx];
|
string line = lines[lineIdx];
|
||||||
|
@ -192,4 +183,5 @@ namespace UnityEngine.UI.Extensions
|
||||||
vh.AddUIVertexTriangleStream(verts);
|
vh.AddUIVertexTriangleStream(verts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
|
}
|
|
@ -1,5 +1,3 @@
|
||||||
/// Credit herbst / derived from LetterSpacing by Deeperbeige
|
|
||||||
/// Sourced from - http://forum.unity3d.com/threads/adjustable-character-spacing-free-script.288277/
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Produces an simple mono-spacing effect on UI Text components.
|
Produces an simple mono-spacing effect on UI Text components.
|
||||||
|
@ -40,17 +38,27 @@ 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.
|
break down entirely, but it doesn't really do what you'd want either.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
#if !UNITY_2022_1_OR_NEWER
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
/// Credit herbst / derived from LetterSpacing by Deeperbeige
|
||||||
|
/// Sourced from - http://forum.unity3d.com/threads/adjustable-character-spacing-free-script.288277/
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
[AddComponentMenu("UI/Effects/Extensions/Mono Spacing")]
|
|
||||||
#if UNITY_2022_1_OR_NEWER
|
#if UNITY_2022_1_OR_NEWER
|
||||||
[RequireComponent(typeof(TMPro.TMP_Text))]
|
[Obsolete("MonoSpacing is not supported in Unity 2022.1 or newer. Use TMPro instead.")]
|
||||||
|
public class MonoSpacing : BaseMeshEffect
|
||||||
|
{
|
||||||
|
public override void ModifyMesh(VertexHelper vh)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
[AddComponentMenu("UI/Effects/Extensions/Mono Spacing")]
|
||||||
[RequireComponent(typeof(Text))]
|
[RequireComponent(typeof(Text))]
|
||||||
#endif
|
|
||||||
[RequireComponent(typeof(RectTransform))]
|
[RequireComponent(typeof(RectTransform))]
|
||||||
///Summary
|
///Summary
|
||||||
/// Note, Vertex Count has changed in 5.2.1+, is now 6 (two tris) instead of 4 (tri strip).
|
/// Note, Vertex Count has changed in 5.2.1+, is now 6 (two tris) instead of 4 (tri strip).
|
||||||
|
@ -62,21 +70,15 @@ namespace UnityEngine.UI.Extensions
|
||||||
public bool UseHalfCharWidth = false;
|
public bool UseHalfCharWidth = false;
|
||||||
|
|
||||||
private RectTransform rectTransform;
|
private RectTransform rectTransform;
|
||||||
#if UNITY_2022_1_OR_NEWER
|
|
||||||
private TMPro.TMP_Text text;
|
|
||||||
#else
|
|
||||||
private Text text;
|
private Text text;
|
||||||
#endif
|
|
||||||
|
|
||||||
protected MonoSpacing() { }
|
protected MonoSpacing() { }
|
||||||
|
|
||||||
protected override void Awake()
|
protected override void Awake()
|
||||||
{
|
{
|
||||||
#if UNITY_2022_1_OR_NEWER
|
|
||||||
text = GetComponent<TMPro.TMP_Text>();
|
|
||||||
#else
|
|
||||||
text = GetComponent<Text>();
|
text = GetComponent<Text>();
|
||||||
#endif
|
|
||||||
if (text == null)
|
if (text == null)
|
||||||
{
|
{
|
||||||
Debug.LogWarning("MonoSpacing: Missing Text component");
|
Debug.LogWarning("MonoSpacing: Missing Text component");
|
||||||
|
@ -85,13 +87,13 @@ namespace UnityEngine.UI.Extensions
|
||||||
rectTransform = text.GetComponent<RectTransform>();
|
rectTransform = text.GetComponent<RectTransform>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
protected override void OnValidate()
|
protected override void OnValidate()
|
||||||
{
|
{
|
||||||
Spacing = m_spacing;
|
Spacing = m_spacing;
|
||||||
base.OnValidate();
|
base.OnValidate();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public float Spacing
|
public float Spacing
|
||||||
{
|
{
|
||||||
|
@ -117,28 +119,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
float alignmentFactor = 0;
|
float alignmentFactor = 0;
|
||||||
int glyphIdx = 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)
|
switch (text.alignment)
|
||||||
{
|
{
|
||||||
case TextAnchor.LowerLeft:
|
case TextAnchor.LowerLeft:
|
||||||
|
@ -159,7 +139,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
alignmentFactor = 1f;
|
alignmentFactor = 1f;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
for (int lineIdx=0; lineIdx < lines.Length; lineIdx++)
|
for (int lineIdx=0; lineIdx < lines.Length; lineIdx++)
|
||||||
{
|
{
|
||||||
string line = lines[lineIdx];
|
string line = lines[lineIdx];
|
||||||
|
@ -221,4 +201,5 @@ namespace UnityEngine.UI.Extensions
|
||||||
vh.AddUIVertexTriangleStream(verts);
|
vh.AddUIVertexTriangleStream(verts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
|
}
|
|
@ -1,12 +1,25 @@
|
||||||
|
|
||||||
|
#if !UNITY_2022_1_OR_NEWER
|
||||||
|
using System.Collections.Generic;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
/// Credit Melang, Lee Hui
|
/// Credit Melang, Lee Hui
|
||||||
/// Sourced from - http://forum.unity3d.com/members/melang.593409/
|
/// Sourced from - http://forum.unity3d.com/members/melang.593409/
|
||||||
/// GC Alloc fix - https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/pull-requests/130
|
/// GC Alloc fix - https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/pull-requests/130
|
||||||
/// NOT supported in Unity 2022
|
/// NOT supported in Unity 2022
|
||||||
|
|
||||||
#if !UNITY_2022_1_OR_NEWER
|
|
||||||
using System.Collections.Generic;
|
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
|
#if UNITY_2022_1_OR_NEWER
|
||||||
|
[Obsolete("BestFitOutline is not supported in Unity 2022.1 or newer. Use TMPro instead.")]
|
||||||
|
public class NicerOutline : BaseMeshEffect
|
||||||
|
{
|
||||||
|
public override void ModifyMesh(VertexHelper vh)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
//An outline that looks a bit nicer than the default one. It has less "holes" in the outline by drawing more copies of the effect
|
//An outline that looks a bit nicer than the default one. It has less "holes" in the outline by drawing more copies of the effect
|
||||||
[AddComponentMenu("UI/Effects/Extensions/Nicer Outline")]
|
[AddComponentMenu("UI/Effects/Extensions/Nicer Outline")]
|
||||||
public class NicerOutline : BaseMeshEffect
|
public class NicerOutline : BaseMeshEffect
|
||||||
|
@ -134,7 +147,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
start += ApplyText(m_Verts, vh, start);
|
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;
|
int length = verts.Count;
|
||||||
for (int i = 0; i < length; ++i)
|
for (int i = 0; i < length; ++i)
|
||||||
|
@ -194,5 +207,5 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
#endif
|
}
|
|
@ -16,6 +16,9 @@ namespace UnityEngine.UI.Extensions
|
||||||
[Tooltip("Enables 3d rotation for the particles")]
|
[Tooltip("Enables 3d rotation for the particles")]
|
||||||
public bool use3dRotation = false;
|
public bool use3dRotation = false;
|
||||||
|
|
||||||
|
[Tooltip("Enables using Renderer.lengthScale parameter")]
|
||||||
|
public bool _useLengthScale = false;
|
||||||
|
|
||||||
private Transform _transform;
|
private Transform _transform;
|
||||||
private ParticleSystem pSystem;
|
private ParticleSystem pSystem;
|
||||||
private ParticleSystem.Particle[] particles;
|
private ParticleSystem.Particle[] particles;
|
||||||
|
@ -91,7 +94,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
pRenderer = pSystem.GetComponent<ParticleSystemRenderer>();
|
pRenderer = pSystem.GetComponent<ParticleSystemRenderer>();
|
||||||
if (pRenderer != null)
|
if (pRenderer != null)
|
||||||
pRenderer.enabled = false;
|
pRenderer.enabled = false;
|
||||||
|
|
||||||
if (material == null)
|
if (material == null)
|
||||||
{
|
{
|
||||||
var foundShader = ShaderLibrary.GetShaderInstance("UI Extensions/Particles/Additive");
|
var foundShader = ShaderLibrary.GetShaderInstance("UI Extensions/Particles/Additive");
|
||||||
|
@ -183,8 +186,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
#else
|
#else
|
||||||
Vector2 position = (pSystem.simulationSpace == ParticleSystemSimulationSpace.Local ? particle.position : _transform.InverseTransformPoint(particle.position));
|
Vector2 position = (pSystem.simulationSpace == ParticleSystemSimulationSpace.Local ? particle.position : _transform.InverseTransformPoint(particle.position));
|
||||||
#endif
|
#endif
|
||||||
float rotation = -particle.rotation * Mathf.Deg2Rad;
|
|
||||||
float rotation90 = rotation + Mathf.PI / 2;
|
|
||||||
Color32 color = particle.GetCurrentColor(pSystem);
|
Color32 color = particle.GetCurrentColor(pSystem);
|
||||||
float size = particle.GetCurrentSize(pSystem) * 0.5f;
|
float size = particle.GetCurrentSize(pSystem) * 0.5f;
|
||||||
|
|
||||||
|
@ -280,13 +281,29 @@ namespace UnityEngine.UI.Extensions
|
||||||
_quad[3].color = color;
|
_quad[3].color = color;
|
||||||
_quad[3].uv0 = temp;
|
_quad[3].uv0 = temp;
|
||||||
|
|
||||||
|
|
||||||
|
float rotation = -particle.rotation * Mathf.Deg2Rad;
|
||||||
|
var lengthScale = pRenderer.lengthScale;
|
||||||
|
if (_useLengthScale)
|
||||||
|
{
|
||||||
|
// rotate towards velocity
|
||||||
|
var normalizedVelocity = particle.velocity.normalized;
|
||||||
|
rotation = Mathf.Atan2(normalizedVelocity.y, normalizedVelocity.x);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lengthScale = 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float rotation90 = rotation + Mathf.PI / 2;
|
||||||
|
|
||||||
if (rotation == 0)
|
if (rotation == 0)
|
||||||
{
|
{
|
||||||
// no rotation
|
// no rotation
|
||||||
corner1.x = position.x - size;
|
corner1.x = position.x - size;
|
||||||
corner1.y = position.y - size;
|
corner1.y = position.y - size * lengthScale;
|
||||||
corner2.x = position.x + size;
|
corner2.x = position.x + size;
|
||||||
corner2.y = position.y + size;
|
corner2.y = position.y + size * lengthScale;
|
||||||
|
|
||||||
temp.x = corner1.x;
|
temp.x = corner1.x;
|
||||||
temp.y = corner1.y;
|
temp.y = corner1.y;
|
||||||
|
@ -339,7 +356,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// apply rotation
|
// apply rotation
|
||||||
Vector2 right = new Vector2(Mathf.Cos(rotation), Mathf.Sin(rotation)) * size;
|
Vector2 right = new Vector2(Mathf.Cos(rotation), Mathf.Sin(rotation)) * size * lengthScale;
|
||||||
Vector2 up = new Vector2(Mathf.Cos(rotation90), Mathf.Sin(rotation90)) * size;
|
Vector2 up = new Vector2(Mathf.Cos(rotation90), Mathf.Sin(rotation90)) * size;
|
||||||
|
|
||||||
_quad[0].position = position - right - up;
|
_quad[0].position = position - right - up;
|
||||||
|
|
|
@ -223,12 +223,21 @@ namespace UnityEngine.UI.Extensions
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// used for changing / updating between screen resolutions
|
/// used for changing / updating between screen resolutions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void UpdateLayout()
|
public void UpdateLayout(bool resetPositionToStart = false)
|
||||||
{
|
{
|
||||||
_lerp = false;
|
_lerp = false;
|
||||||
DistributePages();
|
DistributePages();
|
||||||
|
|
||||||
|
if (resetPositionToStart)
|
||||||
|
{
|
||||||
|
_currentPage = StartingScreen;
|
||||||
|
}
|
||||||
|
|
||||||
if (MaskArea)
|
if (MaskArea)
|
||||||
|
{
|
||||||
UpdateVisible();
|
UpdateVisible();
|
||||||
|
}
|
||||||
|
|
||||||
SetScrollContainerPosition();
|
SetScrollContainerPosition();
|
||||||
OnCurrentScreenChange(_currentPage);
|
OnCurrentScreenChange(_currentPage);
|
||||||
}
|
}
|
||||||
|
@ -328,6 +337,10 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (distance == 0)
|
||||||
|
{
|
||||||
|
EndScreenChange();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,11 +218,21 @@ namespace UnityEngine.UI.Extensions
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// used for changing / updating between screen resolutions
|
/// used for changing / updating between screen resolutions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void UpdateLayout()
|
public void UpdateLayout(bool resetPositionToStart = false)
|
||||||
{
|
{
|
||||||
_lerp = false;
|
_lerp = false;
|
||||||
DistributePages();
|
DistributePages();
|
||||||
if (MaskArea) UpdateVisible();
|
|
||||||
|
if (resetPositionToStart)
|
||||||
|
{
|
||||||
|
_currentPage = StartingScreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MaskArea)
|
||||||
|
{
|
||||||
|
UpdateVisible();
|
||||||
|
}
|
||||||
|
|
||||||
SetScrollContainerPosition();
|
SetScrollContainerPosition();
|
||||||
OnCurrentScreenChange(_currentPage);
|
OnCurrentScreenChange(_currentPage);
|
||||||
}
|
}
|
||||||
|
@ -321,6 +331,10 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (distance == 0)
|
||||||
|
{
|
||||||
|
EndScreenChange();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -287,7 +287,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
PopulateMesh (vh, m_points);
|
PopulateMesh (vh, m_points);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (m_segments != null && m_segments.Count > 0) {
|
if (m_segments != null && m_segments.Count > 0) {
|
||||||
GeneratedUVs ();
|
GeneratedUVs ();
|
||||||
vh.Clear ();
|
vh.Clear ();
|
||||||
|
|
||||||
|
@ -296,8 +296,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
PopulateMesh (vh, pointsToDraw);
|
PopulateMesh (vh, pointsToDraw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private UIVertex[] CreateLineCap(Vector2 start, Vector2 end, SegmentType type)
|
private UIVertex[] CreateLineCap(Vector2 start, Vector2 end, SegmentType type)
|
||||||
|
@ -419,7 +417,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
return Segments[segmentIndex - 1][index - 1];
|
return Segments[segmentIndex - 1][index - 1];
|
||||||
}
|
}
|
||||||
else if (Segments.Count > 0)
|
else if (Segments?.Count > 0)
|
||||||
{
|
{
|
||||||
var segmentIndexCount = 0;
|
var segmentIndexCount = 0;
|
||||||
var indexCount = index;
|
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>
|
/// <summary>
|
||||||
/// Get the Vector2 position of a line within a specific segment
|
/// Get the Vector2 position of a line within a specific segment
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -478,6 +499,10 @@ namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
m_points = new Vector2[1];
|
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.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,13 @@ namespace UnityEngine.UI.Extensions
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (instance == null)
|
if (instance == null)
|
||||||
|
{
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
instance = GameObject.FindFirstObjectByType<BoundTooltipItem>();
|
||||||
|
#else
|
||||||
instance = GameObject.FindObjectOfType<BoundTooltipItem>();
|
instance = GameObject.FindObjectOfType<BoundTooltipItem>();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,13 @@ namespace UnityEngine.UI.Extensions
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (instance == null)
|
if (instance == null)
|
||||||
|
{
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
instance = FindFirstObjectByType<ToolTip>();
|
||||||
|
#else
|
||||||
instance = FindObjectOfType<ToolTip>();
|
instance = FindObjectOfType<ToolTip>();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,10 @@ namespace UnityEngine.UI.Extensions
|
||||||
bool updateLine = false;
|
bool updateLine = false;
|
||||||
for (int i = 0; i < transforms.Length; i++)
|
for (int i = 0; i < transforms.Length; i++)
|
||||||
{
|
{
|
||||||
|
if (transforms[i] == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!updateLine && previousPositions[i] != transforms[i].position)
|
if (!updateLine && previousPositions[i] != transforms[i].position)
|
||||||
{
|
{
|
||||||
updateLine = true;
|
updateLine = true;
|
||||||
|
@ -60,6 +64,10 @@ namespace UnityEngine.UI.Extensions
|
||||||
// First, convert the pivot to worldspace
|
// First, convert the pivot to worldspace
|
||||||
for (int i = 0; i < transforms.Length; i++)
|
for (int i = 0; i < transforms.Length; i++)
|
||||||
{
|
{
|
||||||
|
if (transforms[i] == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
worldSpaces[i] = transforms[i].TransformPoint(thisPivot);
|
worldSpaces[i] = transforms[i].TransformPoint(thisPivot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,6 +91,10 @@ namespace UnityEngine.UI.Extensions
|
||||||
previousPositions = new Vector3[transforms.Length];
|
previousPositions = new Vector3[transforms.Length];
|
||||||
for (int i = 0; i < transforms.Length; i++)
|
for (int i = 0; i < transforms.Length; i++)
|
||||||
{
|
{
|
||||||
|
if (transforms[i] == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
previousPositions[i] = transforms[i].position;
|
previousPositions[i] = transforms[i].position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "com.unity.uiextensions",
|
"name": "com.unity.uiextensions",
|
||||||
"displayName": "Unity UI Extensions",
|
"displayName": "Unity UI Extensions",
|
||||||
"version": "2.3.2-pre.2",
|
"version": "2.3.2",
|
||||||
"description": "An extension project for the Unity3D UI system, all crafted and contributed by the awesome Unity community",
|
"description": "An extension project for the Unity3D UI system, all crafted and contributed by the awesome Unity community",
|
||||||
"author": "Simon darkside Jackson <@SimonDarksideJ>",
|
"author": "Simon darkside Jackson <@SimonDarksideJ>",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
|
|
Loading…
Reference in New Issue