Compare commits

..

3 Commits

Author SHA1 Message Date
semantic-release-bot
93e38622ee chore(release): 4.13.2 [skip ci]
## [4.13.2](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v4.13.1...v4.13.2) (2026-06-29)

### Bug Fixes

* support "disable domain reload" on Unity 6.6 or later ([dc12088](dc120884f6))
2026-06-29 05:12:05 +00:00
mob-sakai
c9a97e41d5 chore: update wf 2026-06-28 20:44:59 +09:00
mob-sakai
dc120884f6 fix: support "disable domain reload" on Unity 6.6 or later 2026-06-28 13:28:24 +09:00
14 changed files with 143 additions and 207 deletions

View File

@@ -1,28 +0,0 @@
name: 🚀 Deploy with Zip
on:
workflow_dispatch:
inputs:
zip:
description: "The url to the zip file"
required: true
jobs:
deploy:
name: 🚀 Deploy
runs-on: ubuntu-latest
permissions:
pages: write
id-token: write
steps:
- name: 📦 Download zip file To '_site'
run: |
curl -L ${{ github.event.inputs.zip }} -o _site.zip
unzip _site.zip -d _site
find _site -name __MACOSX | xargs rm -rf
- name: 📦 Upload '_site'
uses: actions/upload-pages-artifact@v5
- name: 🚀 Deploy To GitHub Pages
uses: actions/deploy-pages@v5

View File

@@ -5,9 +5,8 @@ on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: branches:
- preview - release
- main - release-*
- v*.x
tags-ignore: tags-ignore:
- "**" - "**"
@@ -23,9 +22,12 @@ jobs:
channel: ${{ steps.release.outputs.new_release_channel }} channel: ${{ steps.release.outputs.new_release_channel }}
released: ${{ steps.release.outputs.new_release_published }} released: ${{ steps.release.outputs.new_release_published }}
tag: ${{ steps.release.outputs.new_release_git_tag }} tag: ${{ steps.release.outputs.new_release_git_tag }}
version: ${{ steps.release.outputs.new_release_version }}
merge_to: ${{ steps.summary.outputs.merge_to }}
split_to: ${{ steps.summary.outputs.split_to }}
steps: steps:
- name: 🚚 Checkout (${{ github.ref_name }}) - name: 🚚 Checkout (${{ github.ref_name }})
uses: actions/checkout@v6 uses: actions/checkout@v7
- name: 🔖 Run semantic release - name: 🔖 Run semantic release
uses: cycjimmy/semantic-release-action@v6 uses: cycjimmy/semantic-release-action@v6
@@ -38,7 +40,62 @@ jobs:
env: env:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
- run: | - id: summary
run: |
echo "🔖 New release published: '${{ steps.release.outputs.new_release_published }}'" | tee -a $GITHUB_STEP_SUMMARY echo "🔖 New release published: '${{ steps.release.outputs.new_release_published }}'" | tee -a $GITHUB_STEP_SUMMARY
echo "🔖 New release version: '${{ steps.release.outputs.new_release_version }}'" | tee -a $GITHUB_STEP_SUMMARY
echo "🔖 New release channel: '${{ steps.release.outputs.new_release_channel }}'" | tee -a $GITHUB_STEP_SUMMARY echo "🔖 New release channel: '${{ steps.release.outputs.new_release_channel }}'" | tee -a $GITHUB_STEP_SUMMARY
echo "🔖 New release git tag: '${{ steps.release.outputs.new_release_git_tag }}'" | tee -a $GITHUB_STEP_SUMMARY echo "🔖 New release git tag: '${{ steps.release.outputs.new_release_git_tag }}'" | tee -a $GITHUB_STEP_SUMMARY
if [ '${{ steps.release.outputs.new_release_published }}' = 'false' ]; then
echo "No new release published." | tee -a $GITHUB_STEP_SUMMARY
elif [ '${{ github.ref_name }}' = 'release' ]; then
echo "merge_to=develop" | tee -a $GITHUB_OUTPUT $GITHUB_STEP_SUMMARY
echo "split_to=main" | tee -a $GITHUB_OUTPUT $GITHUB_STEP_SUMMARY
else
channel=$(echo ${{ github.ref_name }} | sed 's/^release-//')
echo "merge_to=develop-${channel}" | tee -a $GITHUB_OUTPUT $GITHUB_STEP_SUMMARY
echo "split_to=${channel}" | tee -a $GITHUB_OUTPUT $GITHUB_STEP_SUMMARY
fi
merge-to:
if: needs.release.outputs.merge_to != ''
needs: release
name: 🔀 Merge to ${{ needs.release.outputs.merge_to }}
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: 🚚 Checkout (${{ needs.release.outputs.merge_to }})
uses: actions/checkout@v7
with:
ref: ${{ needs.release.outputs.merge_to }}
fetch-depth: 0
- name: 🔀 Merge '${{ needs.release.outputs.tag }}' into '${{ needs.release.outputs.merge_to }}'
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git merge ${{ needs.release.outputs.tag }}
git push origin ${{ needs.release.outputs.merge_to }}
split-to:
if: needs.release.outputs.split_to != ''
needs: release
name: 🔀 Split package to ${{ needs.release.outputs.split_to }}
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: 🚚 Checkout (${{ needs.release.outputs.tag }})
uses: actions/checkout@v7
with:
ref: ${{ needs.release.outputs.tag }}
fetch-depth: 0
- name: 🔀 Split subtree 'Packages/src' to '${{ needs.release.outputs.split_to }}'
run: |
split_to=${{ needs.release.outputs.split_to }}
git branch $split_to origin/$split_to
git subtree split --prefix=Packages/src --branch $split_to
git tag ${{ needs.release.outputs.version }} $split_to
git push origin ${{ needs.release.outputs.version }} $split_to:$split_to

