From 144ae4a3e535d5e27655f25eb9aabbf64b97cea3 Mon Sep 17 00:00:00 2001 From: Felipe Date: Sun, 24 Sep 2023 23:57:49 +0100 Subject: [PATCH] [Docs] Updated README with VibrationComponent usage --- .github/scripts/functions.sh | 9 +- .github/workflows/main.yml | 5 +- Images.meta | 7 + Images/Icons.meta | 7 + Images/Icons/android-icon.png | Bin 0 -> 540 bytes Images/Icons/android-icon.png.meta | 7 + Images/Icons/ios-icon.png | Bin 0 -> 677 bytes Images/Icons/ios-icon.png.meta | 7 + Images/Icons/webgl-icon.png | Bin 0 -> 1887 bytes Images/Icons/webgl-icon.png.meta | 7 + Images/haptic-logo-color.png | Bin 0 -> 8860 bytes Images/haptic-logo-color.png.meta | 7 + Images/vibration-component-inspector.png | Bin 0 -> 15249 bytes Images/vibration-component-inspector.png.meta | 7 + .../com.benoitfreslon.vibration/package.json | 2 +- README.md | 154 ++++++++++++++++-- 16 files changed, 198 insertions(+), 21 deletions(-) create mode 100644 Images.meta create mode 100644 Images/Icons.meta create mode 100644 Images/Icons/android-icon.png create mode 100644 Images/Icons/android-icon.png.meta create mode 100644 Images/Icons/ios-icon.png create mode 100644 Images/Icons/ios-icon.png.meta create mode 100644 Images/Icons/webgl-icon.png create mode 100644 Images/Icons/webgl-icon.png.meta create mode 100644 Images/haptic-logo-color.png create mode 100644 Images/haptic-logo-color.png.meta create mode 100644 Images/vibration-component-inspector.png create mode 100644 Images/vibration-component-inspector.png.meta diff --git a/.github/scripts/functions.sh b/.github/scripts/functions.sh index 465ef43..b460341 100755 --- a/.github/scripts/functions.sh +++ b/.github/scripts/functions.sh @@ -10,11 +10,16 @@ packageVersion() { echo $VERSION } +# @description Add github actions state and output variables to be handled on .yml workflow files +# +# @see [shdoc](https://github.com/reconquest/shdoc) +# @see [Deprecating save-state and set-output commands](https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands) githubActionsOutputs() { CURRENT_TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) COMMIT_MESSAGE=$(git log -1 --pretty=%B) - echo ::set-output name=tag::$CURRENT_TAG - echo ::set-output name=commit_message::$COMMIT_MESSAGE + # Use the format {name}={value} instead of ::set-output + echo "{tag}={$CURRENT_TAG}" >> $GITHUB_OUTPUT + echo "{commit_message}={$COMMIT_MESSAGE}" >> $GITHUB_OUTPUT } copyPackagesContent() { diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dbaa53a..de000de 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,9 +6,12 @@ on: repository_dispatch: types: [on-demand-test] env: + # PS: You can define github action variables in a repository, without modify this file + # from: https://github.com/[profile]/[repository]/settings/variables/actions PKG_BRANCH: upm PKG_NAME: com.benoitfreslon.vibration PKG_ROOT: ./ + EXCLUDE_REMOVE_FILES: '!(Packages|.github|.git|README.md|README.md.meta|LICENSE|LICENSE.meta|Images|Images.meta|.|..)' jobs: split-upm: name: Create upm package branch (force) @@ -31,7 +34,7 @@ jobs: run: | git checkout --orphan "$PKG_BRANCH" shopt -s extglob dotglob - rm -rf !(Packages|.github|.git|README.md|README.md.meta|LICENSE|LICENSE.meta|.|..) + rm -rf $EXCLUDE_REMOVE_FILES ls -la ./ - name: Move ./Packages content to root run: ./.github/scripts/functions.sh movePackagesFolder diff --git a/Images.meta b/Images.meta new file mode 100644 index 0000000..1c1a524 --- /dev/null +++ b/Images.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c8e81c7db33043e68f0caa00db55cccc +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Images/Icons.meta b/Images/Icons.meta new file mode 100644 index 0000000..5411c47 --- /dev/null +++ b/Images/Icons.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e7aa47501c634e5ba31545747f0ae7fb +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Images/Icons/android-icon.png b/Images/Icons/android-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..148da64fcdc8e196296339e8fb59d9bf58b05b2f GIT binary patch literal 540 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 literal 0 HcmV?d00001 diff --git a/Images/Icons/webgl-icon.png.meta b/Images/Icons/webgl-icon.png.meta new file mode 100644 index 0000000..78ea70e --- /dev/null +++ b/Images/Icons/webgl-icon.png.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 739deb37b1c340428412e0b793fd3da1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Images/haptic-logo-color.png b/Images/haptic-logo-color.png new file mode 100644 index 0000000000000000000000000000000000000000..47438bc821e232a330e40d1179ee5c0553537279 GIT binary patch literal 8860 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 bo>BaT(x%PXmquPXNdWRPD$=me#zFrFWsXc- literal 0 HcmV?d00001 diff --git a/Images/haptic-logo-color.png.meta b/Images/haptic-logo-color.png.meta new file mode 100644 index 0000000..a672212 --- /dev/null +++ b/Images/haptic-logo-color.png.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c633211abc1145a5a486bfa5878cc0dd +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Images/vibration-component-inspector.png b/Images/vibration-component-inspector.png new file mode 100644 index 0000000000000000000000000000000000000000..6f1dcc8f41a2139aa4153c5049ba7cfdc956f5ef GIT binary patch literal 15249 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 literal 0 HcmV?d00001 diff --git a/Images/vibration-component-inspector.png.meta b/Images/vibration-component-inspector.png.meta new file mode 100644 index 0000000..ffb2f99 --- /dev/null +++ b/Images/vibration-component-inspector.png.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 918dc7918d2243148352b5ef41ef4c9e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.benoitfreslon.vibration/package.json b/Packages/com.benoitfreslon.vibration/package.json index de5cb8d..9e6c862 100644 --- a/Packages/com.benoitfreslon.vibration/package.json +++ b/Packages/com.benoitfreslon.vibration/package.json @@ -2,7 +2,7 @@ "name": "com.benoitfreslon.vibration", "author": "Benoit Freslon, AminSojoudi, SH42913", "displayName": "Vibration", - "description": "Native free plugin for Unity for iOS and Android. Use custom vibrations on mobile.", + "description": "Native free plugin for Unity for Android, iOS and WebGL. Use custom vibrations on mobile.", "unity": "2019.3", "version": "0.1.0", "keywords": [], diff --git a/README.md b/README.md index 3ee97e7..e41b92e 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,127 @@ -# Vibration +# Vibration/Haptics: Unity Plugin -Native **free** plugin for Unity for iOS and Android. +

