I am an indie developer and I enjoy creating useful little assets for Unity 3D. Above, you can find some of my assets in action.

I'm sharing these assets on both GitHub (under MIT license) and Asset Store (for free).

If you find my assets useful and would like to support me, you can buy me a coffee (you can also support me via GitHub Sponsors) ☕. If you don't want to, it is totally fine, I still appreciate you using my assets 🐤🌼

Here is a list of my growing number of assets

360° Screenshot Capture

This simple script captures a 360° photo with your Unity camera and injects the necessary XMP metadata to it; so the output image supports 360° viewers on the web out-of-the-box (like Facebook and Flickr). Both JPEG and PNG formats are supported.

Asset Store: https://assetstore.unity.com/packages/tools/camera/360-screenshot-capture-112864

GitHub: https://github.com/yasirkula/Unity360ScreenshotCapture


Adjust Pivot

This script allows you to change the pivot point of an object without having to create an empty GameObject as the pivot point.

Asset Store: https://assetstore.unity.com/packages/tools/utilities/adjust-pivot-112883

GitHub: https://github.com/yasirkula/UnityAdjustPivot


Android Runtime Permissions

This plugin helps you query/request runtime permissions synchronously on Android M and later. It also works on older Android versions and detects whether a requested permission is declared in AndroidManifest or not.

Asset Store: https://assetstore.unity.com/packages/tools/integration/android-runtime-permissi...

GitHub: https://github.com/yasirkula/UnityAndroidRuntimePermissions

Asset Usage Detector

This editor extension helps you figure out at which places an asset or GameObject is used, i.e. lists the objects that refer to the asset. It is possible to search for references in the Assets folder (Project view) and/or in the scene(s) of your project. You can also search for references while in Play mode!

Asset Store: https://assetstore.unity.com/packages/tools/utilities/asset-usage-detector-11283...

GitHub: https://github.com/yasirkula/UnityAssetUsageDetector


Bezier Solution

This asset is a means to create bezier splines in editor and/or during runtime: splines can be created and edited visually in the editor, or by code during runtime.

Asset Store: https://assetstore.unity.com/packages/tools/level-design/bezier-solution-113074

GitHub: https://github.com/yasirkula/UnityBezierSolution

Video: https://www.youtube.com/watch?v=OpniwcFwSY8


Dynamic Panels

This asset helps you create dynamic panels using Unity's UI system. These panels can be dragged around, resized, docked to canvas edges or to one another and stacked next to each other as separate tabs.

Asset Store: https://assetstore.unity.com/packages/tools/gui/dynamic-panels-114126

GitHub: https://github.com/yasirkula/UnityDynamicPanels

WebGL Demo: embedded at the top of this page


Image Cropper

ImageCropper aims to be a powerful, customizable and easy-to-use image cropping solution for Unity 3D. It is created with Unity's UI system.

Asset Store: https://assetstore.unity.com/packages/tools/gui/image-cropper-116650

GitHub: https://github.com/yasirkula/UnityImageCropper

WebGL Demo: https://yasirkula.net/ImageCropperDemo/


In-game Debug Console

This asset helps you see debug messages (logs, warnings, errors, exceptions) runtime in a build (also assertions in editor) and execute commands using its built-in console. It also supports logging logcat messages to the console on Android platform.

Asset Store: https://assetstore.unity.com/packages/tools/gui/in-game-debug-console-68068

GitHub: https://github.com/yasirkula/UnityIngameDebugConsole

WebGL Demo: embedded at the top of this page


Inspect Plus

This plugin helps you view an object's Inspector in a separate tab/window, copy&paste the values of variables in the Inspector and inspect all variables of an object (including non-serializable and static variables) in an enhanced Debug mode.

GitHub: https://github.com/yasirkula/UnityInspectPlus

Native Camera for Android & iOS

This plugin helps you take pictures/record videos natively with your device's camera on Android and iOS. It has built-in support for runtime permissions, as well.

Asset Store: https://assetstore.unity.com/packages/tools/integration/native-camera-for-androi...

GitHub: https://github.com/yasirkula/UnityNativeCamera

Native File Picker for Android & iOS

This plugin helps you import/export files from/to various document providers on Android & iOS. On iOS, it uses UIDocumentPickerViewController in the background.

Asset Store: https://assetstore.unity.com/packages/tools/integration/native-file-picker-for-android-ios-173238