View File

@@ -7,9 +7,9 @@ run-name: 🧪 Test URP (${{ github.event.pull_request.title || github.ref_name
env: env:
# MINIMUM_VERSION: The minimum version of Unity. # MINIMUM_VERSION: The minimum version of Unity.
MINIMUM_VERSION: 6000.1 MINIMUM_VERSION: 6000.0
# EXCLUDE_FILTER: The excluded versions of Unity. # EXCLUDE_FILTER: The excluded versions of Unity.
EXCLUDE_FILTER: '(2020.2.0|2021.1|2023.3)' EXCLUDE_FILTER: "(2017|2018|2023.3)"
PROJECT_PATH: ParticleEffectForUGUI_URP PROJECT_PATH: ParticleEffectForUGUI_URP
on: on:
@@ -85,10 +85,10 @@ jobs:
unityVersion: ${{ fromJson(needs.setup.outputs.unityVersions) }} unityVersion: ${{ fromJson(needs.setup.outputs.unityVersions) }}
steps: steps:
- name: 🚚 Checkout ($${{ github.ref }}) - name: 🚚 Checkout ($${{ github.ref }})
uses: actions/checkout@v6 uses: actions/checkout@v7
- name: 📥 Cache library - name: 📥 Cache library
uses: actions/cache@v5 uses: actions/cache@v6
with: with:
path: ${{ env.PROJECT_PATH }}/Library path: ${{ env.PROJECT_PATH }}/Library
key: ${{ env.PROJECT_PATH }}-Library-${{ matrix.unityVersion }}-${{ github.event.pull_request.head.sha || github.sha }} key: ${{ env.PROJECT_PATH }}-Library-${{ matrix.unityVersion }}-${{ github.event.pull_request.head.sha || github.sha }}
@@ -97,7 +97,7 @@ jobs:
${{ env.PROJECT_PATH }}-Library- ${{ env.PROJECT_PATH }}-Library-
- name: 🛠️ Build Unity Project (Test) - name: 🛠️ Build Unity Project (Test)
uses: game-ci/unity-builder@v5 uses: game-ci/unity-builder@main
timeout-minutes: 45 timeout-minutes: 45
with: with:
customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }}
@@ -111,7 +111,7 @@ jobs:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
# - name: 🧪 Run tests # - name: 🧪 Run tests
# uses: game-ci/unity-test-runner@v4 # uses: game-ci/unity-test-runner@main
# timeout-minutes: 45 # timeout-minutes: 45
# with: # with:
# customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} # customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }}

View File

@@ -7,7 +7,7 @@ run-name: 🧪 Test (${{ github.event.pull_request.title || github.ref_name }})
env: env:
# MINIMUM_VERSION: The minimum version of Unity. # MINIMUM_VERSION: The minimum version of Unity.
MINIMUM_VERSION: 2020.3 MINIMUM_VERSION: 2019.4
# EXCLUDE_FILTER: The excluded versions of Unity. # EXCLUDE_FILTER: The excluded versions of Unity.
EXCLUDE_FILTER: "(2017|2018|2023.3)" EXCLUDE_FILTER: "(2017|2018|2023.3)"
PROJECT_PATH: . PROJECT_PATH: .
@@ -45,7 +45,8 @@ jobs:
steps: steps:
- name: 🔑 Secrets check - name: 🔑 Secrets check
run: | run: |
if [ -z "$UNITY_EMAIL" ] || [ -z "$UNITY_PASSWORD" ] || [ -z "UNITY_LICENSE" ]; then echo "Checking secrets for ${{ github.actor }} ..."
if [ -z "$UNITY_EMAIL" ] || [ -z "$UNITY_PASSWORD" ] || [ -z "$UNITY_LICENSE" ]; then
echo "Error: UNITY_EMAIL, UNITY_PASSWORD, and UNITY_LICENSE secrets must be set." | tee -a $GITHUB_STEP_SUMMARY >&2 echo "Error: UNITY_EMAIL, UNITY_PASSWORD, and UNITY_LICENSE secrets must be set." | tee -a $GITHUB_STEP_SUMMARY >&2
echo "Error: See https://game.ci/docs/github/test-runner#basic-setup" | tee -a $GITHUB_STEP_SUMMARY >&2 echo "Error: See https://game.ci/docs/github/test-runner#basic-setup" | tee -a $GITHUB_STEP_SUMMARY >&2
echo "Error: Set the secrets at ${{ github.server_url }}/${{ github.repository }}/settings/secrets/actions" | tee -a $GITHUB_STEP_SUMMARY >&2 echo "Error: Set the secrets at ${{ github.server_url }}/${{ github.repository }}/settings/secrets/actions" | tee -a $GITHUB_STEP_SUMMARY >&2
@@ -84,10 +85,10 @@ jobs:
unityVersion: ${{ fromJson(needs.setup.outputs.unityVersions) }} unityVersion: ${{ fromJson(needs.setup.outputs.unityVersions) }}
steps: steps:
- name: 🚚 Checkout ($${{ github.ref }}) - name: 🚚 Checkout ($${{ github.ref }})
uses: actions/checkout@v6 uses: actions/checkout@v7
- name: 📥 Cache library - name: 📥 Cache library
uses: actions/cache@v5 uses: actions/cache@v6
with: with:
path: ${{ env.PROJECT_PATH }}/Library path: ${{ env.PROJECT_PATH }}/Library
key: ${{ env.PROJECT_PATH }}-Library-${{ matrix.unityVersion }}-${{ github.event.pull_request.head.sha || github.sha }} key: ${{ env.PROJECT_PATH }}-Library-${{ matrix.unityVersion }}-${{ github.event.pull_request.head.sha || github.sha }}
@@ -96,7 +97,7 @@ jobs:
${{ env.PROJECT_PATH }}-Library- ${{ env.PROJECT_PATH }}-Library-
- name: 🛠️ Build Unity Project (Test) - name: 🛠️ Build Unity Project (Test)
uses: game-ci/unity-builder@v5 uses: game-ci/unity-builder@main
timeout-minutes: 45 timeout-minutes: 45
with: with:
customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }}
@@ -110,7 +111,7 @@ jobs:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
- name: 🧪 Run tests - name: 🧪 Run tests
uses: game-ci/unity-test-runner@v4 uses: game-ci/unity-test-runner@main
timeout-minutes: 45 timeout-minutes: 45
with: with:
customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }}