+ +

+ +Native **free** plugin for Unity for Android, iOS and [WebGL](https://caniuse.com/webgl2) (with some limitations). Use custom vibrations on mobile. If you like this free plugin, that's be cool if you can buy me a coffee 😀☕️ Send tips to https://paypal.me/UnityVibrationPlugin -# Installation +## Supported Platforms + +- Aimeos logo Android +- Aimeos logo iOS +- Aimeos logo WebGL (some limitations apply on Mobile) -The minimal checked Unity Version is 2019.3.* LTS +## Installation + +The minimal checked Unity Version is **`2019.3.*`** LTS Open Package Manager and "Add package from git url..." using next string: -* `https://github.com/BenoitFreslon/Vibration.git` + +* `https://github.com/BenoitFreslon/Vibration.git#upm` + +Or use the latest git release/tag: + +* `https://github.com/BenoitFreslon/Vibration.git#0.1.0` You also can edit `Packages/manifest.json` manually, just add: -* `"com.benoitfreslon.vibration": "https://github.com/BenoitFreslon/Vibration.git",` -Or you can simply copy and paste the entire `Vibration` folder to your Unity3D `Assets` folder. +* `"com.benoitfreslon.vibration": "https://github.com/BenoitFreslon/Vibration.git#0.1.0",` + +Or you can simply copy and paste the entire `[upm]` branch content from this repo, to your Unity3D `Packages/com.benoitfreslon.vibration` folder. -# Use +## Getting Started -## Initialization +There are 2 ways of usage this plugin: -Initialize the plugin with this line before using vibrations: +1. Use the `Runtime/VibrationComponent.cs` script attached to a _gameObject_ **(Recommended)** -`Vibration.Init();` + ![Vibration Component](./Images/vibration-component-inspector.png) + + On that script, you can: + + - Enable/Disable vibration from inspector or programatically + > **TIP:** Useful for enable/disable from a menu settings in your game! + - Add a `ScriptableObject` asset with vibration settings (only enable/disable for now) + - Configure the duration and/or select a pre-defined vibration effect type + + This `MonoBehaviour` component use `Runtime/Vibration.cs` static class as a "_fallback_" for some implemented native integrations (**IOS** and **WebGL**) + +2. Use the `Runtime/Vibration.cs` static class + + See the scene and a sample `MonoBehaviour` script under folder: `Samples/VibrationExample` ## Vibrations +Using `Runtime/VibrationComponent` + +```csharp +// That's the main method to pass a duration (milliseconds) +// and/or a pre-defined `VibrationType` effect +Vibrate( + milliseconds: 20, + vibrationType: VibrationType.Click +); + +``` + +Optionally, you can pass an array of values of **_pattern_** as well: + +```csharp +// That's the main method to pass a duration (milliseconds) +// and/or a pre-defined `VibrationType` effect +Vibrate( + pattern: new[] { 200, 10, 50 }, + repeat: VibrationRepeat.Once +); + +``` + +Also, it's possible define the **timeunit** of the duration value: + +```csharp +// That's the main method to pass a duration (milliseconds) +// and/or a pre-defined `VibrationType` effect +Vibrate( + duration: 10, + timeUnit: MobileTimeUnit.Seconds +); + +``` + +Check if the mobile device has **vibration support**: + +```csharp +// Fallback to "Vibration.HasVibrator()" on iOS and WebGL +HasVibrator(); +``` + +### Android (only) + +Check if an Android [VibrationEffect](https://developer.android.com/reference/android/os/VibrationEffect) is supported: + +```csharp +// Where: "0" is `VibrationEffect.EFFECT_CLICK` value +// from native Android Kotlin/Java +IsEffectSupported(0); +``` + +Check if an Android [VibrationEffect.Composition](https://developer.android.com/reference/android/os/VibrationEffect.Composition) is supported: + +```csharp +// Where: "1" is `VibrationEffect.Composition.PRIMITIVE_CLICK` value +// from native Android Kotlin/Java +IsPrimitiveSupported(1); +``` + ### iOS and Android +Using `Runtime/Vibration.cs` static class + #### Default vibration Use `Vibration.Vibrate();` for a classic default ~400ms vibration @@ -53,25 +145,40 @@ Nope vibration: series of three weak booms (For iOS: only available with the hap `Vibration.VibrateNope();` --- + ## Android Only #### Custom duration in milliseconds -`Vibration.Vibrate(500);` +`Vibration.Vibrate(500);` #### Pattern -``` -long [] pattern = { 0, 1000, 1000, 1000, 1000 }; -Vibration.Vibrate ( pattern, -1 ); +```csharp +long[] pattern = { 0, 1000, 1000, 1000, 1000 }; +Vibration.Vibrate (pattern, -1); ``` #### Cancel -`Vibration.Cancel();` +Using `Runtime/VibrationComponent.cs` + +```csharp + +// Cancel for Android and WebGL +VibrationComponent.Cancel(); +``` + +Using `Runtime/Vibration.cs` static class + +```csharp +Vibration.Cancel(); +``` --- + ## IOS only + vibration using haptic engine `Vibration.VibrateIOS(ImpactFeedbackStyle.Light);` @@ -90,4 +197,17 @@ vibration using haptic engine `Vibration.VibrateIOS(NotificationFeedbackStyle.Warning);` -`Vibration.VibrateIOS_SelectionChanged();` \ No newline at end of file +`Vibration.VibrateIOS_SelectionChanged();` + +### References + +#### ANDROID + +- [Using Vibrate In Android](https://proandroiddev.com/using-vibrate-in-android-b0e3ef5d5e07) +- [Android 12: VibratorManager & New Vibration Primitives](https://yggr.medium.com/exploring-android-12-vibratormanager-new-vibration-primitives-e862c95fe938) +- [Developers Android: VibrationEffect](https://developer.android.com/reference/android/os/VibrationEffect) +- [Developers Android: VibrationEffect.Composition](https://developer.android.com/reference/android/os/VibrationEffect.Composition) + +#### ICONS (Copyright) + +Haptic icons created by Uniconlabs - Flaticon \ No newline at end of file