GitHub: https://github.com/yasirkula/UnityNativeFilePicker

Native Gallery for Android & iOS

This plugin helps you save your images and/or videos to device Gallery on Android and Photos on iOS. It is also possible to pick an image or video from Gallery/Photos.

Asset Store: https://assetstore.unity.com/packages/tools/integration/native-gallery-for-android-ios-112630

GitHub: https://github.com/yasirkula/UnityNativeGallery


Native Share for Android & iOS

This plugin helps you natively share files (images, videos, documents, etc.) and/or plain text on Android & iOS. A ContentProvider is used to share the media on Android.

Asset Store: https://assetstore.unity.com/packages/tools/integration/native-share-for-android-ios-112731

GitHub: https://github.com/yasirkula/UnityNativeShare


Runtime File Browser

This plugin helps you show save/load dialogs during gameplay with its uGUI based file browser.

Asset Store: https://assetstore.unity.com/packages/tools/gui/runtime-file-browser-113006

GitHub: https://github.com/yasirkula/UnitySimpleFileBrowser


Runtime Inspector & Hierarchy

This is a simple yet powerful runtime Inspector and Hierarchy solution for Unity 3D that should work on pretty much any platform that Unity supports, including mobile platforms.

Asset Store: https://assetstore.unity.com/packages/tools/gui/runtime-inspector-hierarchy-111349

GitHub: https://github.com/yasirkula/UnityRuntimeInspector

WebGL Demo: embedded at the top of this page


Runtime Preview Generator

This plugin helps you generate preview textures (thumbnails) for your GameObjects or materials in Texture2D format on the fly.

Asset Store: https://assetstore.unity.com/packages/tools/camera/runtime-preview-generator-112...

GitHub: https://github.com/yasirkula/UnityRuntimePreviewGenerator


Runtime Scene Gizmo

This plugin helps you display a runtime scene gizmo as a UI element in your Unity projects. An event is raised when a component of the gizmo is clicked.

Asset Store: https://assetstore.unity.com/packages/tools/gui/runtime-scene-gizmo-123040

GitHub: https://github.com/yasirkula/UnityRuntimeSceneGizmo

WebGL Demo: embedded at the top of this page


Runtime Texture

This asset is an abstraction layer on top of Texture2D.LoadImage to create Texture2D objects at runtime from raw PNG/JPEG data. Image files' contents are stored in RuntimeTexture assets and are used to create Texture2Ds on demand. With this abstraction layer, you no longer need to store the image files in e.g. StreamingAssets directory, you can hold references to RuntimeTexture assets in your scripts and generate Texture2Ds using them.

GitHub: https://github.com/yasirkula/UnityRuntimeTexture


Simple GDPR Consent

This plugin helps you present a GDPR consent dialog to the users. Please note that you are responsible from forwarding the consent data to your SDKs.

Asset Store: https://assetstore.unity.com/packages/tools/gui/simple-gdpr-consent-151966

GitHub: https://github.com/yasirkula/UnitySimpleGDPRConsent


Simple Input System

SimpleInput is an improvement over Unity's legacy Input system that allows you to use custom input providers like on-screen joysticks, UI buttons and d-pads. In other words, it lets you simulate e.g. Input.GetAxis when a button is pressed or a virtual joystick is dragged. It also supports using custom axes and buttons that don't necessarily exist in Edit-Project Settings-Input.

Asset Store: https://assetstore.unity.com/packages/tools/input-management/simple-input-system...

GitHub: https://github.com/yasirkula/UnitySimpleInput

WebGL Demo: https://yasirkula.net/SimpleInputDemo/


Simple Patch Tool

SimplePatchTool is a general-purpose patcher library for standalone applications. This asset is no longer maintained.

Asset Store: https://assetstore.unity.com/packages/tools/network/simple-patch-tool-124296

GitHub: https://github.com/yasirkula/UnitySimplePatchTool


Text to TextMesh Pro Upgrade Tool

This asset helps you upgrade the TextInputFieldDropdown and TextMesh objects in your projects to their TextMesh Pro variants. It also upgrades the scripts so that e.g. Text variables in those scripts become TMP_Text variables. Then, it reconnects the references to the upgraded components (e.g. if a public variable was referencing an upgraded Text component, it will now reference the corresponding TextMeshProUGUI component).