View File

@@ -1,13 +1,12 @@
{ {
"branches": [ "branches": [
"main", "release",
"[0-9]+.x", "release-4.x",
{ {
"name": "preview", "name": "release-preview",
"prerelease": true "prerelease": "preview"
} }
], ],
"tagFormat": "${version}",
"plugins": [ "plugins": [
"@semantic-release/commit-analyzer", "@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator", "@semantic-release/release-notes-generator",

View File

@@ -1,31 +1,9 @@
# [5.0.0-preview.19](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/5.0.0-preview.18...5.0.0-preview.19) (2026-06-28) ## [4.13.2](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v4.13.1...v4.13.2) (2026-06-29)
* feat!: optimize camera settings in overlay render mode ([dc16e64](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/dc16e6458e855c451ab73e9c4cd418ef65f8b350))
### BREAKING CHANGES
* the default value of `UIParticleProjectSettings.defaultViewSizeForBaking` has been changed from `10` to `1000`. In some cases, the appearance of certain effects may change.
# [5.0.0-preview.18](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/5.0.0-preview.17...5.0.0-preview.18) (2026-06-26)
### Bug Fixes ### Bug Fixes
* `ParticleSystemPreviewer` is no longer included in build ([bad976c](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/bad976cf01180bdabf5cd2f1760e069afdcb644a)) * support "disable domain reload" on Unity 6.6 or later ([dc12088](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/dc120884f68a5fee1775d039fc7bca0ee0e404b5))
* `UI/Additive` shader does not support RectMask2D softness. ([83145d3](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/83145d3a6ede3831d1f7c49afde6ef7d8a498d21))
* add support for Unity 6.7 ([26fd3da](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/26fd3da20b6b07f7a26df662358c53757a7cc5f5)), closes [#408](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/408)
* rename `UIParticleProjectSettings.enableLinearToGamma` to `autoColorCorrection` ([10f82a8](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/10f82a8579a2d055f897e7a8d6f3b5ba1fc43ae8))
* Support for skipping "reload domain" ([b7bb112](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/b7bb1124f6921ebca1b48991462637767b95e504)), closes [#406](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/406)
* there is a compilation error in Unity 2019.2 or earlier ([c327632](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/c327632e1eb203351ba1a1087a19eb7838c22530)), closes [#407](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/407)
### Features
* add fields located outside the `Properties` block in the shader as `Animatable Properties` ([ea2fcfd](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/ea2fcfd8099a24b92624d34600beb519fb9d2b38)), closes [#399](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/399)
* preview the ParticleSystem playback when selecting a UIParticle in the Editor ([108bcfb](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/108bcfbd246960dc730546dc334424cf2e17bfd4))
* project-wide default view size for baking ([8e0ff10](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/8e0ff10c7344d9f53d2f4f096ddeb7392b67f930)), closes [#360](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/360)
## [4.13.1](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v4.13.0...v4.13.1) (2026-06-26) ## [4.13.1](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v4.13.0...v4.13.1) (2026-06-26)

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using UnityEditor; using UnityEditor;
using UnityEditor.UI;
using UnityEditorInternal; using UnityEditorInternal;
using UnityEngine; using UnityEngine;
using UnityEngine.Profiling; using UnityEngine.Profiling;
@@ -25,7 +26,7 @@ namespace Coffee.UIExtensions
{ {
[CustomEditor(typeof(UIParticle))] [CustomEditor(typeof(UIParticle))]
[CanEditMultipleObjects] [CanEditMultipleObjects]
internal class UIParticleEditor : Editor internal class UIParticleEditor : GraphicEditor
{ {
internal class State : ScriptableSingleton<State> internal class State : ScriptableSingleton<State>
{ {
@@ -88,8 +89,10 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// This function is called when the object becomes enabled and active. /// This function is called when the object becomes enabled and active.
/// </summary> /// </summary>
private void OnEnable() protected override void OnEnable()
{ {
base.OnEnable();
_maskable = serializedObject.FindProperty("m_Maskable"); _maskable = serializedObject.FindProperty("m_Maskable");
_scale3D = serializedObject.FindProperty("m_Scale3D"); _scale3D = serializedObject.FindProperty("m_Scale3D");
_animatableProperties = serializedObject.FindProperty("m_AnimatableProperties"); _animatableProperties = serializedObject.FindProperty("m_AnimatableProperties");
@@ -485,11 +488,9 @@ namespace Coffee.UIExtensions
{ {
if (!p || (ignoreCurrent && target == p)) return; if (!p || (ignoreCurrent && target == p)) return;
Misc.DestroyImmediate(p); var cr = p.canvasRenderer;
if (p.TryGetComponent<CanvasRenderer>(out var cr)) DestroyImmediate(p);
{ DestroyImmediate(cr);
Misc.DestroyImmediate(cr);
}
#if UNITY_2018_3_OR_NEWER #if UNITY_2018_3_OR_NEWER
var stage = PrefabStageUtility.GetCurrentPrefabStage(); var stage = PrefabStageUtility.GetCurrentPrefabStage();

View File

@@ -1,9 +1,9 @@
# <img alt="UIParticleIcon" src="https://github.com/mob-sakai/ParticleEffectForUGUI/assets/12690315/d76e105e-a840-4f61-a1f6-8cf311c0812d" width="26"/> UI Particle v5 <!-- omit in toc --> # <img alt="UIParticleIcon" src="https://github.com/mob-sakai/ParticleEffectForUGUI/assets/12690315/d76e105e-a840-4f61-a1f6-8cf311c0812d" width="26"/> Particle Effect For UGUI (UI Particle) <!-- omit in toc -->
[![](https://img.shields.io/npm/v/com.coffee.ui-particle?label=openupm&registry_uri=https://package.openupm.com)](https://openupm.com/packages/com.coffee.ui-particle/) [![](https://img.shields.io/npm/v/com.coffee.ui-particle?label=openupm&registry_uri=https://package.openupm.com)](https://openupm.com/packages/com.coffee.ui-particle/)
[![](https://img.shields.io/github/v/release/mob-sakai/ParticleEffectForUGUI)](https://github.com/mob-sakai/ParticleEffectForUGUI/releases) [![](https://img.shields.io/github/v/release/mob-sakai/ParticleEffectForUGUI)](https://github.com/mob-sakai/ParticleEffectForUGUI/releases)
[![](https://img.shields.io/github/license/mob-sakai/ParticleEffectForUGUI.svg)](https://github.com/mob-sakai/ParticleEffectForUGUI/blob/main/LICENSE.md) [![](https://img.shields.io/github/license/mob-sakai/ParticleEffectForUGUI.svg)](https://github.com/mob-sakai/ParticleEffectForUGUI/blob/main/LICENSE.md)
![](https://img.shields.io/badge/Unity-2019.3+-57b9d3.svg?style=flat&logo=unity) ![](https://img.shields.io/badge/Unity-2018.2+-57b9d3.svg?style=flat&logo=unity)
![](https://img.shields.io/badge/uGUI_2.0_Ready-57b9d3.svg?style=flat) ![](https://img.shields.io/badge/uGUI_2.0_Ready-57b9d3.svg?style=flat)
![](https://img.shields.io/badge/UPR%2FHDPR_Ready-57b9d3.svg?style=flat) ![](https://img.shields.io/badge/UPR%2FHDPR_Ready-57b9d3.svg?style=flat)
![](https://github.com/mob-sakai/ParticleEffectForUGUI/actions/workflows/test.yml/badge.svg?branch=develop) ![](https://github.com/mob-sakai/ParticleEffectForUGUI/actions/workflows/test.yml/badge.svg?branch=develop)
@@ -11,7 +11,7 @@
[![](https://img.shields.io/github/watchers/mob-sakai/ParticleEffectForUGUI.svg?style=social&label=Watch)](https://github.com/mob-sakai/ParticleEffectForUGUI/subscription) [![](https://img.shields.io/github/watchers/mob-sakai/ParticleEffectForUGUI.svg?style=social&label=Watch)](https://github.com/mob-sakai/ParticleEffectForUGUI/subscription)
[![](https://img.shields.io/twitter/follow/mob_sakai.svg?label=Follow&style=social)](https://twitter.com/intent/follow?screen_name=mob_sakai) [![](https://img.shields.io/twitter/follow/mob_sakai.svg?label=Follow&style=social)](https://twitter.com/intent/follow?screen_name=mob_sakai)
<< [📝 Description](#-description-) | [📌 Key Features](#-key-features) | [🎮 Demo](#-demo) | [⚙ Installation](#-installation) | [🔄 Upgrading to 5.x](#-upgrading-from-3x4x-to-5x) | [🚀 Usage](#-usage) | [🛠 Development Note](#-development-note) | [🤝 Contributing](#-contributing) >> << [📝 Description](#-description-) | [📌 Key Features](#-key-features) | [🎮 Demo](#-demo) | [⚙ Installation](#-installation) | [🚀 Usage](#-usage) | [🛠 Development Note](#-development-note) | [🤝 Contributing](#-contributing) >>
## 📝 Description <!-- omit in toc --> ## 📝 Description <!-- omit in toc -->
@@ -26,9 +26,7 @@ You can render, mask, and sort your `ParticleSystems` for UI without the need fo
- [Install via OpenUPM](#install-via-openupm) - [Install via OpenUPM](#install-via-openupm)
- [Install via UPM (with Package Manager UI)](#install-via-upm-with-package-manager-ui) - [Install via UPM (with Package Manager UI)](#install-via-upm-with-package-manager-ui)
- [Install via UPM (Manually)](#install-via-upm-manually) - [Install via UPM (Manually)](#install-via-upm-manually)
- [Install as Embedded Package](#install-as-embedded-package) - [Install as Embedded Package](#install-as-embedded-package)
- [🔄 Upgrading from v3/v4 to v5](#-upgrading-from-v3v4-to-v5)
- [Breaking Changes](#breaking-changes)
- [🚀 Usage](#-usage) - [🚀 Usage](#-usage)
- [Component: UIParticle](#component-uiparticle) - [Component: UIParticle](#component-uiparticle)
- [Basic Usage](#basic-usage) - [Basic Usage](#basic-usage)
@@ -107,7 +105,7 @@ You can render, mask, and sort your `ParticleSystems` for UI without the need fo
## ⚙ Installation ## ⚙ Installation
_This package requires **Unity 2019.3 or later**._ _This package requires **Unity 2018.3 or later**._
#### Install via OpenUPM #### Install via OpenUPM
@@ -119,16 +117,16 @@ _This package requires **Unity 2019.3 or later**._
``` ```
- To update the package, use Package Manager UI (`Window > Package Manager`) or run the following command with `@{version}`: - To update the package, use Package Manager UI (`Window > Package Manager`) or run the following command with `@{version}`:
``` ```
openupm add com.coffee.ui-particle@5.0.0 openupm add com.coffee.ui-particle@4.13.0
``` ```
#### Install via UPM (with Package Manager UI) #### Install via UPM (with Package Manager UI)
- Click `Window > Package Manager` to open Package Manager UI. - Click `Window > Package Manager` to open Package Manager UI.
- Click `+ > Add package from git URL...` and input the repository URL: `https://github.com/mob-sakai/ParticleEffectForUGUI.git?path=Packages/src` - Click `+ > Add package from git URL...` and input the repository URL: `https://github.com/mob-sakai/ParticleEffectForUGUI.git`
![](https://github.com/user-attachments/assets/f88f47ad-c606-44bd-9e86-ee3f72eac548) ![](https://github.com/user-attachments/assets/f88f47ad-c606-44bd-9e86-ee3f72eac548)
- To update the package, change suffix `#{version}` to the target version. - To update the package, change suffix `#{version}` to the target version.
- e.g. `https://github.com/mob-sakai/ParticleEffectForUGUI.git?path=Packages/src#5.0.0` - e.g. `https://github.com/mob-sakai/ParticleEffectForUGUI.git#4.13.0`
#### Install via UPM (Manually) #### Install via UPM (Manually)
@@ -136,42 +134,22 @@ _This package requires **Unity 2019.3 or later**._
```json ```json
{ {
"dependencies": { "dependencies": {
"com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git?path=Packages/src", "com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git",
... ...
} }
} }
``` ```
- To update the package, change suffix `#{version}` to the target version. - To update the package, change suffix `#{version}` to the target version.
- e.g. `"com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git?path=Packages/src#5.0.0",` - e.g. `"com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git#4.13.0",`
### Install as Embedded Package #### Install as Embedded Package
1. Download the `Source code (zip)` file from [Releases](https://github.com/mob-sakai/ParticleEffectForUGUI/releases) and 1. Download a source code zip file from [Releases](https://github.com/mob-sakai/ParticleEffectForUGUI/releases) and extract it.
extract it. 2. Place it in your project's `Packages` directory.
2. Move the `<extracted_dir>/Packages/src` directory into your project's `Packages` directory. ![](https://github.com/mob-sakai/mob-sakai/assets/12690315/0b7484b4-5fca-43b0-a9ef-e5dbd99bcdb4)
![](https://github.com/user-attachments/assets/187cbcbe-5922-4ed5-acec-cf19aa17d208) - If you want to fix bugs or add features, install it as an embedded package.
- You can rename the `src` directory if needed. - To update the package, you need to re-download it and replace the contents.
- If you intend to fix bugs or add features, installing it as an embedded package is recommended.
- To update the package, re-download it and replace the existing contents.
<br><br>
## 🔄 Upgrading from v3/v4 to v5
### Breaking Changes
- The default value of `UIParticle.scale` has been changed from `10` to `1`.
- The default value of `UIParticleProjectSettings.defaultViewSizeForBaking` has been changed from `10` to `1000`.
- `UIParticle` no longer inherits from `MaskableGraphic`.
- If you are installing via git URL, add `?path=Packages/src`.
```json
// v3/v4
"com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git",
// v5
"com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git?path=Packages/src",
```
<br><br> <br><br>

View File

@@ -59,21 +59,6 @@ namespace Coffee.UIParticleInternal
s_BuildingPlayer = false; s_BuildingPlayer = false;
Initialize(); Initialize();
} }
#if UNITY_2019_3_OR_NEWER
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
private static void OnDomainReload()
{
foreach (var t in TypeCache.GetTypesDerivedFrom(typeof(PreloadedProjectSettings<>)))
{
var defaultSettings = GetDefaultSettings(t);
if (defaultSettings != null)
{
defaultSettings.OnDomainReload();
}
}
}
#endif
} }
private static void Initialize() private static void Initialize()
@@ -166,10 +151,6 @@ namespace Coffee.UIParticleInternal
protected virtual void OnInitialize() protected virtual void OnInitialize()
{ {
} }
protected virtual void OnDomainReload()
{
}
} }
internal abstract class PreloadedProjectSettingsEditor : Editor internal abstract class PreloadedProjectSettingsEditor : Editor
@@ -255,11 +236,6 @@ namespace Coffee.UIParticleInternal
break; break;
} }
} }
protected override void OnDomainReload()
{
s_Instance = null;
}
#else #else
public static T instance => s_Instance != null ? s_Instance : s_Instance = CreateInstance<T>(); public static T instance => s_Instance != null ? s_Instance : s_Instance = CreateInstance<T>();
#endif #endif

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEditor;
using UnityEngine; using UnityEngine;
namespace Coffee.UIParticleInternal namespace Coffee.UIParticleInternal
@@ -9,6 +10,7 @@ namespace Coffee.UIParticleInternal
private static readonly Dictionary<Type, IFrameCache> s_Caches = new Dictionary<Type, IFrameCache>(); private static readonly Dictionary<Type, IFrameCache> s_Caches = new Dictionary<Type, IFrameCache>();
#if UNITY_EDITOR && UNITY_2019_3_OR_NEWER #if UNITY_EDITOR && UNITY_2019_3_OR_NEWER
[InitializeOnLoadMethod]
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
#elif UNITY_EDITOR #elif UNITY_EDITOR
[InitializeOnLoadMethod] [InitializeOnLoadMethod]

View File

@@ -18,12 +18,6 @@ namespace Coffee.UIParticleInternal
private static readonly FastAction s_OnScreenSizeChangedAction = new FastAction(); private static readonly FastAction s_OnScreenSizeChangedAction = new FastAction();
private static Vector2Int s_LastScreenSize; private static Vector2Int s_LastScreenSize;
static UIExtraCallbacks()
{
Canvas.willRenderCanvases += OnBeforeCanvasRebuild;
Logger.LogMulticast(typeof(Canvas), "willRenderCanvases", message: "ctor");
}
/// <summary> /// <summary>
/// Event that occurs after canvas rebuilds. /// Event that occurs after canvas rebuilds.
/// </summary> /// </summary>
@@ -72,7 +66,7 @@ namespace Coffee.UIParticleInternal
CanvasUpdateRegistry.IsRebuildingLayout(); CanvasUpdateRegistry.IsRebuildingLayout();
#if TMP_ENABLE #if TMP_ENABLE
// Explicitly set `Canvas.willRenderCanvases += TMP_UpdateManager.DoRebuilds`. // Explicitly set `Canvas.willRenderCanvases += TMP_UpdateManager.DoRebuilds`.
typeof(TMPro.TMP_UpdateManager) var _ = typeof(TMPro.TMP_UpdateManager)
.GetProperty("instance", BindingFlags.NonPublic | BindingFlags.Static) .GetProperty("instance", BindingFlags.NonPublic | BindingFlags.Static)
.GetValue(null); .GetValue(null);
#endif #endif
@@ -83,6 +77,7 @@ namespace Coffee.UIParticleInternal
} }
#if UNITY_EDITOR && UNITY_2019_3_OR_NEWER #if UNITY_EDITOR && UNITY_2019_3_OR_NEWER
[InitializeOnLoadMethod]
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
#elif UNITY_EDITOR #elif UNITY_EDITOR
[InitializeOnLoadMethod] [InitializeOnLoadMethod]
@@ -91,9 +86,17 @@ namespace Coffee.UIParticleInternal
#endif #endif
private static void InitializeOnLoad() private static void InitializeOnLoad()
{ {
#if UNITY_2019_4 || UNITY_2020_2_OR_NEWER
Canvas.preWillRenderCanvases -= OnBeforeCanvasRebuild;
Canvas.preWillRenderCanvases += OnBeforeCanvasRebuild;
#else
Canvas.willRenderCanvases -= OnBeforeCanvasRebuild;
Canvas.willRenderCanvases += OnBeforeCanvasRebuild;
#endif
Canvas.willRenderCanvases -= OnAfterCanvasRebuild; Canvas.willRenderCanvases -= OnAfterCanvasRebuild;
s_IsInitializedAfterCanvasRebuild = false; s_IsInitializedAfterCanvasRebuild = false;
s_LastScreenSize = default; s_LastScreenSize = default;
Logger.LogMulticast(typeof(Canvas), "willRenderCanvases", message: "ctor");
} }
/// <summary> /// <summary>

View File

@@ -3,9 +3,9 @@ using System.Collections.Generic;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using Coffee.UIParticleInternal; using Coffee.UIParticleInternal;
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Rendering; using UnityEngine.Rendering;
using UnityEngine.Serialization; using UnityEngine.Serialization;
using UnityEngine.UI;
using Random = UnityEngine.Random; using Random = UnityEngine.Random;
[assembly: InternalsVisibleTo("Coffee.UIParticle.Editor")] [assembly: InternalsVisibleTo("Coffee.UIParticle.Editor")]
@@ -22,7 +22,7 @@ namespace Coffee.UIExtensions
[ExecuteAlways] [ExecuteAlways]
[RequireComponent(typeof(RectTransform))] [RequireComponent(typeof(RectTransform))]
[RequireComponent(typeof(CanvasRenderer))] [RequireComponent(typeof(CanvasRenderer))]
public class UIParticle : UIBehaviour, ISerializationCallbackReceiver public class UIParticle : MaskableGraphic, ISerializationCallbackReceiver
{ {
public enum AutoScalingMode public enum AutoScalingMode
{ {
@@ -64,7 +64,7 @@ namespace Coffee.UIExtensions
[Tooltip("Scale the rendering particles. When the `3D` toggle is enabled, 3D scale (x, y, z) is supported.")] [Tooltip("Scale the rendering particles. When the `3D` toggle is enabled, 3D scale (x, y, z) is supported.")]
[SerializeField] [SerializeField]
private Vector3 m_Scale3D = new Vector3(1, 1, 1); private Vector3 m_Scale3D = new Vector3(10, 10, 10);
[Tooltip("If you want to update material properties (e.g. _MainTex_ST, _Color) in AnimationClip, " + [Tooltip("If you want to update material properties (e.g. _MainTex_ST, _Color) in AnimationClip, " +
"use this to mark as animatable.")] "use this to mark as animatable.")]
@@ -125,48 +125,20 @@ namespace Coffee.UIExtensions
[Tooltip("Time scale multiplier.")] [Tooltip("Time scale multiplier.")]
private float m_TimeScaleMultiplier = 1; private float m_TimeScaleMultiplier = 1;
[SerializeField]
private bool m_Maskable = true;
private readonly List<UIParticleRenderer> _renderers = new List<UIParticleRenderer>(); private readonly List<UIParticleRenderer> _renderers = new List<UIParticleRenderer>();
private Camera _bakeCamera; private Camera _bakeCamera;
private Canvas _canvas;
private int _groupId; private int _groupId;
private bool _isScaleStored; private bool _isScaleStored;
private Vector3 _storedScale; private Vector3 _storedScale;
private DrivenRectTransformTracker _tracker; private DrivenRectTransformTracker _tracker;
public RectTransform rectTransform => transform as RectTransform;
public Canvas canvas
{
get
{
if (_canvas) return _canvas;
var tr = transform;
while (tr && !_canvas)
{
if (tr.TryGetComponent(out _canvas)) return _canvas;
tr = tr.parent;
}
return null;
}
}
/// <summary> /// <summary>
/// Does this graphic allow masking. /// Should this graphic be considered a target for ray-casting?
/// </summary> /// </summary>
public bool maskable public override bool raycastTarget
{ {
get => m_Maskable; get => false;
set set { }
{
if (value == m_Maskable) return;
m_Maskable = value;
UpdateRendererMaterial();
}
} }
/// <summary> /// <summary>
@@ -359,15 +331,15 @@ namespace Coffee.UIExtensions
public Vector3 parentScale { get; private set; } public Vector3 parentScale { get; private set; }
private Vector3 canvasScale { get; set; } public Vector3 canvasScale { get; private set; }
protected override void OnEnable() protected override void OnEnable()
{ {
_isScaleStored = false; _isScaleStored = false;
ResetGroupId(); ResetGroupId();
UIParticleUpdater.Register(this); UIParticleUpdater.Register(this);
RegisterDirtyMaterialCallback(UpdateRendererMaterial);
//
if (0 < particles.Count) if (0 < particles.Count)
{ {
RefreshParticles(particles); RefreshParticles(particles);
@@ -377,7 +349,7 @@ namespace Coffee.UIExtensions
RefreshParticles(); RefreshParticles();
} }
UpdateRendererMaterial(); base.OnEnable();
} }
/// <summary> /// <summary>
@@ -395,15 +367,9 @@ namespace Coffee.UIExtensions
UIParticleUpdater.Unregister(this); UIParticleUpdater.Unregister(this);
_renderers.RemoveAll(r => r == null); _renderers.RemoveAll(r => r == null);
_renderers.ForEach(r => r.Reset()); _renderers.ForEach(r => r.Reset());
_canvas = null; UnregisterDirtyMaterialCallback(UpdateRendererMaterial);
}
/// <summary> base.OnDisable();
/// Called when the state of the parent Canvas is changed.
/// </summary>
protected override void OnCanvasHierarchyChanged()
{
_canvas = null;
} }
/// <summary> /// <summary>
@@ -413,14 +379,6 @@ namespace Coffee.UIExtensions
{ {
} }
/// <summary>
/// This function is called when a direct or indirect parent of the transform of the GameObject has changed.
/// </summary>
protected override void OnTransformParentChanged()
{
_canvas = null;
}
void ISerializationCallbackReceiver.OnBeforeSerialize() void ISerializationCallbackReceiver.OnBeforeSerialize()
{ {
} }
@@ -720,6 +678,17 @@ namespace Coffee.UIExtensions
: Random.Range(m_GroupId, m_GroupMaxId + 1); : Random.Range(m_GroupId, m_GroupMaxId + 1);
} }
protected override void UpdateMaterial()
{
}
/// <summary>
/// Call to update the geometry of the Graphic onto the CanvasRenderer.
/// </summary>
protected override void UpdateGeometry()
{
}
private void UpdateRendererMaterial() private void UpdateRendererMaterial()
{ {
for (var i = 0; i < _renderers.Count; i++) for (var i = 0; i < _renderers.Count; i++)

View File

@@ -22,7 +22,7 @@ namespace Coffee.UIExtensions
[SerializeField] [SerializeField]
[Tooltip("Default view size for baking particle systems.")] [Tooltip("Default view size for baking particle systems.")]
private float m_DefaultViewSizeForBaking = 1000; private float m_DefaultViewSizeForBaking = 10;
public static float defaultViewSizeForBaking public static float defaultViewSizeForBaking
{ {

View File

@@ -2,8 +2,8 @@
"name": "com.coffee.ui-particle", "name": "com.coffee.ui-particle",
"displayName": "UI Particle", "displayName": "UI Particle",
"description": "This package provides a component to render particle effects for uGUI.\nThe particle rendering is maskable and sortable, without the need for an extra Camera, RenderTexture, or Canvas.", "description": "This package provides a component to render particle effects for uGUI.\nThe particle rendering is maskable and sortable, without the need for an extra Camera, RenderTexture, or Canvas.",
"version": "5.0.0-preview.19", "version": "4.13.2",
"unity": "2019.3", "unity": "2018.2",
"license": "MIT", "license": "MIT",
"repository": { "repository": {
"type": "git", "type": "git",