Asset Store: https://assetstore.unity.com/packages/tools/utilities/text-to-textmesh-pro-upgrade-tool-176732

GitHub: https://github.com/yasirkula/UnityTextToTextMeshProUpgradeTool

Texture Ops

This plugin helps you save/load textures and perform simple operations on them, like scale and slice. It also contains an example sliding puzzle project to demonstrate the slice operation.

GitHub: https://github.com/yasirkula/UnityTextureOps


Log in with itch.io to leave a comment.


I just noticed you can't use the EditorUtilities File Browser in runtime so I was really glad I found your asset. I was thinking about making a file browser myself but that would have cost a few days to get every quirk working. Thanks a lot!

Happy to help!

Thank you so much for all the work you've done! Really helped me out alot :>>

And thank you for your support ^_^

Thank you for so big contribution to unity! I think they should hire you :P

lol thank you :D



Hello guy,

we want to post the Text + picture  on  facebook, but when we did it, the Text disappeared. Do you know how can we resolve it?

Hi! It may not be possible without using Facebook SDK. Some apps deliberately omit the text or the image for unknown reasons, they allow sharing only one of these contents.

Big thank you for your generous contribution to the Unity community. Not only the assets but also your prompt and patient replies to my queries on the forums. Buy yourself a coffee, or a beer, you deserve it. Cheers :)


Thank you for your support :)

Heyo, just wanted to let you know that I'm using several of these assets now and that I can't thank you enough for all of this work you've done! For one thing I use Asset Usage Detector basically every day.

Thank you :D My favorites are also Asset Usage Detector and Inspect+.

(3 edits)

This is a good plugin to use. Easy to integrate. But,
Generating Error of permission in build with Facebook SDK.


CommandInvokationFailure: Gradle build failed. 

C:\Program Files\Java\jdk1.8.0_191\bin\java.exe -classpath "G:\Android\gradle-6.6.1-bin\gradle-6.6.1\lib\gradle-launcher-6.6.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleRelease"


FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':launcher:processReleaseResources'.

> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade

   > Android resource linking failed

     G:\Temp\gradleOut\launcher\src\main\AndroidManifest.xml:5:3-126: AAPT: error: attribute android:requestLegacyExternalStorage not found.


* Try:

Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org


Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8



Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details

> Configure project :launcher

WARNING: DSL element 'useProguard' is obsolete.

It will be removed in version 5.0 of the Android Gradle plugin.

Use 'android.enableR8' in gradle.properties to switch between R8 and Proguard.

WARNING: DSL element 'useProguard' is obsolete.

It will be removed in version 5.0 of the Android Gradle plugin.

Use 'android.enableR8' in gradle.properties to switch between R8 and Proguard.

> Task :unityLibrary:preBuild UP-TO-DATE

> Task :unityLibrary:OneSignalConfig.plugin:preBuild UP-TO-DATE

> Task :launcher:preBuild UP-TO-DATE

> Task :launcher:preReleaseBuild UP-TO-DATE

> Task :unityLibrary:preReleaseBuild UP-TO-DATE

> Task :unityLibrary:OneSignalConfig.plugin:preReleaseBuild UP-TO-DATE

> Task :unityLibrary:packageReleaseRenderscript NO-SOURCE

> Task :unityLibrary:OneSignalConfig.plugin:compileReleaseAidl NO-SOURCE

> Task :unityLibrary:OneSignalConfig.plugin:packageReleaseRenderscript NO-SOURCE

> Task :unityLibrary:OneSignalConfig.plugin:compileReleaseRenderscript NO-SOURCE

> Task :unityLibrary:generateReleaseResValues

> Task :unityLibrary:OneSignalConfig.plugin:generateReleaseResValues

> Task :unityLibrary:OneSignalConfig.plugin:generateReleaseResources

> Task :unityLibrary:compileReleaseAidl NO-SOURCE

> Task :launcher:generateReleaseBuildConfig

> Task :launcher:compileReleaseRenderscript NO-SOURCE

> Task :unityLibrary:compileReleaseRenderscript NO-SOURCE

> Task :unityLibrary:generateReleaseResources

> Task :launcher:compileReleaseAidl NO-SOURCE

> Task :launcher:generateReleaseResValues

> Task :launcher:generateReleaseResources

> Task :launcher:createReleaseCompatibleScreenManifests

> Task :launcher:extractDeepLinksRelease

> Task :launcher:prepareLintJar

> Task :unityLibrary:packageReleaseResources

> Task :unityLibrary:extractDeepLinksRelease

> Task :unityLibrary:OneSignalConfig.plugin:packageReleaseResources

> Task :unityLibrary:OneSignalConfig.plugin:extractDeepLinksRelease

> Task :launcher:checkReleaseDuplicateClasses

> Task :launcher:javaPreCompileRelease

> Task :unityLibrary:generateReleaseBuildConfig

> Task :unityLibrary:processReleaseManifest

> Task :unityLibrary:javaPreCompileRelease

> Task :unityLibrary:OneSignalConfig.plugin:processReleaseManifest

> Task :unityLibrary:OneSignalConfig.plugin:generateReleaseBuildConfig

> Task :unityLibrary:OneSignalConfig.plugin:javaPreCompileRelease

> Task :unityLibrary:mergeReleaseShaders

> Task :unityLibrary:compileReleaseLibraryResources

> Task :unityLibrary:OneSignalConfig.plugin:prepareLintJarForPublish

> Task :unityLibrary:compileReleaseShaders NO-SOURCE

> Task :unityLibrary:generateReleaseAssets UP-TO-DATE

> Task :unityLibrary:OneSignalConfig.plugin:mergeReleaseShaders

> Task :unityLibrary:OneSignalConfig.plugin:compileReleaseShaders NO-SOURCE

> Task :unityLibrary:OneSignalConfig.plugin:generateReleaseAssets UP-TO-DATE

> Task :unityLibrary:OneSignalConfig.plugin:packageReleaseAssets

> Task :unityLibrary:OneSignalConfig.plugin:processReleaseJavaRes NO-SOURCE

> Task :unityLibrary:OneSignalConfig.plugin:bundleLibResRelease NO-SOURCE

> Task :unityLibrary:OneSignalConfig.plugin:mergeReleaseJniLibFolders

> Task :unityLibrary:OneSignalConfig.plugin:parseReleaseLocalResources

> Task :unityLibrary:OneSignalConfig.plugin:compileReleaseLibraryResources

> Task :unityLibrary:OneSignalConfig.plugin:mergeReleaseNativeLibs

> Task :unityLibrary:OneSignalConfig.plugin:stripReleaseDebugSymbols NO-SOURCE

> Task :unityLibrary:OneSignalConfig.plugin:copyReleaseJniLibsProjectOnly

> Task :unityLibrary:OneSignalConfig.plugin:generateReleaseRFile

> Task :unityLibrary:OneSignalConfig.plugin:compileReleaseJavaWithJavac

> Task :unityLibrary:OneSignalConfig.plugin:bundleLibRuntimeToJarRelease

> Task :unityLibrary:OneSignalConfig.plugin:bundleLibCompileToJarRelease

> Task :launcher:processReleaseManifest

G:\Temp\gradleOut\launcher\src\main\AndroidManifest.xml:21:5-80 Warning:

uses-permission#android.permission.READ_EXTERNAL_STORAGE was tagged at AndroidManifest.xml:21 to replace another declaration but no other declaration present

> Task :unityLibrary:packageReleaseAssets

> Task :unityLibrary:processReleaseJavaRes NO-SOURCE

> Task :unityLibrary:bundleLibResRelease NO-SOURCE

> Task :unityLibrary:mergeReleaseJniLibFolders

> Task :unityLibrary:parseReleaseLocalResources

> Task :unityLibrary:prepareLintJarForPublish

> Task :unityLibrary:mergeReleaseNativeLibs

> Task :unityLibrary:stripReleaseDebugSymbols

WARNING: Compatible side by side NDK version was not found. Default is 21.0.6113669.

Compatible side by side NDK version was not found. Default is 21.0.6113669.

Unable to strip the following libraries, packaging them as they are: libMonoPosixHelper.so, libmain.so, libmonobdwgc-2.0.so, libunity.so.

> Task :launcher:mergeReleaseResources

> Task :launcher:mergeReleaseShaders

> Task :launcher:compileReleaseShaders NO-SOURCE

> Task :launcher:generateReleaseAssets UP-TO-DATE

> Task :unityLibrary:copyReleaseJniLibsProjectOnly

> Task :unityLibrary:generateReleaseRFile

> Task :unityLibrary:compileReleaseJavaWithJavac

> Task :unityLibrary:bundleLibCompileToJarRelease

> Task :unityLibrary:bundleLibRuntimeToJarRelease

> Task :launcher:mergeReleaseAssets

> Task :launcher:processReleaseResources FAILED

> Task :launcher:desugarReleaseFileDependencies

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.

Use '--warning-mode all' to show the individual deprecation warnings.

See https://docs.gradle.org/6.6.1/userguide/command_line_interface.html#sec:command_...

50 actionable tasks: 50 executed


exit code: 1

UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.Command.Run (System.String command, System.String args, System.String workingdir, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.AndroidJavaTools.RunJava (System.String args, System.String workingdir, System.Action`1[T] progress, System.String error) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingdir, System.String task, System.Action`1[T] progress) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

Rethrow as GradleInvokationException: Gradle build failed

UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingdir, System.String task, System.Action`1[T] progress) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown.

UnityEditor.Android.PostProcessor.CancelPostProcess.AbortBuild (System.String title, System.String message, System.Exception ex) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (UnityEditor.BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <2975258ba72b4441a1487a1bed69dfb8>:0)

UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <8004fcc221b54f98ba547350ea71d812>:0)

UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

You can check out the FAQ entry about requestLegacyExternalStorage in README.txt.

hello there, I am a student learning unity and recently came across your amazing asset on unity asset store. I tried contacting  you on forum thread but unable to do so. I need Help!! pls provide an example script for multiple image pick from gallery on your GitHub readme please!

like following script is for single Image pick

private void PickImage( int maxSize ) { 	NativeGallery.Permission permission = NativeGallery.GetImageFromGallery( ( path ) => 	{ 		Debug.Log( "Image path: " + path ); 		if( path != null ) 		{ 			// Create Texture from selected image 			Texture2D texture = NativeGallery.LoadImageAtPath( path, maxSize ); 			if( texture == null ) 			{ 				Debug.Log( "Couldn't load texture from " + path ); 				return; 			}  			// Assign texture to a temporary quad and destroy it after 5 seconds 			GameObject quad = GameObject.CreatePrimitive( PrimitiveType.Quad ); 			quad.transform.position = Camera.main.transform.position + Camera.main.transform.forward * 2.5f; 			quad.transform.forward = Camera.main.transform.forward; 			quad.transform.localScale = new Vector3( 1f, texture.height / (float) texture.width, 1f );  			Material material = quad.GetComponent<Renderer>().material; 			if( !material.shader.isSupported ) // happens when Standard shader is not included in the build 				material.shader = Shader.Find( "Legacy Shaders/Diffuse" );  			material.mainTexture = texture;  			Destroy( quad, 5f );  			// If a procedural texture is not destroyed manually,  			// it will only be freed after a scene change 			Destroy( texture, 5f ); 		} 	}, "Select a PNG image", "image/png" );  	Debug.Log( "Permission result: " + permission ); }

Please check your e-mail, I've replied to your mail.

(2 edits)

Hello, thank you very much for such a wonderful project, but I had to resort to seeking help, when I go to select multiple photos, it only lets me select the recent captures, the camera photos and others appear in white and are not allowed to be selected, this is normal? is it impossible to fix?

Problem In (NativeGalleryForAndroid)

Edit: i fixt it (changing the GetImagesFromGallery to GetMixedMediasFromGallery) 

for now it works fine

This was a strange solution but I'm glad that it worked ^^

@Donat01k please provide me an example of how multiple photos are selected

Found your multiscreenshot script on github and I gotta say you saved me a lot of time. Exactly what I needed for making screenshots for App Store and Google Play :)

Thank you <3

Happy to hear that :D

Hello is that your model


Looking at the Java classes, I'd say that the NativeGallery and AndroidRuntimePermissions plugins used in this game are my plugins.

(2 edits)

Tnx but you upload that files 13.August. In im right Because it wasn't before in game. And  files is new. 

And what's that used for? 

(1 edit)

I'm not affiliated with this game; they have probably imported these assets to their Unity project from Asset Store. These assets have been on Asset Store for a long time. You can find a description of each asset in the "Here is a list of my growing number of assets" section.

P.S. You can find the original release date of assets at the bottom of the Releases section in Asset Store.

Tnx you. 

Awesome assets, thank you so much!

Thank you for your kind words :)