├── .editorconfig ├── .github ├── CODEOWNERS ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── question.md ├── pull_request_template.md └── workflows │ ├── deploy.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── Assets ├── ProjectSettings.meta ├── ProjectSettings │ ├── NanoMonitor.asset │ └── NanoMonitor.asset.meta ├── Samples ├── Samples.meta ├── Tests.meta └── Tests │ ├── Editor.meta │ └── Editor │ ├── EditorTests.asmdef │ ├── EditorTests.asmdef.meta │ ├── SampleTests.cs │ └── SampleTests.cs.meta ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.md ├── Packages ├── manifest.json ├── packages-lock.json └── src │ ├── .coffee.internal.sed │ ├── .releaserc.json │ ├── CHANGELOG.md │ ├── CHANGELOG.md.meta │ ├── LICENSE.md │ ├── LICENSE.md.meta │ ├── README.md │ ├── README.md.meta │ ├── Runtime.meta │ ├── Runtime │ ├── Coffee.UIDynamicSampler.asmdef │ ├── Coffee.UIDynamicSampler.asmdef.meta │ ├── Internal.meta │ ├── Internal │ │ ├── Utilities.meta │ │ └── Utilities │ │ │ ├── FastAction.cs │ │ │ ├── FastAction.cs.meta │ │ │ ├── Logging.cs │ │ │ ├── Logging.cs.meta │ │ │ ├── Misc.cs │ │ │ ├── Misc.cs.meta │ │ │ ├── ObjectPool.cs │ │ │ ├── ObjectPool.cs.meta │ │ │ ├── ObjectRepository.cs │ │ │ ├── ObjectRepository.cs.meta │ │ │ ├── RenderTextureRepository.cs │ │ │ ├── RenderTextureRepository.cs.meta │ │ │ ├── UIExtraCallbacks.cs │ │ │ └── UIExtraCallbacks.cs.meta │ ├── UIDynamicSampler.cs │ └── UIDynamicSampler.cs.meta │ ├── Samples~ │ ├── Demo.meta │ └── Demo │ │ ├── UIDynamicSampler_Demo-Circle.png │ │ ├── UIDynamicSampler_Demo-Circle.png.meta │ │ ├── UIDynamicSampler_Demo-Container.prefab │ │ ├── UIDynamicSampler_Demo-Container.prefab.meta │ │ ├── UIDynamicSampler_Demo-UnityChan-Mipmap.png │ │ ├── UIDynamicSampler_Demo-UnityChan-Mipmap.png.meta │ │ ├── UIDynamicSampler_Demo-UnityChan-Thumbnail.png │ │ ├── UIDynamicSampler_Demo-UnityChan-Thumbnail.png.meta │ │ ├── UIDynamicSampler_Demo-UnityChan.png │ │ ├── UIDynamicSampler_Demo-UnityChan.png.meta │ │ ├── UIDynamicSampler_Demo.cs │ │ ├── UIDynamicSampler_Demo.cs.meta │ │ ├── UIDynamicSampler_Demo.unity │ │ └── UIDynamicSampler_Demo.unity.meta │ ├── UIDynamicSamplerIcon.png │ ├── UIDynamicSamplerIcon.png.meta │ ├── package.json │ └── package.json.meta ├── ProjectSettings ├── AudioManager.asset ├── BurstAotSettings_StandaloneOSX.json ├── ClusterInputManager.asset ├── CommonBurstAotSettings.json ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── SceneTemplateSettings.json ├── ShaderGraphSettings.asset ├── TagManager.asset ├── TimeManager.asset ├── URPProjectSettings.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset └── boot.config └── README.md /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.json] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_style = space 7 | indent_size = 2 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.asmdef] 12 | charset = utf-8 13 | end_of_line = lf 14 | indent_style = space 15 | indent_size = 4 16 | trim_trailing_whitespace = true 17 | insert_final_newline = true 18 | 19 | # C# files 20 | [*.cs] 21 | charset = utf-8 22 | end_of_line = lf 23 | indent_style = space 24 | indent_size = 4 25 | trim_trailing_whitespace = true 26 | insert_final_newline = true 27 | 28 | csharp_style_namespace_declarations = block_scoped 29 | csharp_style_implicit_object_creation_when_type_is_apparent = false 30 | resharper_object_creation_when_type_evident = explicitly_typed 31 | 32 | # Keep 33 | csharp_keep_existing_attribute_arrangement = true 34 | csharp_keep_existing_embedded_arrangement = true 35 | csharp_keep_user_linebreaks = true 36 | csharp_keep_existing_linebreaks = true 37 | csharp_place_simple_embedded_statement_on_same_line = false 38 | csharp_place_simple_blocks_on_single_line = false 39 | csharp_keep_existing_initializer_arrangement = true 40 | csharp_keep_existing_arrangement = true 41 | 42 | # Standard properties 43 | end_of_line = lf 44 | insert_final_newline = true 45 | 46 | # Brace preferences 47 | csharp_brace_style = next_line 48 | csharp_braces_for_ifelse = required_for_multiline_statement 49 | csharp_braces_for_for = required 50 | csharp_braces_for_foreach = required 51 | csharp_braces_for_while = required 52 | csharp_braces_for_dowhile = required 53 | csharp_braces_for_using = required 54 | csharp_case_block_braces = next_line 55 | csharp_initializer_braces = next_line 56 | 57 | # New line preferences 58 | csharp_new_line_before_open_brace = all 59 | csharp_new_line_before_else = true 60 | csharp_new_line_before_catch = true 61 | csharp_new_line_before_finally = true 62 | csharp_new_line_before_members_in_object_initializers = true 63 | csharp_new_line_before_members_in_anonymous_types = true 64 | csharp_new_line_between_query_expression_clauses = true 65 | 66 | # Indentation preferences 67 | csharp_indent_block_contents = true 68 | csharp_indent_braces = false 69 | csharp_indent_case_contents = true 70 | csharp_indent_case_contents_when_block = false 71 | csharp_indent_switch_labels = true 72 | csharp_indent_labels = one_less_than_current 73 | 74 | # Modifier preferences 75 | csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion 76 | 77 | # avoid this. unless absolutely necessary 78 | dotnet_style_qualification_for_field = false:suggestion 79 | dotnet_style_qualification_for_property = false:suggestion 80 | dotnet_style_qualification_for_method = false:suggestion 81 | dotnet_style_qualification_for_event = false:suggestion 82 | 83 | # Types: use keywords instead of BCL types, and permit var only when the type is clear 84 | csharp_style_var_for_built_in_types = true:suggestion 85 | csharp_style_var_when_type_is_apparent = true:none 86 | csharp_style_var_elsewhere = true:suggestion 87 | dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion 88 | dotnet_style_predefined_type_for_member_access = true:suggestion 89 | 90 | # 91 | resharper_keep_existing_embedded_arrangement = true 92 | 93 | # Arguments 94 | csharp_arguments_literal = named:suggestion 95 | csharp_arguments_string_literal = named:suggestion 96 | 97 | # Naming: public and protected fields -> camelCase 98 | dotnet_naming_rule.protected_public_fields.severity = suggestion 99 | dotnet_naming_rule.protected_public_fields.symbols = protected_public_fields 100 | dotnet_naming_rule.protected_public_fields.style = camel_case 101 | dotnet_naming_symbols.protected_public_fields.applicable_kinds = field, event 102 | dotnet_naming_symbols.protected_public_fields.applicable_accessibilities = public, protected 103 | dotnet_naming_style.camel_case.capitalization = camel_case 104 | 105 | # Naming: properties -> camelCase 106 | dotnet_naming_rule.properties.severity = suggestion 107 | dotnet_naming_rule.properties.symbols = properties 108 | dotnet_naming_rule.properties.style = camel_case 109 | dotnet_naming_symbols.properties.applicable_kinds = property 110 | 111 | # Naming: constant fields -> k_PascalCase 112 | dotnet_naming_rule.constant_fields.severity = suggestion 113 | dotnet_naming_rule.constant_fields.symbols = constant_fields 114 | dotnet_naming_rule.constant_fields.style = k_pascal_case 115 | dotnet_naming_symbols.constant_fields.applicable_kinds = field 116 | dotnet_naming_symbols.constant_fields.required_modifiers = const 117 | dotnet_naming_style.k_pascal_case.required_prefix = k_ 118 | dotnet_naming_style.k_pascal_case.capitalization = pascal_case 119 | 120 | # Naming: static fields -> s_PascalCase 121 | dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion 122 | dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields 123 | dotnet_naming_rule.static_fields_should_have_prefix.style = s_pascal_case 124 | dotnet_naming_symbols.static_fields.applicable_kinds = field, property 125 | dotnet_naming_symbols.static_fields.required_modifiers = static 126 | dotnet_naming_symbols.static_fields.applicable_accessibilities = private, internal, private_protected 127 | dotnet_naming_style.s_pascal_case.required_prefix = s_ 128 | dotnet_naming_style.s_pascal_case.capitalization = pascal_case 129 | 130 | # Naming: internal and private fields -> _camelCase 131 | dotnet_naming_rule.private_internal_fields.severity = suggestion 132 | dotnet_naming_rule.private_internal_fields.symbols = private_internal_fields 133 | dotnet_naming_rule.private_internal_fields.style = _camel_case 134 | dotnet_naming_symbols.private_internal_fields.applicable_kinds = field 135 | dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal 136 | dotnet_naming_style._camel_case.required_prefix = _ 137 | dotnet_naming_style._camel_case.capitalization = camel_case 138 | 139 | # Code style defaults 140 | dotnet_sort_system_directives_first = true 141 | csharp_preserve_single_line_statements = false 142 | csharp_prefer_static_local_function = true:suggestion 143 | csharp_prefer_simple_using_statement = false:none 144 | csharp_style_prefer_switch_expression = true:suggestion 145 | dotnet_style_readonly_field = true:suggestion 146 | 147 | # Expression-level preferences 148 | dotnet_style_object_initializer = true:suggestion 149 | dotnet_style_collection_initializer = true:suggestion 150 | dotnet_style_explicit_tuple_names = true:suggestion 151 | dotnet_style_coalesce_expression = true:suggestion 152 | dotnet_style_null_propagation = true:suggestion 153 | dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion 154 | dotnet_style_prefer_inferred_tuple_names = true:suggestion 155 | dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion 156 | dotnet_style_prefer_auto_properties = true:suggestion 157 | dotnet_style_prefer_conditional_expression_over_assignment = true:silent 158 | dotnet_style_prefer_conditional_expression_over_return = true:silent 159 | csharp_prefer_simple_default_expression = true:suggestion 160 | 161 | # Expression-bodied members 162 | csharp_style_expression_bodied_accessors = when_on_single_line:suggestion 163 | csharp_style_expression_bodied_methods = false:suggestion 164 | csharp_style_expression_bodied_constructors = false:suggestion 165 | csharp_style_expression_bodied_operators = false:suggestion 166 | csharp_style_expression_bodied_properties = when_on_single_line:suggestion 167 | csharp_style_expression_bodied_indexers = false:suggestion 168 | csharp_style_expression_bodied_lambdas = when_on_single_line:silent 169 | csharp_style_expression_bodied_local_functions = false:suggestion 170 | 171 | # Pattern matching 172 | csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion 173 | csharp_style_pattern_matching_over_as_with_null_check = true:suggestion 174 | csharp_style_inlined_variable_declaration = true:suggestion 175 | 176 | # Null checking preferences 177 | csharp_style_throw_expression = true:suggestion 178 | csharp_style_conditional_delegate_call = true:suggestion 179 | 180 | # Other features 181 | csharp_style_prefer_index_operator = false:none 182 | csharp_style_prefer_range_operator = false:none 183 | csharp_style_pattern_local_over_anonymous_function = false:none 184 | 185 | # Space preferences 186 | csharp_space_after_cast = false 187 | csharp_space_after_colon_in_inheritance_clause = true 188 | csharp_space_after_comma = true 189 | csharp_space_after_dot = false 190 | csharp_space_after_keywords_in_control_flow_statements = true 191 | csharp_space_after_semicolon_in_for_statement = true 192 | csharp_space_around_binary_operators = before_and_after 193 | csharp_space_around_declaration_statements = false 194 | csharp_space_before_colon_in_inheritance_clause = true 195 | csharp_space_before_comma = false 196 | csharp_space_before_dot = false 197 | csharp_space_before_open_square_brackets = false 198 | csharp_space_before_semicolon_in_for_statement = false 199 | csharp_space_between_empty_square_brackets = false 200 | csharp_space_between_method_call_empty_parameter_list_parentheses = false 201 | csharp_space_between_method_call_name_and_opening_parenthesis = false 202 | csharp_space_between_method_call_parameter_list_parentheses = false 203 | csharp_space_between_method_declaration_empty_parameter_list_parentheses = false 204 | csharp_space_between_method_declaration_name_and_open_parenthesis = false 205 | csharp_space_between_method_declaration_parameter_list_parentheses = false 206 | csharp_space_between_parentheses = false 207 | csharp_space_between_square_brackets = false 208 | 209 | # ReSharper inspection severities 210 | resharper_check_namespace_highlighting = none 211 | resharper_for_can_be_converted_to_foreach_highlighting = none 212 | resharper_xmldoc_indent_text = ZeroIndent 213 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # This is a comment. 2 | # Each line is a file pattern followed by one or more owners. 3 | # https://docs.github.com/ja/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners 4 | 5 | # Default owners 6 | * @mob-sakai 7 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: mob-sakai # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: mob_sakai # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: mob-sakai 7 | 8 | --- 9 | 10 | NOTE: Your issue may already be reported! Please search on the [issue tracker](../) before creating one. 11 | 12 | **Describe the bug** 13 | A clear and concise description of what the bug is. 14 | 15 | **To Reproduce** 16 | Steps to reproduce the behavior: 17 | 1. Go to '...' 18 | 2. Click on '....' 19 | 3. Scroll down to '....' 20 | 4. See error 21 | 22 | **Expected behavior** 23 | A clear and concise description of what you expected to happen. 24 | 25 | **Screenshots** 26 | If applicable, add screenshots to help explain your problem. 27 | 28 | **Environment (please complete the following information):** 29 | - Version [e.g. 1.0.0] 30 | - Platform: [e.g. Editor(Windows/Mac), Standalone(Windows/Mac), iOS, Android, WebGL] 31 | - Unity version: [e.g. 2018.2.8f1] 32 | - Build options: [e.g. IL2CPP, .Net 4.x, LWRP] 33 | 34 | **Additional context** 35 | Add any other context about the problem here. 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: mob-sakai 7 | 8 | --- 9 | 10 | NOTE: Your issue may already be reported! Please search on the [issue tracker](../) before creating one. 11 | 12 | **Is your feature request related to a problem? Please describe.** 13 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 14 | 15 | **Describe the solution you'd like** 16 | A clear and concise description of what you want to happen. 17 | 18 | **Describe alternatives you've considered** 19 | A clear and concise description of any alternative solutions or features you've considered. 20 | 21 | **Additional context** 22 | Add any other context or screenshots about the feature request here. 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: Ask a question about this project 4 | title: '' 5 | labels: question 6 | assignees: mob-sakai 7 | 8 | --- 9 | 10 | NOTE: Your issue may already be reported! Please search on the [issue tracker](../) before creating one. 11 | 12 | **Describe what help do you need** 13 | A description of the question. 14 | 15 | **Additional context** 16 | Add any other context or screenshots about the question here. 17 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 2 | # Pull Request Template 3 | 4 | ## Description 5 | 6 | - Please include a summary of the change and which issue is fixed. 7 | - Please also include relevant motivation and context. 8 | - List any dependencies that are required for this change. 9 | 10 | Fixes #{issue_number} 11 | 12 | ## Type of change 13 | 14 | Please write the commit message in the format corresponding to the change type. 15 | Please see [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) for more information. 16 | 17 | - [ ] Bug fix (non-breaking change which fixes an issue) 18 | - [ ] New feature (non-breaking change which adds functionality) 19 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 20 | - [ ] Update documentations 21 | - [ ] Others (refactoring, style changes, etc.) 22 | 23 | ## Test environment 24 | 25 | - Platform: [e.g. Editor(Windows/Mac), Standalone(Windows/Mac), iOS, Android, WebGL] 26 | - Unity version: [e.g. 2022.2.0f1] 27 | - Build options: [e.g. IL2CPP, .Net 4.x, URP/HDRP] 28 | 29 | ## Checklist 30 | 31 | - [ ] This pull request is for merging into the `develop` branch 32 | - [ ] My code follows the style guidelines of this project 33 | - [ ] I have performed a self-review of my own code 34 | - [ ] I have commented my code, particularly in hard-to-understand areas 35 | - [ ] I have made corresponding changes to the documentation 36 | - [ ] My changes generate no new warnings 37 | - [ ] I have checked my code and corrected any misspellings 38 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: 🚀 Deploy with Zip 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | zip: 7 | description: "The url to the zip file" 8 | required: true 9 | 10 | jobs: 11 | deploy: 12 | name: 🚀 Deploy 13 | runs-on: ubuntu-latest 14 | permissions: 15 | pages: write 16 | id-token: write 17 | steps: 18 | - name: 📦 Download zip file To '_site' 19 | run: | 20 | curl -L ${{ github.event.inputs.zip }} -o _site.zip 21 | unzip _site.zip -d _site 22 | find _site -name __MACOSX | xargs rm -rf 23 | 24 | - name: 📦 Upload '_site' 25 | uses: actions/upload-pages-artifact@v3 26 | 27 | - name: 🚀 Deploy To GitHub Pages 28 | uses: actions/deploy-pages@v4 29 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: 🔖 Release 2 | run-name: 🔖 Release (${{ github.ref_name }}) 3 | 4 | on: 5 | workflow_dispatch: 6 | push: 7 | branches: 8 | - preview 9 | - main 10 | - v*.x 11 | tags-ignore: 12 | - "**" 13 | 14 | jobs: 15 | release: 16 | name: 🔖 Release (${{ github.ref_name }}) 17 | runs-on: ubuntu-latest 18 | permissions: 19 | contents: write 20 | pull-requests: write 21 | issues: write 22 | outputs: 23 | channel: ${{ steps.release.outputs.new_release_channel }} 24 | released: ${{ steps.release.outputs.new_release_published }} 25 | tag: ${{ steps.release.outputs.new_release_git_tag }} 26 | steps: 27 | - name: 🚚 Checkout (${{ github.ref_name }}) 28 | uses: actions/checkout@v4 29 | 30 | - name: 🔖 Run semantic release 31 | uses: cycjimmy/semantic-release-action@v4 32 | id: release 33 | with: 34 | working_directory: Packages/src 35 | extra_plugins: | 36 | @semantic-release/changelog 37 | @semantic-release/git 38 | env: 39 | GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} 40 | 41 | - run: | 42 | echo "🔖 New release published: '${{ steps.release.outputs.new_release_published }}'" | tee -a $GITHUB_STEP_SUMMARY 43 | echo "🔖 New release channel: '${{ steps.release.outputs.new_release_channel }}'" | tee -a $GITHUB_STEP_SUMMARY 44 | echo "🔖 New release git tag: '${{ steps.release.outputs.new_release_git_tag }}'" | tee -a $GITHUB_STEP_SUMMARY 45 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | # Required secrets 2 | # UNITY_LICENSE: The contents of Unity license file 3 | # UNITY_EMAIL: Unity user email to login 4 | # UNITY_PASSWORD: Unity user password to login 5 | name: 🧪 Test 6 | run-name: 🧪 Test (${{ github.event.pull_request.title || github.ref_name }}) 7 | 8 | env: 9 | # MINIMUM_VERSION: The minimum version of Unity. 10 | MINIMUM_VERSION: 2020.3 11 | # EXCLUDE_FILTER: The excluded versions of Unity. 12 | EXCLUDE_FILTER: "(2020.2.0|2021.1|2023.2|2023.3)" 13 | 14 | on: 15 | workflow_dispatch: 16 | inputs: 17 | usePeriodVersions: 18 | description: "Use the period versions (.0f1, .10f1, 20f1, ...)." 19 | required: false 20 | default: "true" 21 | push: 22 | branches: 23 | - develop 24 | - "develop-*" 25 | tags: 26 | - "!*" 27 | paths-ignore: 28 | - "**.md" 29 | pull_request_target: 30 | types: 31 | - opened 32 | - reopened 33 | - synchronize 34 | paths-ignore: 35 | - "**.md" 36 | 37 | jobs: 38 | setup: 39 | name: ⚙️ Setup 40 | runs-on: ubuntu-latest 41 | outputs: 42 | unityVersions: ${{ steps.setup.outputs.unityVersions }} 43 | steps: 44 | - name: ⚙️ Find target Unity versions 45 | id: setup 46 | run: | 47 | echo "==== Target Unity Versions ====" 48 | LATEST_VERSIONS=`npx unity-changeset list --versions --latest-patch --min ${MINIMUM_VERSION} --json --all` 49 | if [ "${{ inputs.usePeriodVersions }}" = "true" ]; then 50 | ADDITIONAL_VERSIONS=`npx unity-changeset list --versions --grep '0f' --min ${MINIMUM_VERSION} --json` 51 | else 52 | ADDITIONAL_VERSIONS=[] 53 | fi 54 | 55 | VERSIONS=`echo "[${LATEST_VERSIONS}, ${ADDITIONAL_VERSIONS}]" \ 56 | | jq -c '[ flatten | sort | unique | .[] | select( test("${{ env.EXCLUDE_FILTER }}") | not ) ]'` 57 | echo "unityVersions=${VERSIONS}" | tee $GITHUB_OUTPUT 58 | 59 | test: 60 | name: 🧪 Run tests 61 | runs-on: ubuntu-latest 62 | permissions: 63 | checks: write 64 | contents: read 65 | needs: setup 66 | strategy: 67 | fail-fast: false 68 | max-parallel: 6 69 | matrix: 70 | unityVersion: ${{ fromJson(needs.setup.outputs.unityVersions) }} 71 | steps: 72 | - name: 🚚 Checkout ($${{ github.ref }}) 73 | if: github.event_name == 'push' 74 | uses: actions/checkout@v4 75 | 76 | - name: 🚚 Checkout pull request (pull_request_target) 77 | if: github.event_name == 'pull_request_target' 78 | uses: actions/checkout@v4 79 | with: 80 | ref: ${{ github.event.pull_request.head.sha }} 81 | fetch-depth: 0 82 | 83 | - name: 🚚 Marge pull request (pull_request_target) 84 | if: github.event_name == 'pull_request_target' 85 | run: | 86 | git config user.name "GitHub Actions" 87 | git config user.email "actions@github.com" 88 | git merge origin/${{ github.event.pull_request.base.ref }} --no-edit 89 | 90 | - name: 📥 Cache library 91 | uses: actions/cache@v4 92 | with: 93 | path: Library 94 | key: Library-${{ matrix.unityVersion }}-${{ github.event.pull_request.head.sha || github.sha }} 95 | restore-keys: | 96 | Library-${{ matrix.unityVersion }}- 97 | Library- 98 | 99 | - name: 🛠️ Build Unity Project (Test) 100 | uses: game-ci/unity-builder@v4 101 | timeout-minutes: 45 102 | with: 103 | customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} 104 | targetPlatform: StandaloneLinux64 105 | allowDirtyBuild: true 106 | customParameters: -nographics 107 | env: 108 | UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} 109 | UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} 110 | UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} 111 | 112 | - name: 🧪 Run tests 113 | uses: game-ci/unity-test-runner@v4 114 | timeout-minutes: 45 115 | with: 116 | customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} 117 | # unityVersion: ${{ matrix.unityVersion }} 118 | customParameters: -nographics 119 | checkName: ${{ matrix.unityVersion }} Test Results 120 | githubToken: ${{ github.token }} 121 | env: 122 | UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} 123 | UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} 124 | UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} 125 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows 2 | Thumbs.db 3 | Desktop.ini 4 | /*.csproj 5 | /*.sln 6 | 7 | # macOS 8 | .DS_Store 9 | 10 | # Vim 11 | *.swp 12 | 13 | # Unity 14 | /Logs 15 | /Library 16 | /Temp 17 | Assets/Plugins.meta 18 | Assets/Plugins/ 19 | 20 | # VS 21 | .vs/ 22 | .vscode/ 23 | .idea/ 24 | obj/ 25 | bin/ 26 | UserSettings/ 27 | *.app/ 28 | Build/ 29 | Assets/TextMeshPro Support* 30 | -------------------------------------------------------------------------------- /Assets/ProjectSettings.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 136794e243a01480cab49b97b710629b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ProjectSettings/NanoMonitor.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: 194d2f2eb25c64ec0af5c323c74eb518, type: 3} 13 | m_Name: NanoMonitor 14 | m_EditorClassIdentifier: 15 | m_NanoMonitorEnabled: 1 16 | m_BootSceneNameRegex: .* 17 | m_DevelopmentBuildOnly: 0 18 | m_EnabledInEditor: 1 19 | m_AlwaysIncludeAssembly: 1 20 | m_InstantiateOnLoad: 1 21 | m_Prefab: {fileID: 4567906826058368312, guid: 7cebff2d255b9433cbe23b243c193329, type: 3} 22 | m_Interval: 0.5 23 | m_Anchor: 0 24 | m_Width: 800 25 | m_HelpUrl: https://github.com/mob-sakai/UIDynamicSampler 26 | m_CustomMonitorItems: 27 | - m_Format: Screen:{0}x{1} 28 | m_Arg0: 29 | m_Path: UnityEngine.Screen, UnityEngine.CoreModule;width 30 | m_Arg1: 31 | m_Path: UnityEngine.Screen, UnityEngine.CoreModule;height 32 | m_Arg2: 33 | m_Path: 34 | -------------------------------------------------------------------------------- /Assets/ProjectSettings/NanoMonitor.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8c82bda8115ae4eea9f38fa08bb92b35 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Samples: -------------------------------------------------------------------------------- 1 | ../Packages/src/Samples~ -------------------------------------------------------------------------------- /Assets/Samples.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: da4326bcde32a483485a51018fb4607b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e9a477d4a32184f16b50f56f7de5fa4e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Tests/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 962016ab124fa4720be1e24ff58c8522 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Tests/Editor/EditorTests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "EditorTests", 3 | "references": [ 4 | "Coffee.UIEffect" 5 | ], 6 | "optionalUnityReferences": [ 7 | "TestAssemblies" 8 | ], 9 | "includePlatforms": [ 10 | "Editor" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /Assets/Tests/Editor/EditorTests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 19b9538cf71f24df4966f51fc9d8653a 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Tests/Editor/SampleTests.cs: -------------------------------------------------------------------------------- 1 | using NUnit.Framework; 2 | 3 | public class SampleTests 4 | { 5 | [Test] 6 | public void SampleTest() 7 | { 8 | Assert.AreEqual(1, 1); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Assets/Tests/Editor/SampleTests.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7c5d391ce913d41fb9118c3d28b21059 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for 6 | everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity 7 | and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, 8 | or sexual identity and orientation. 9 | 10 | We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to a positive environment for our community include: 15 | 16 | * Demonstrating empathy and kindness toward other people 17 | * Being respectful of differing opinions, viewpoints, and experiences 18 | * Giving and gracefully accepting constructive feedback 19 | * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience 20 | * Focusing on what is best not just for us as individuals, but for the overall community 21 | 22 | Examples of unacceptable behavior include: 23 | 24 | * The use of sexualized language or imagery, and sexual attention or 25 | advances of any kind 26 | * Trolling, insulting or derogatory comments, and personal or political attacks 27 | * Public or private harassment 28 | * Publishing others' private information, such as a physical or email 29 | address, without their explicit permission 30 | * Other conduct which could reasonably be considered inappropriate in a 31 | professional setting 32 | 33 | ## Enforcement Responsibilities 34 | 35 | Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take 36 | appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, 37 | or harmful. 38 | 39 | Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, 40 | issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for 41 | moderation decisions when appropriate. 42 | 43 | ## Scope 44 | 45 | This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing 46 | the community in public spaces. Examples of representing our community include using an official e-mail address, posting 47 | via an official social media account, or acting as an appointed representative at an online or offline event. 48 | 49 | ## Enforcement 50 | 51 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible 52 | for enforcement at sakai861104@gmail.com. All complaints will be reviewed and investigated promptly and fairly. 53 | 54 | All community leaders are obligated to respect the privacy and security of the reporter of any incident. 55 | 56 | ## Enforcement Guidelines 57 | 58 | Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem 59 | in violation of this Code of Conduct: 60 | 61 | ### 1. Correction 62 | 63 | **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the 64 | community. 65 | 66 | **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation 67 | and an explanation of why the behavior was inappropriate. A public apology may be requested. 68 | 69 | ### 2. Warning 70 | 71 | **Community Impact**: A violation through a single incident or series of actions. 72 | 73 | **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including 74 | unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding 75 | interactions in community spaces as well as external channels like social media. Violating these terms may lead to a 76 | temporary or permanent ban. 77 | 78 | ### 3. Temporary Ban 79 | 80 | **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. 81 | 82 | **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified 83 | period of time. No public or private interaction with the people involved, including unsolicited interaction with those 84 | enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. 85 | 86 | ### 4. Permanent Ban 87 | 88 | **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate 89 | behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. 90 | 91 | **Consequence**: A permanent ban from any sort of public interaction within the community. 92 | 93 | ## Attribution 94 | 95 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, 96 | available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 97 | 98 | Community Impact Guidelines were inspired 99 | by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). 100 | 101 | [homepage]: https://www.contributor-covenant.org 102 | 103 | For answers to common questions about this code of conduct, see the FAQ at 104 | https://www.contributor-covenant.org/faq. Translations are available 105 | at https://www.contributor-covenant.org/translations. -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## How to Contribute 4 | 5 | #### Code of Conduct 6 | 7 | This repository has adopted the Contributor Covenant as it's 8 | Code of Conduct. It is expected that participants adhere to it. 9 | 10 | #### Proposing a Change 11 | 12 | If you are unsure about whether or not a change is desired, 13 | you can create an issue. This is useful because it creates 14 | the possibility for a discussion that's visible to everyone. 15 | 16 | When fixing a bug it is fine to submit a pull request right away. 17 | 18 | #### Sending a Pull Request 19 | 20 | Steps to be performed to submit a pull request: 21 | 22 | 1. Fork the repository. 23 | 2. Clone the repository. 24 | 3. Checkout `develop` branch. 25 | 4. Develop the package. 26 | 5. Test the package with the test runner (`Window > Generals > Test Runner`). 27 | 6. Commit with a message based 28 | on [Angular Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) as follows: 29 | - `fix:` fix a bug 30 | - `feat:` new feature 31 | - `docs:` changes only in documentation 32 | - `style:` changes only in formatting, white-space, etc 33 | - `refactor:` changes only in code structure (extract method, rename variable, move method, etc) 34 | - `perf:` changes only in code performance 35 | - `test:` add or update tests 36 | - `chore:` changes to the build process or auxiliary tools and libraries such as documentation generation 37 | 38 | 7. Create a pull request on GitHub. Fill out the description, link any related issues and submit your pull request. 39 | 40 | #### License 41 | 42 | By contributing to this repository, you agree that your contributions will be licensed under its MIT license. -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright 2025 mob-sakai 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 4 | documentation files (the "Software"), to deal in the Software without restriction, including without limitation the 5 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit 6 | persons to whom the Software is furnished to do so, subject to the following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the 9 | Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 12 | WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 13 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 14 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.coffee.development": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/Development", 4 | "com.coffee.nano-monitor": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/NanoMonitor", 5 | "com.unity.ide.rider": "3.0.34", 6 | "com.unity.test-framework": "1.1.33" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.coffee.development": { 4 | "version": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/Development", 5 | "depth": 0, 6 | "source": "git", 7 | "dependencies": {}, 8 | "hash": "2bd2bf356dd692a39de9db2ff11faaf79fbfaea3" 9 | }, 10 | "com.coffee.nano-monitor": { 11 | "version": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/NanoMonitor", 12 | "depth": 0, 13 | "source": "git", 14 | "dependencies": { 15 | "com.unity.ugui": "1.0.0" 16 | }, 17 | "hash": "2bd2bf356dd692a39de9db2ff11faaf79fbfaea3" 18 | }, 19 | "com.coffee.ui-dynamic-sampler": { 20 | "version": "file:src", 21 | "depth": 0, 22 | "source": "embedded", 23 | "dependencies": { 24 | "com.unity.ugui": "1.0.0" 25 | } 26 | }, 27 | "com.unity.ext.nunit": { 28 | "version": "1.0.6", 29 | "depth": 1, 30 | "source": "registry", 31 | "dependencies": {}, 32 | "url": "https://packages.unity.com" 33 | }, 34 | "com.unity.ide.rider": { 35 | "version": "3.0.34", 36 | "depth": 0, 37 | "source": "registry", 38 | "dependencies": { 39 | "com.unity.ext.nunit": "1.0.6" 40 | }, 41 | "url": "https://packages.unity.com" 42 | }, 43 | "com.unity.test-framework": { 44 | "version": "1.1.33", 45 | "depth": 0, 46 | "source": "registry", 47 | "dependencies": { 48 | "com.unity.ext.nunit": "1.0.6", 49 | "com.unity.modules.imgui": "1.0.0", 50 | "com.unity.modules.jsonserialize": "1.0.0" 51 | }, 52 | "url": "https://packages.unity.com" 53 | }, 54 | "com.unity.ugui": { 55 | "version": "1.0.0", 56 | "depth": 1, 57 | "source": "builtin", 58 | "dependencies": { 59 | "com.unity.modules.ui": "1.0.0", 60 | "com.unity.modules.imgui": "1.0.0" 61 | } 62 | }, 63 | "com.unity.modules.imgui": { 64 | "version": "1.0.0", 65 | "depth": 1, 66 | "source": "builtin", 67 | "dependencies": {} 68 | }, 69 | "com.unity.modules.jsonserialize": { 70 | "version": "1.0.0", 71 | "depth": 1, 72 | "source": "builtin", 73 | "dependencies": {} 74 | }, 75 | "com.unity.modules.ui": { 76 | "version": "1.0.0", 77 | "depth": 2, 78 | "source": "builtin", 79 | "dependencies": {} 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /Packages/src/.coffee.internal.sed: -------------------------------------------------------------------------------- 1 | s/Coffee.Internal/Coffee.UIDynamicSamplerInternal/g 2 | -------------------------------------------------------------------------------- /Packages/src/.releaserc.json: -------------------------------------------------------------------------------- 1 | { 2 | "branches": [ 3 | "main", 4 | "[0-9]+.x", 5 | { 6 | "name": "preview", 7 | "prerelease": true 8 | } 9 | ], 10 | "tagFormat": "${version}", 11 | "plugins": [ 12 | "@semantic-release/commit-analyzer", 13 | "@semantic-release/release-notes-generator", 14 | "@semantic-release/changelog", 15 | [ 16 | "@semantic-release/npm", 17 | { 18 | "npmPublish": false 19 | } 20 | ], 21 | "@semantic-release/git", 22 | "@semantic-release/github" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /Packages/src/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 1.0.0 (2025-03-10) 2 | 3 | 4 | ### Features 5 | 6 | * first release ([da17216](https://github.com/mob-sakai/UIDynamicSampler/commit/da17216b4dc01fbcb806f1a552bdce2ad932c952)) 7 | -------------------------------------------------------------------------------- /Packages/src/CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 312b29d1b514443f89bb73b7625131c7 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/src/LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright 2025 mob-sakai 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Packages/src/LICENSE.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 015483b30da5947229b747c5f6c4bbd3 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/src/README.md: -------------------------------------------------------------------------------- 1 | # UI Dynamic Sampler 2 | 3 | [![](https://img.shields.io/npm/v/com.coffee.ui-dynamic-sampler?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/com.coffee.ui-dynamic-sampler/) 4 | [![](https://img.shields.io/github/v/release/mob-sakai/UIDynamicSampler?include_prereleases)](https://github.com/mob-sakai/UIDynamicSampler/releases) 5 | [![](https://img.shields.io/github/release-date/mob-sakai/UIDynamicSampler.svg)](https://github.com/mob-sakai/UIDynamicSampler/releases) 6 | ![](https://img.shields.io/badge/Unity-2020.3+-57b9d3.svg?style=flat&logo=unity) 7 | ![](https://img.shields.io/badge/Unity-6000.0+-57b9d3.svg?style=flat&logo=unity) 8 | [![](https://img.shields.io/github/license/mob-sakai/UIDynamicSampler.svg)](https://github.com/mob-sakai/UIDynamicSampler/blob/main/LICENSE.md) 9 | [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-orange.svg)](http://makeapullrequest.com) 10 | [![](https://img.shields.io/github/watchers/mob-sakai/UIDynamicSampler.svg?style=social&label=Watch)](https://github.com/mob-sakai/UIDynamicSampler/subscription) 11 | [![](https://img.shields.io/twitter/follow/mob_sakai.svg?label=Follow&style=social)](https://twitter.com/intent/follow?screen_name=mob_sakai) 12 | 13 | << [📝 Description](#-description-) | [📌 Key Features](#-key-features) | [🎮 Demo](#-demo) | [⚙ Installation](#-installation) | [🚀 Usage](#-usage) | [🤝 Contributing](#-contributing) >> 14 | 15 | ## 📝 Description 16 | 17 | This package provides a component to reduce jaggies in UI elements. 18 | 19 | For example, when displaying a 2048x2048 texture at just 100x100 pixels, diagonal lines may appear jagged. 20 | This effect is particularly noticeable on low-DPI displays (such as standard non-Retina screens) where individual pixels are more visible. 21 | 22 | ![](https://github.com/user-attachments/assets/7eb7527e-5a08-417b-907d-2f94dda7d592) 23 | 24 | In such cases, jaggies can be reduced by generating a thumbnail texture that matches the display size or by using mipmaps. 25 | However, these approaches increase asset size and complicate asset management. 26 | Moreover, depending on the UI element's size, these approaches may cause blurring or fail to sufficiently reduce jaggies. 27 | 28 | ![](https://github.com/user-attachments/assets/042dcf2b-7220-47d6-9864-7c1bb59a9a2b) 29 | 30 | The `UIDynamicSampler` component dynamically pre-samples textures based on the current UI element size, effectively reducing jaggies without increasing asset size. 31 | Additionally, it caches sampling results to maintain performance. 32 | 33 | ![](https://github.com/user-attachments/assets/804b5995-1dd3-4569-a1b5-3e9030818c3b) 34 | 35 | - [📌 Key Features](#-key-features) 36 | - [🎮 Demo](#-demo) 37 | - [⚙ Installation](#-installation) 38 | - [Install via OpenUPM](#install-via-openupm) 39 | - [Install via UPM (with Package Manager UI)](#install-via-upm-with-package-manager-ui) 40 | - [Install via UPM (Manually)](#install-via-upm-manually) 41 | - [Install as Embedded Package](#install-as-embedded-package) 42 | - [🚀 Usage](#-usage) 43 | - [Getting Started](#getting-started) 44 | - [🤝 Contributing](#-contributing) 45 | - [Issues](#issues) 46 | - [Pull Requests](#pull-requests) 47 | - [Support](#support) 48 | - [License](#license) 49 | - [Author](#author) 50 | - [See Also](#see-also) 51 | 52 |

53 | 54 | ## 📌 Key Features 55 | 56 | - **Real-time anti-jaggies for uGUI**: Dynamically samples textures based on UI element size to reduce jaggies. 57 | - **No Increase in Asset Size**: Performs sampling dynamically, eliminating the need for additional thumbnails or mipmaps, keeping asset management simple. 58 | - **High Performance with Caching**: Caches sampling results to reduce unnecessary computations. 59 | - **Improved Visibility on Low-DPI Displays**: Provides clearer rendering even on lower-resolution screens where jaggies are more noticeable. 60 | - **Easy to Use**: Simply add the `UIDynamicSampler` component to apply the effect. 61 | 62 |

63 | 64 | ## 🎮 Demo 65 | 66 | ![](https://github.com/user-attachments/assets/ed4393d2-276e-4672-b9c7-bd450d1219d5) 67 | 68 | [WebGL Demo](https://mob-sakai.github.io/UIDynamicSampler/) 69 | 70 |

71 | 72 | ## ⚙ Installation 73 | 74 | _This package requires **Unity 2020.3 or later**._ 75 | 76 | ### Install via OpenUPM 77 | 78 | - This package is available on [OpenUPM](https://openupm.com/packages/com.coffee.ui-dynamic-sampler/) package 79 | registry. 80 | - This is the preferred method of installation, as you can easily receive updates as they're released. 81 | - If you have [openupm-cli](https://github.com/openupm/openupm-cli) installed, then run the following command in your 82 | project's directory: 83 | ``` 84 | openupm add com.coffee.ui-dynamic-sampler 85 | ``` 86 | - To update the package, use Package Manager UI (`Window > Package Manager`) or run the following command with 87 | `@{version}`: 88 | ``` 89 | openupm add com.coffee.ui-dynamic-sampler@1.0.0 90 | ``` 91 | 92 | ### Install via UPM (with Package Manager UI) 93 | 94 | - Click `Window > Package Manager` to open Package Manager UI. 95 | - Click `+ > Add package from git URL...` and input the repository URL: 96 | `https://github.com/mob-sakai/UIDynamicSampler.git?path=Packages/src` 97 | ![](https://github.com/user-attachments/assets/f88f47ad-c606-44bd-9e86-ee3f72eac548) 98 | - To update the package, change suffix `#{version}` to the target version. 99 | - e.g. `https://github.com/mob-sakai/UIDynamicSampler.git?path=Packages/src#1.0.0` 100 | 101 | ### Install via UPM (Manually) 102 | 103 | - Open the `Packages/manifest.json` file in your project. Then add this package somewhere in the `dependencies` block: 104 | ```json 105 | { 106 | "dependencies": { 107 | "com.coffee.ui-dynamic-sampler": "https://github.com/mob-sakai/UIDynamicSampler.git?path=Packages/src", 108 | ... 109 | } 110 | } 111 | ``` 112 | 113 | - To update the package, change suffix `#{version}` to the target version. 114 | - e.g. 115 | `"com.coffee.ui-dynamic-sampler": "https://github.com/mob-sakai/UIDynamicSampler.git?path=Packages/src#1.0.0",` 116 | 117 | ### Install as Embedded Package 118 | 119 | 1. Download the `Source code (zip)` file from [Releases](https://github.com/mob-sakai/UIDynamicSampler/releases) and 120 | extract it. 121 | 2. Move the `/Packages/src` directory into your project's `Packages` directory. 122 | ![](https://github.com/user-attachments/assets/187cbcbe-5922-4ed5-acec-cf19aa17d208) 123 | - You can rename the `src` directory if needed. 124 | - If you intend to fix bugs or add features, installing it as an embedded package is recommended. 125 | - To update the package, re-download it and replace the existing contents. 126 | 127 |

128 | 129 | ## 🚀 Usage 130 | 131 | ### Getting Started 132 | 133 | 1. [Install the package](#-installation). 134 | 135 | 2. Add a `UIDynamicSampler` component to a UI element (Image, RawImage) from the 136 | `Add Component` in the inspector or `Component > UI > UIDynamicSampler` menu. 137 | ![](https://github.com/user-attachments/assets/d4c886c5-d4bb-47fa-b5ad-f65cc765a0e5) 138 | 139 | 3. Compare how jaggies appear in low DPI display environments. 140 | ![](https://github.com/user-attachments/assets/c61a5cde-f67c-43d1-a31c-cfe86cb3a556) 141 | 142 | 4. Enjoy! 143 | 144 |

145 | 146 | ## 🤝 Contributing 147 | 148 | ### Issues 149 | 150 | Issues are incredibly valuable to this project: 151 | 152 | - Ideas provide a valuable source of contributions that others can make. 153 | - Problems help identify areas where this project needs improvement. 154 | - Questions indicate where contributors can enhance the user experience. 155 | 156 | ### Pull Requests 157 | 158 | Pull requests offer a fantastic way to contribute your ideas to this repository. 159 | Please refer to [CONTRIBUTING.md](https://github.com/mob-sakai/UIDynamicSampler/tree/develop/CONTRIBUTING.md) 160 | and [develop branch](https://github.com/mob-sakai/UIDynamicSampler/tree/develop). 161 | 162 | ### Support 163 | 164 | This is an open-source project developed during my spare time. 165 | If you appreciate it, consider supporting me. 166 | Your support allows me to dedicate more time to development. 😊 167 | 168 | [![](https://user-images.githubusercontent.com/12690315/66942881-03686280-f085-11e9-9586-fc0b6011029f.png)](https://github.com/users/mob-sakai/sponsorship) 169 | [![](https://user-images.githubusercontent.com/12690315/50731629-3b18b480-11ad-11e9-8fad-4b13f27969c1.png)](https://www.patreon.com/join/2343451?) 170 | 171 |

172 | 173 | ## License 174 | 175 | * MIT 176 | 177 | ## Author 178 | 179 | * ![](https://user-images.githubusercontent.com/12690315/96986908-434a0b80-155d-11eb-8275-85138ab90afa.png) [mob-sakai](https://github.com/mob-sakai) [![](https://img.shields.io/twitter/follow/mob_sakai.svg?label=Follow&style=social)](https://twitter.com/intent/follow?screen_name=mob_sakai) ![GitHub followers](https://img.shields.io/github/followers/mob-sakai?style=social) 180 | 181 | ## See Also 182 | 183 | * GitHub page : https://github.com/mob-sakai/UIDynamicSampler 184 | * Releases : https://github.com/mob-sakai/UIDynamicSampler/releases 185 | * Issue tracker : https://github.com/mob-sakai/UIDynamicSampler/issues 186 | * Change log : https://github.com/mob-sakai/UIDynamicSampler/blob/main/Packages/src/CHANGELOG.md 187 | -------------------------------------------------------------------------------- /Packages/src/README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c089f033c9f584135b0fd1139f7f254b 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/src/Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4fd04b098633e4ddcabfcaa2ac62a98a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Coffee.UIDynamicSampler.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Coffee.UIDynamicSampler", 3 | "rootNamespace": "", 4 | "references": [ 5 | "GUID:15fc0a57446b3144c949da3e2b9737a9" 6 | ], 7 | "includePlatforms": [], 8 | "excludePlatforms": [], 9 | "allowUnsafeCode": false, 10 | "overrideReferences": false, 11 | "precompiledReferences": [], 12 | "autoReferenced": true, 13 | "defineConstraints": [], 14 | "versionDefines": [ 15 | { 16 | "name": "com.unity.render-pipelines.universal", 17 | "expression": "1.0.0", 18 | "define": "URP_ENABLE" 19 | } 20 | ], 21 | "noEngineReferences": false 22 | } 23 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Coffee.UIDynamicSampler.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d59d3758475e046c29b93099a3440667 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 96e4775123971414386eae52c90e469c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1915439cf15e540b08900d6f5fba111a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/FastAction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.Profiling; 5 | 6 | namespace Coffee.UIDynamicSamplerInternal 7 | { 8 | /// 9 | /// Base class for a fast action. 10 | /// 11 | internal class FastActionBase 12 | { 13 | private static readonly InternalObjectPool> s_NodePool = 14 | new InternalObjectPool>(() => new LinkedListNode(default), _ => true, 15 | x => x.Value = default); 16 | 17 | private readonly LinkedList _delegates = new LinkedList(); 18 | 19 | /// 20 | /// Adds a delegate to the action. 21 | /// 22 | public void Add(T rhs) 23 | { 24 | if (rhs == null) return; 25 | Profiler.BeginSample("(COF)[FastAction] Add Action"); 26 | var node = s_NodePool.Rent(); 27 | node.Value = rhs; 28 | _delegates.AddLast(node); 29 | Profiler.EndSample(); 30 | } 31 | 32 | /// 33 | /// Removes a delegate from the action. 34 | /// 35 | public void Remove(T rhs) 36 | { 37 | if (rhs == null) return; 38 | Profiler.BeginSample("(COF)[FastAction] Remove Action"); 39 | var node = _delegates.Find(rhs); 40 | if (node != null) 41 | { 42 | _delegates.Remove(node); 43 | s_NodePool.Return(ref node); 44 | } 45 | 46 | Profiler.EndSample(); 47 | } 48 | 49 | /// 50 | /// Invokes the action with a callback function. 51 | /// 52 | protected void Invoke(Action callback) 53 | { 54 | var node = _delegates.First; 55 | while (node != null) 56 | { 57 | try 58 | { 59 | callback(node.Value); 60 | } 61 | catch (Exception e) 62 | { 63 | Debug.LogException(e); 64 | } 65 | 66 | node = node.Next; 67 | } 68 | } 69 | 70 | public void Clear() 71 | { 72 | _delegates.Clear(); 73 | } 74 | } 75 | 76 | /// 77 | /// A fast action without parameters. 78 | /// 79 | internal class FastAction : FastActionBase 80 | { 81 | /// 82 | /// Invoke all the registered delegates. 83 | /// 84 | public void Invoke() 85 | { 86 | Invoke(action => action.Invoke()); 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/FastAction.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b2355798db9f74066b5980cf3941132e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/Logging.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using UnityEngine; 4 | using Object = UnityEngine.Object; 5 | #if ENABLE_COFFEE_LOGGER 6 | using System.Reflection; 7 | using System.Collections.Generic; 8 | #else 9 | using Conditional = System.Diagnostics.ConditionalAttribute; 10 | #endif 11 | 12 | namespace Coffee.UIDynamicSamplerInternal 13 | { 14 | internal static class Logging 15 | { 16 | #if !ENABLE_COFFEE_LOGGER 17 | private const string k_DisableSymbol = "DISABLE_COFFEE_LOGGER"; 18 | 19 | [Conditional(k_DisableSymbol)] 20 | #endif 21 | private static void Log_Internal(LogType type, object tag, object message, Object context) 22 | { 23 | #if ENABLE_COFFEE_LOGGER 24 | AppendTag(s_Sb, tag); 25 | s_Sb.Append(message); 26 | switch (type) 27 | { 28 | case LogType.Error: 29 | case LogType.Assert: 30 | case LogType.Exception: 31 | Debug.LogError(s_Sb, context); 32 | break; 33 | case LogType.Warning: 34 | Debug.LogWarning(s_Sb, context); 35 | break; 36 | case LogType.Log: 37 | Debug.Log(s_Sb, context); 38 | break; 39 | } 40 | 41 | s_Sb.Length = 0; 42 | #endif 43 | } 44 | 45 | #if !ENABLE_COFFEE_LOGGER 46 | [Conditional(k_DisableSymbol)] 47 | #endif 48 | public static void LogIf(bool enable, object tag, object message, Object context = null) 49 | { 50 | if (!enable) return; 51 | Log_Internal(LogType.Log, tag, message, context ? context : tag as Object); 52 | } 53 | 54 | #if !ENABLE_COFFEE_LOGGER 55 | [Conditional(k_DisableSymbol)] 56 | #endif 57 | public static void Log(object tag, object message, Object context = null) 58 | { 59 | Log_Internal(LogType.Log, tag, message, context ? context : tag as Object); 60 | } 61 | 62 | #if !ENABLE_COFFEE_LOGGER 63 | [Conditional(k_DisableSymbol)] 64 | #endif 65 | public static void LogWarning(object tag, object message, Object context = null) 66 | { 67 | Log_Internal(LogType.Warning, tag, message, context ? context : tag as Object); 68 | } 69 | 70 | public static void LogError(object tag, object message, Object context = null) 71 | { 72 | #if ENABLE_COFFEE_LOGGER 73 | Log_Internal(LogType.Error, tag, message, context ? context : tag as Object); 74 | #else 75 | Debug.LogError($"{tag}: {message}", context); 76 | #endif 77 | } 78 | 79 | #if !ENABLE_COFFEE_LOGGER 80 | [Conditional(k_DisableSymbol)] 81 | #endif 82 | public static void LogMulticast(Type type, string fieldName, object instance = null, string message = null) 83 | { 84 | #if ENABLE_COFFEE_LOGGER 85 | AppendTag(s_Sb, instance ?? type); 86 | 87 | var handler = type 88 | .GetField(fieldName, 89 | BindingFlags.Static | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic) 90 | ?.GetValue(instance); 91 | 92 | var list = ((MulticastDelegate)handler)?.GetInvocationList() ?? Array.Empty(); 93 | s_Sb.Append(""); 94 | s_Sb.Append(type.Name); 95 | s_Sb.Append("."); 96 | s_Sb.Append(fieldName); 97 | s_Sb.Append(" has "); 98 | s_Sb.Append(list.Length); 99 | s_Sb.Append(" callbacks"); 100 | if (message != null) 101 | { 102 | s_Sb.Append(" ("); 103 | s_Sb.Append(message); 104 | s_Sb.Append(")"); 105 | } 106 | 107 | s_Sb.Append(":"); 108 | 109 | for (var i = 0; i < list.Length; i++) 110 | { 111 | s_Sb.Append("\n - "); 112 | s_Sb.Append(list[i].Method.DeclaringType?.Name); 113 | s_Sb.Append("."); 114 | s_Sb.Append(list[i].Method.Name); 115 | } 116 | 117 | Debug.Log(s_Sb); 118 | s_Sb.Length = 0; 119 | #endif 120 | } 121 | 122 | #if !ENABLE_COFFEE_LOGGER 123 | [Conditional(k_DisableSymbol)] 124 | #endif 125 | private static void AppendTag(StringBuilder sb, object tag) 126 | { 127 | #if ENABLE_COFFEE_LOGGER 128 | try 129 | { 130 | sb.Append("f"); 131 | sb.Append(Time.frameCount); 132 | sb.Append(":["); 135 | 136 | switch (tag) 137 | { 138 | case string name: 139 | sb.Append(name); 140 | break; 141 | case Type type: 142 | AppendType(sb, type); 143 | break; 144 | case Object uObject: 145 | AppendType(sb, tag.GetType()); 146 | sb.Append(" #"); 147 | sb.Append(uObject.name); 148 | break; 149 | default: 150 | AppendType(sb, tag.GetType()); 151 | break; 152 | } 153 | 154 | sb.Append("] "); 155 | } 156 | catch 157 | { 158 | sb.Append("f"); 159 | sb.Append(Time.frameCount); 160 | sb.Append(":["); 161 | sb.Append(tag); 162 | sb.Append("] "); 163 | } 164 | #endif 165 | } 166 | 167 | #if !ENABLE_COFFEE_LOGGER 168 | [Conditional(k_DisableSymbol)] 169 | #endif 170 | private static void AppendType(StringBuilder sb, Type type) 171 | { 172 | #if ENABLE_COFFEE_LOGGER 173 | if (s_TypeNameCache.TryGetValue(type, out var name)) 174 | { 175 | sb.Append(name); 176 | return; 177 | } 178 | 179 | // New type found 180 | var start = sb.Length; 181 | if (0 < start && sb[start - 1] == '<' && (type.Name == "Material" || type.Name == "Color")) 182 | { 183 | sb.Append('@'); 184 | } 185 | 186 | sb.Append(type.Name); 187 | if (type.IsGenericType) 188 | { 189 | sb.Length -= 2; 190 | sb.Append("<"); 191 | foreach (var gType in type.GetGenericArguments()) 192 | { 193 | AppendType(sb, gType); 194 | sb.Append(", "); 195 | } 196 | 197 | sb.Length -= 2; 198 | sb.Append(">"); 199 | } 200 | 201 | s_TypeNameCache.Add(type, sb.ToString(start, sb.Length - start)); 202 | #endif 203 | } 204 | 205 | #if !ENABLE_COFFEE_LOGGER 206 | [Conditional(k_DisableSymbol)] 207 | #endif 208 | private static void AppendReadableCode(StringBuilder sb, object tag) 209 | { 210 | #if ENABLE_COFFEE_LOGGER 211 | int hash; 212 | try 213 | { 214 | switch (tag) 215 | { 216 | case string text: 217 | hash = text.GetHashCode(); 218 | break; 219 | case Type type: 220 | type = type.IsGenericType ? type.GetGenericTypeDefinition() : type; 221 | hash = type.FullName?.GetHashCode() ?? 0; 222 | break; 223 | default: 224 | hash = tag.GetType().FullName?.GetHashCode() ?? 0; 225 | break; 226 | } 227 | } 228 | catch 229 | { 230 | sb.Append("FFFFFF"); 231 | return; 232 | } 233 | 234 | hash = hash & (s_Codes.Length - 1); 235 | if (s_Codes[hash] == null) 236 | { 237 | var hue = hash / (float)s_Codes.Length; 238 | var modifier = 1f - Mathf.Clamp01(Mathf.Abs(hue - 0.65f) / 0.2f); 239 | var saturation = 0.7f + modifier * -0.2f; 240 | var value = 0.8f + modifier * 0.3f; 241 | s_Codes[hash] = ColorUtility.ToHtmlStringRGB(Color.HSVToRGB(hue, saturation, value)); 242 | } 243 | 244 | sb.Append(s_Codes[hash]); 245 | #endif 246 | } 247 | 248 | #if ENABLE_COFFEE_LOGGER 249 | private static readonly StringBuilder s_Sb = new StringBuilder(); 250 | private static readonly string[] s_Codes = new string[64]; 251 | private static readonly Dictionary s_TypeNameCache = new Dictionary(); 252 | #endif 253 | } 254 | } 255 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/Logging.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c12f86e32d73541a4adf5a8f10e109d4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/Misc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using UnityEditor; 4 | using UnityEngine; 5 | using Object = UnityEngine.Object; 6 | #if UNITY_EDITOR 7 | using System.IO; 8 | using System.Linq; 9 | using System.Reflection; 10 | #if UNITY_2021_2_OR_NEWER 11 | using UnityEditor.SceneManagement; 12 | #else 13 | using UnityEditor.Experimental.SceneManagement; 14 | #endif 15 | #endif 16 | 17 | namespace Coffee.UIDynamicSamplerInternal 18 | { 19 | internal static class Misc 20 | { 21 | public static T[] FindObjectsOfType() where T : Object 22 | { 23 | #if UNITY_2023_1_OR_NEWER 24 | return Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); 25 | #else 26 | return Object.FindObjectsOfType(); 27 | #endif 28 | } 29 | 30 | public static void Destroy(Object obj) 31 | { 32 | if (!obj) return; 33 | #if UNITY_EDITOR 34 | if (!Application.isPlaying) 35 | { 36 | Object.DestroyImmediate(obj); 37 | } 38 | else 39 | #endif 40 | { 41 | Object.Destroy(obj); 42 | } 43 | } 44 | 45 | public static void DestroyImmediate(Object obj) 46 | { 47 | if (!obj) return; 48 | #if UNITY_EDITOR 49 | if (Application.isEditor) 50 | { 51 | Object.DestroyImmediate(obj); 52 | } 53 | else 54 | #endif 55 | { 56 | Object.Destroy(obj); 57 | } 58 | } 59 | 60 | [Conditional("UNITY_EDITOR")] 61 | public static void SetDirty(Object obj) 62 | { 63 | #if UNITY_EDITOR 64 | if (!obj) return; 65 | EditorUtility.SetDirty(obj); 66 | #endif 67 | } 68 | 69 | #if UNITY_EDITOR 70 | public static T[] GetAllComponentsInPrefabStage() where T : Component 71 | { 72 | var prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); 73 | if (prefabStage == null) return Array.Empty(); 74 | 75 | return prefabStage.prefabContentsRoot.GetComponentsInChildren(true); 76 | } 77 | 78 | public static bool isBatchOrBuilding => Application.isBatchMode || BuildPipeline.isBuildingPlayer; 79 | #endif 80 | 81 | [Conditional("UNITY_EDITOR")] 82 | public static void QueuePlayerLoopUpdate() 83 | { 84 | #if UNITY_EDITOR 85 | if (!EditorApplication.isPlaying) 86 | { 87 | EditorApplication.QueuePlayerLoopUpdate(); 88 | } 89 | #endif 90 | } 91 | } 92 | 93 | #if !UNITY_2021_2_OR_NEWER 94 | [AttributeUsage(AttributeTargets.Class)] 95 | [Conditional("UNITY_EDITOR")] 96 | internal class IconAttribute : Attribute 97 | { 98 | private readonly string _path; 99 | 100 | public IconAttribute(string path) 101 | { 102 | _path = path; 103 | } 104 | 105 | #if UNITY_EDITOR 106 | private static Action s_SetIconForObject = typeof(EditorGUIUtility) 107 | .GetMethod("SetIconForObject", BindingFlags.Static | BindingFlags.NonPublic) 108 | .CreateDelegate(typeof(Action), null) as Action; 109 | 110 | [InitializeOnLoadMethod] 111 | private static void InitializeOnLoadMethod() 112 | { 113 | if (Misc.isBatchOrBuilding) return; 114 | 115 | var types = TypeCache.GetTypesWithAttribute(); 116 | var scripts = MonoImporter.GetAllRuntimeMonoScripts(); 117 | foreach (var type in types) 118 | { 119 | var script = scripts.FirstOrDefault(x => x.GetClass() == type); 120 | if (!script) continue; 121 | 122 | var path = type.GetCustomAttribute()?._path; 123 | var icon = AssetDatabase.LoadAssetAtPath(path); 124 | if (!icon) continue; 125 | 126 | s_SetIconForObject(script, icon); 127 | } 128 | } 129 | #endif 130 | } 131 | #endif 132 | } 133 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/Misc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9740fa5b4e7074cd7b777c53b73eddaf 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/ObjectPool.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Coffee.UIDynamicSamplerInternal 5 | { 6 | /// 7 | /// Object pool. 8 | /// 9 | internal class InternalObjectPool where T : class 10 | { 11 | #if UNITY_2021_1_OR_NEWER 12 | private readonly Predicate _onValid; // Delegate for checking if instances are valid 13 | private readonly UnityEngine.Pool.ObjectPool _pool; 14 | 15 | public InternalObjectPool(Func onCreate, Predicate onValid, Action onReturn) 16 | { 17 | _pool = new UnityEngine.Pool.ObjectPool(onCreate, null, onReturn); 18 | _onValid = onValid; 19 | } 20 | 21 | /// 22 | /// Rent an instance from the pool. 23 | /// When you no longer need it, return it with . 24 | /// 25 | public T Rent() 26 | { 27 | while (0 < _pool.CountInactive) 28 | { 29 | var instance = _pool.Get(); 30 | if (_onValid(instance)) 31 | { 32 | return instance; 33 | } 34 | } 35 | 36 | // If there are no instances in the pool, create a new one. 37 | Logging.Log(this, $"A new instance is created (pooled: {_pool.CountInactive}, created: {_pool.CountAll})."); 38 | return _pool.Get(); 39 | } 40 | 41 | /// 42 | /// Return an instance to the pool and assign null. 43 | /// Be sure to return the instance obtained with with this method. 44 | /// 45 | public void Return(ref T instance) 46 | { 47 | if (instance == null) return; // Ignore if already pooled or null. 48 | 49 | _pool.Release(instance); 50 | Logging.Log(this, $"An instance is released (pooled: {_pool.CountInactive}, created: {_pool.CountAll})."); 51 | instance = default; // Set the reference to null. 52 | } 53 | #else 54 | private readonly Func _onCreate; // Delegate for creating instances 55 | private readonly Action _onReturn; // Delegate for returning instances to the pool 56 | private readonly Predicate _onValid; // Delegate for checking if instances are valid 57 | private readonly Stack _pool = new Stack(32); // Object pool 58 | private int _count; // Total count of created instances 59 | 60 | public InternalObjectPool(Func onCreate, Predicate onValid, Action onReturn) 61 | { 62 | _onCreate = onCreate; 63 | _onValid = onValid; 64 | _onReturn = onReturn; 65 | } 66 | 67 | /// 68 | /// Rent an instance from the pool. 69 | /// When you no longer need it, return it with . 70 | /// 71 | public T Rent() 72 | { 73 | while (0 < _pool.Count) 74 | { 75 | var instance = _pool.Pop(); 76 | if (_onValid(instance)) 77 | { 78 | return instance; 79 | } 80 | } 81 | 82 | // If there are no instances in the pool, create a new one. 83 | Logging.Log(this, $"A new instance is created (pooled: {_pool.Count}, created: {++_count})."); 84 | return _onCreate(); 85 | } 86 | 87 | /// 88 | /// Return an instance to the pool and assign null. 89 | /// Be sure to return the instance obtained with with this method. 90 | /// 91 | public void Return(ref T instance) 92 | { 93 | if (instance == null || _pool.Contains(instance)) return; // Ignore if already pooled or null. 94 | 95 | _onReturn(instance); // Return the instance to the pool. 96 | _pool.Push(instance); 97 | Logging.Log(this, $"An instance is released (pooled: {_pool.Count}, created: {_count})."); 98 | instance = default; // Set the reference to null. 99 | } 100 | #endif 101 | } 102 | 103 | /// 104 | /// Object pool for . 105 | /// 106 | internal static class InternalListPool 107 | { 108 | #if UNITY_2021_1_OR_NEWER 109 | /// 110 | /// Rent an instance from the pool. 111 | /// When you no longer need it, return it with . 112 | /// 113 | public static List Rent() 114 | { 115 | return UnityEngine.Pool.ListPool.Get(); 116 | } 117 | 118 | /// 119 | /// Return an instance to the pool and assign null. 120 | /// Be sure to return the instance obtained with with this method. 121 | /// 122 | public static void Return(ref List toRelease) 123 | { 124 | if (toRelease != null) 125 | { 126 | UnityEngine.Pool.ListPool.Release(toRelease); 127 | } 128 | 129 | toRelease = null; 130 | } 131 | #else 132 | private static readonly InternalObjectPool> s_ListPool = 133 | new InternalObjectPool>(() => new List(), _ => true, x => x.Clear()); 134 | 135 | /// 136 | /// Rent an instance from the pool. 137 | /// When you no longer need it, return it with . 138 | /// 139 | public static List Rent() 140 | { 141 | return s_ListPool.Rent(); 142 | } 143 | 144 | /// 145 | /// Return an instance to the pool and assign null. 146 | /// Be sure to return the instance obtained with with this method. 147 | /// 148 | public static void Return(ref List toRelease) 149 | { 150 | s_ListPool.Return(ref toRelease); 151 | } 152 | #endif 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/ObjectPool.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7ee752296eb6b467aacaed1174b21c1a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.Profiling; 5 | using Object = UnityEngine.Object; 6 | 7 | namespace Coffee.UIDynamicSamplerInternal 8 | { 9 | internal class ObjectRepository where T : Object 10 | { 11 | private readonly Dictionary _cache = new Dictionary(8); 12 | private readonly Dictionary _objectKey = new Dictionary(8); 13 | private readonly string _name; 14 | private readonly Action _onRelease; 15 | private readonly Stack _pool = new Stack(8); 16 | 17 | public ObjectRepository(Action onRelease = null) 18 | { 19 | _name = $"{typeof(T).Name}Repository"; 20 | if (onRelease == null) 21 | { 22 | _onRelease = x => 23 | { 24 | #if UNITY_EDITOR 25 | if (!Application.isPlaying) 26 | { 27 | Object.DestroyImmediate(x, false); 28 | } 29 | else 30 | #endif 31 | { 32 | Object.Destroy(x); 33 | } 34 | }; 35 | } 36 | else 37 | { 38 | _onRelease = onRelease; 39 | } 40 | 41 | for (var i = 0; i < 8; i++) 42 | { 43 | _pool.Push(new Entry()); 44 | } 45 | } 46 | 47 | public int count => _cache.Count; 48 | 49 | public void Clear() 50 | { 51 | foreach (var kv in _cache) 52 | { 53 | var entry = kv.Value; 54 | if (entry == null) continue; 55 | 56 | entry.Release(_onRelease); 57 | _pool.Push(entry); 58 | } 59 | 60 | _cache.Clear(); 61 | _objectKey.Clear(); 62 | } 63 | 64 | public bool Valid(Hash128 hash, T obj) 65 | { 66 | return _cache.TryGetValue(hash, out var entry) && entry.storedObject == obj; 67 | } 68 | 69 | /// 70 | /// Adds or retrieves a cached object based on the hash. 71 | /// 72 | public void Get(Hash128 hash, ref T obj, Func onCreate) 73 | { 74 | if (GetFromCache(hash, ref obj)) return; 75 | Add(hash, ref obj, onCreate()); 76 | } 77 | 78 | /// 79 | /// Adds or retrieves a cached object based on the hash. 80 | /// 81 | public void Get(Hash128 hash, ref T obj, Func onCreate, TS source) 82 | { 83 | if (GetFromCache(hash, ref obj)) return; 84 | Add(hash, ref obj, onCreate(source)); 85 | } 86 | 87 | private bool GetFromCache(Hash128 hash, ref T obj) 88 | { 89 | // Find existing entry. 90 | Profiler.BeginSample("(COF)[ObjectRepository] GetFromCache"); 91 | if (_cache.TryGetValue(hash, out var entry)) 92 | { 93 | if (!entry.storedObject) 94 | { 95 | Release(ref entry.storedObject); 96 | Profiler.EndSample(); 97 | return false; 98 | } 99 | 100 | if (entry.storedObject != obj) 101 | { 102 | // if the object is different, release the old one. 103 | Release(ref obj); 104 | ++entry.reference; 105 | obj = entry.storedObject; 106 | Logging.Log(_name, $"Get(total#{count}): {entry}"); 107 | } 108 | 109 | Profiler.EndSample(); 110 | return true; 111 | } 112 | 113 | Profiler.EndSample(); 114 | return false; 115 | } 116 | 117 | private void Add(Hash128 hash, ref T obj, T newObject) 118 | { 119 | if (!newObject) 120 | { 121 | Release(ref obj); 122 | obj = newObject; 123 | return; 124 | } 125 | 126 | // Create and add a new entry. 127 | Profiler.BeginSample("(COF)[ObjectRepository] Add"); 128 | var newEntry = 0 < _pool.Count ? _pool.Pop() : new Entry(); 129 | newEntry.storedObject = newObject; 130 | newEntry.hash = hash; 131 | newEntry.reference = 1; 132 | _cache[hash] = newEntry; 133 | _objectKey[newObject.GetInstanceID()] = hash; 134 | Logging.Log(_name, $"Add(total#{count}): {newEntry}"); 135 | Release(ref obj); 136 | obj = newObject; 137 | Profiler.EndSample(); 138 | } 139 | 140 | /// 141 | /// Release a object. 142 | /// 143 | public void Release(ref T obj) 144 | { 145 | if (ReferenceEquals(obj, null)) return; 146 | 147 | // Find and release the entry. 148 | Profiler.BeginSample("(COF)[ObjectRepository] Release"); 149 | var id = obj.GetInstanceID(); 150 | if (_objectKey.TryGetValue(id, out var hash) 151 | && _cache.TryGetValue(hash, out var entry)) 152 | { 153 | entry.reference--; 154 | if (entry.reference <= 0 || !entry.storedObject) 155 | { 156 | Remove(entry); 157 | } 158 | else 159 | { 160 | Logging.Log(_name, $"Release(total#{_cache.Count}): {entry}"); 161 | } 162 | } 163 | else 164 | { 165 | Logging.Log(_name, $"Release(total#{_cache.Count}): Already released: {obj}"); 166 | } 167 | 168 | obj = null; 169 | Profiler.EndSample(); 170 | } 171 | 172 | private void Remove(Entry entry) 173 | { 174 | if (ReferenceEquals(entry, null)) return; 175 | 176 | Profiler.BeginSample("(COF)[ObjectRepository] Remove"); 177 | _cache.Remove(entry.hash); 178 | _objectKey.Remove(entry.storedObject.GetInstanceID()); 179 | _pool.Push(entry); 180 | entry.reference = 0; 181 | Logging.Log(_name, $"Remove(total#{_cache.Count}): {entry}"); 182 | entry.Release(_onRelease); 183 | Profiler.EndSample(); 184 | } 185 | 186 | private class Entry 187 | { 188 | public Hash128 hash; 189 | public int reference; 190 | public T storedObject; 191 | 192 | public void Release(Action onRelease) 193 | { 194 | reference = 0; 195 | if (storedObject) 196 | { 197 | onRelease?.Invoke(storedObject); 198 | } 199 | 200 | storedObject = null; 201 | } 202 | 203 | public override string ToString() 204 | { 205 | return $"h{(uint)hash.GetHashCode()} (refs#{reference}), {storedObject}"; 206 | } 207 | } 208 | } 209 | } 210 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8b80f34e025ab44f0a52bba04b3c1067 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/RenderTextureRepository.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEditor; 3 | using UnityEngine; 4 | using UnityEngine.Experimental.Rendering; 5 | using UnityEngine.Profiling; 6 | 7 | namespace Coffee.UIDynamicSamplerInternal 8 | { 9 | /// 10 | /// Utility class for managing temporary render textures. 11 | /// 12 | internal static class RenderTextureRepository 13 | { 14 | private static readonly ObjectRepository s_Repository = new ObjectRepository(); 15 | 16 | private static readonly GraphicsFormat s_GraphicsFormat = GraphicsFormatUtility.GetGraphicsFormat( 17 | RenderTextureFormat.ARGB32, 18 | RenderTextureReadWrite.Default); 19 | 20 | #if UNITY_2021_3_OR_NEWER 21 | private static readonly GraphicsFormat s_StencilFormat = GraphicsFormatUtility.GetDepthStencilFormat(0, 8); 22 | #endif 23 | 24 | public static int count => s_Repository.count; 25 | 26 | #if UNITY_EDITOR 27 | [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] 28 | private static void Clear() 29 | { 30 | s_Repository.Clear(); 31 | } 32 | #endif 33 | 34 | /// 35 | /// Retrieves a cached RenderTexture based on the hash. 36 | /// 37 | public static bool Valid(Hash128 hash, RenderTexture rt) 38 | { 39 | Profiler.BeginSample("(COF)[RTRepository] Valid"); 40 | var ret = s_Repository.Valid(hash, rt); 41 | Profiler.EndSample(); 42 | return ret; 43 | } 44 | 45 | /// 46 | /// Adds or retrieves a cached RenderTexture based on the hash. 47 | /// 48 | public static void Get(Hash128 hash, ref RenderTexture rt, Func onCreate, T source) 49 | { 50 | Profiler.BeginSample("(COF)[RTRepository] Get"); 51 | s_Repository.Get(hash, ref rt, onCreate, source); 52 | Profiler.EndSample(); 53 | } 54 | 55 | /// 56 | /// Adds or retrieves a cached RenderTexture based on the hash. 57 | /// 58 | public static RenderTextureDescriptor GetDescriptor(Vector2Int size, bool useStencil) 59 | { 60 | Profiler.BeginSample("(COF)[RTRepository] GetDescriptor"); 61 | var rtd = new RenderTextureDescriptor( 62 | Mathf.Max(8, size.x), 63 | Mathf.Max(8, size.y), 64 | s_GraphicsFormat, 65 | useStencil ? 24 : 0) 66 | { 67 | sRGB = QualitySettings.activeColorSpace == ColorSpace.Linear, 68 | mipCount = -1, 69 | #if UNITY_2021_3_OR_NEWER 70 | depthStencilFormat = useStencil ? s_StencilFormat : GraphicsFormat.None 71 | #endif 72 | }; 73 | 74 | Profiler.EndSample(); 75 | return rtd; 76 | } 77 | 78 | /// 79 | /// Releases the RenderTexture buffer. 80 | /// 81 | public static void Release(ref RenderTexture rt) 82 | { 83 | Profiler.BeginSample("(COF)[RTRepository] Release"); 84 | s_Repository.Release(ref rt); 85 | Profiler.EndSample(); 86 | } 87 | 88 | public static Vector2Int GetPreferSize(Vector2Int size, int downSamplingRate) 89 | { 90 | var aspect = (float)size.x / size.y; 91 | var screenSize = GetScreenSize(); 92 | 93 | // Clamp to screen size. 94 | size.x = Mathf.Clamp(size.x, 8, screenSize.x); 95 | size.y = Mathf.Clamp(size.y, 8, screenSize.y); 96 | 97 | if (downSamplingRate <= 0) 98 | { 99 | if (size.x < size.y) 100 | { 101 | size.x = Mathf.CeilToInt(size.y * aspect); 102 | } 103 | else 104 | { 105 | size.y = Mathf.CeilToInt(size.x / aspect); 106 | } 107 | 108 | return size; 109 | } 110 | 111 | if (size.x < size.y) 112 | { 113 | size.y = Mathf.NextPowerOfTwo(size.y / 2) / downSamplingRate; 114 | size.x = Mathf.CeilToInt(size.y * aspect); 115 | } 116 | else 117 | { 118 | size.x = Mathf.NextPowerOfTwo(size.x / 2) / downSamplingRate; 119 | size.y = Mathf.CeilToInt(size.x / aspect); 120 | } 121 | 122 | return size; 123 | } 124 | 125 | public static Vector2Int GetScreenSize(int downSamplingRate) 126 | { 127 | return GetPreferSize(GetScreenSize(), downSamplingRate); 128 | } 129 | 130 | public static Vector2Int GetScreenSize() 131 | { 132 | #if UNITY_EDITOR 133 | int ParseToInt(string s, int start, int end) 134 | { 135 | var result = 0; 136 | for (var i = start; i < end; i++) 137 | { 138 | result = result * 10 + (s[i] - '0'); 139 | } 140 | 141 | return result; 142 | } 143 | 144 | Profiler.BeginSample("(COF)[RTRepository] GetScreenSize (Editor)"); 145 | var screenRes = UnityStats.screenRes; 146 | var separator = screenRes.IndexOf('x'); 147 | var w = Mathf.Max(8, ParseToInt(screenRes, 0, separator)); 148 | var h = Mathf.Max(8, ParseToInt(screenRes, separator + 1, screenRes.Length)); 149 | Profiler.EndSample(); 150 | 151 | return new Vector2Int(w, h); 152 | #else 153 | return new Vector2Int(Screen.width, Screen.height); 154 | #endif 155 | } 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/RenderTextureRepository.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7ef809a6e94134a0e91da7809016898d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/UIExtraCallbacks.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEditor; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | 6 | namespace Coffee.UIDynamicSamplerInternal 7 | { 8 | /// 9 | /// Provides additional callbacks related to canvas and UI system. 10 | /// 11 | internal static class UIExtraCallbacks 12 | { 13 | private static bool s_IsInitializedAfterCanvasRebuild; 14 | private static readonly FastAction s_AfterCanvasRebuildAction = new FastAction(); 15 | private static readonly FastAction s_LateAfterCanvasRebuildAction = new FastAction(); 16 | private static readonly FastAction s_BeforeCanvasRebuildAction = new FastAction(); 17 | private static readonly FastAction s_OnScreenSizeChangedAction = new FastAction(); 18 | private static Vector2Int s_LastScreenSize; 19 | 20 | static UIExtraCallbacks() 21 | { 22 | Canvas.willRenderCanvases += OnBeforeCanvasRebuild; 23 | Logging.LogMulticast(typeof(Canvas), "willRenderCanvases", message: "ctor"); 24 | } 25 | 26 | /// 27 | /// Event that occurs after canvas rebuilds. 28 | /// 29 | public static event Action onLateAfterCanvasRebuild 30 | { 31 | add => s_LateAfterCanvasRebuildAction.Add(value); 32 | remove => s_LateAfterCanvasRebuildAction.Remove(value); 33 | } 34 | 35 | /// 36 | /// Event that occurs before canvas rebuilds. 37 | /// 38 | public static event Action onBeforeCanvasRebuild 39 | { 40 | add => s_BeforeCanvasRebuildAction.Add(value); 41 | remove => s_BeforeCanvasRebuildAction.Remove(value); 42 | } 43 | 44 | /// 45 | /// Event that occurs after canvas rebuilds. 46 | /// 47 | public static event Action onAfterCanvasRebuild 48 | { 49 | add => s_AfterCanvasRebuildAction.Add(value); 50 | remove => s_AfterCanvasRebuildAction.Remove(value); 51 | } 52 | 53 | /// 54 | /// Event that occurs when the screen size changes. 55 | /// 56 | public static event Action onScreenSizeChanged 57 | { 58 | add => s_OnScreenSizeChangedAction.Add(value); 59 | remove => s_OnScreenSizeChangedAction.Remove(value); 60 | } 61 | 62 | /// 63 | /// Initializes the UIExtraCallbacks to ensure proper event handling. 64 | /// 65 | private static void InitializeAfterCanvasRebuild() 66 | { 67 | if (s_IsInitializedAfterCanvasRebuild) return; 68 | s_IsInitializedAfterCanvasRebuild = true; 69 | 70 | CanvasUpdateRegistry.IsRebuildingLayout(); 71 | Canvas.willRenderCanvases += OnAfterCanvasRebuild; 72 | Logging.LogMulticast(typeof(Canvas), "willRenderCanvases", 73 | message: "InitializeAfterCanvasRebuild"); 74 | } 75 | 76 | #if UNITY_EDITOR 77 | [InitializeOnLoadMethod] 78 | #endif 79 | [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] 80 | private static void InitializeOnLoad() 81 | { 82 | Canvas.willRenderCanvases -= OnAfterCanvasRebuild; 83 | s_IsInitializedAfterCanvasRebuild = false; 84 | } 85 | 86 | /// 87 | /// Callback method called before canvas rebuilds. 88 | /// 89 | private static void OnBeforeCanvasRebuild() 90 | { 91 | var screenSize = new Vector2Int(Screen.width, Screen.height); 92 | if (s_LastScreenSize != screenSize) 93 | { 94 | if (s_LastScreenSize != default) 95 | { 96 | s_OnScreenSizeChangedAction.Invoke(); 97 | } 98 | 99 | s_LastScreenSize = screenSize; 100 | } 101 | 102 | s_BeforeCanvasRebuildAction.Invoke(); 103 | InitializeAfterCanvasRebuild(); 104 | } 105 | 106 | /// 107 | /// Callback method called after canvas rebuilds. 108 | /// 109 | private static void OnAfterCanvasRebuild() 110 | { 111 | s_AfterCanvasRebuildAction.Invoke(); 112 | s_LateAfterCanvasRebuildAction.Invoke(); 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /Packages/src/Runtime/Internal/Utilities/UIExtraCallbacks.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f2ec740c9afcf42e1872b6eef1d787b8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Runtime/UIDynamicSampler.cs: -------------------------------------------------------------------------------- 1 | using Coffee.UIDynamicSamplerInternal; 2 | using UnityEditor; 3 | using UnityEngine; 4 | using UnityEngine.EventSystems; 5 | using UnityEngine.UI; 6 | #if URP_ENABLE 7 | using UnityEngine.Rendering; 8 | using UnityEngine.Rendering.Universal; 9 | #endif 10 | 11 | namespace Coffee.UIExtensions 12 | { 13 | [ExecuteAlways] 14 | [RequireComponent(typeof(Graphic))] 15 | [Icon("Packages/com.coffee.ui-dynamic-sampler/UIDynamicSamplerIcon.png")] 16 | public class UIDynamicSampler : UIBehaviour, IMaterialModifier 17 | { 18 | [Range(0.5f, 10f)] 19 | [SerializeField] private float m_SamplingThreshold = 2f; 20 | 21 | [Range(0.5f, 10f)] 22 | [SerializeField] private float m_ScaleFactor = 1.5f; 23 | 24 | private RenderTexture _dynamicTexture; 25 | private Canvas.WillRenderCanvases _blit; 26 | private Graphic _graphic; 27 | 28 | private Graphic graphic => _graphic ? _graphic : _graphic = GetComponent(); 29 | public RenderTexture dynamicTexture => _dynamicTexture; 30 | 31 | 32 | protected override void OnEnable() 33 | { 34 | SetMaterialDirty(); 35 | } 36 | 37 | protected override void OnDisable() 38 | { 39 | SetMaterialDirty(); 40 | RenderTextureRepository.Release(ref _dynamicTexture); 41 | if (_blit != null) 42 | { 43 | Canvas.willRenderCanvases -= _blit; 44 | } 45 | } 46 | 47 | protected override void OnDestroy() 48 | { 49 | _blit = null; 50 | } 51 | 52 | protected override void OnRectTransformDimensionsChange() 53 | { 54 | SetMaterialDirty(); 55 | } 56 | 57 | #if UNITY_EDITOR 58 | protected override void OnValidate() 59 | { 60 | SetMaterialDirty(); 61 | } 62 | #endif 63 | 64 | public void SetMaterialDirty() 65 | { 66 | if (graphic) 67 | { 68 | graphic.SetMaterialDirty(); 69 | #if UNITY_EDITOR 70 | EditorApplication.QueuePlayerLoopUpdate(); 71 | #endif 72 | } 73 | } 74 | 75 | Material IMaterialModifier.GetModifiedMaterial(Material baseMaterial) 76 | { 77 | if (baseMaterial && isActiveAndEnabled) 78 | { 79 | Canvas.willRenderCanvases -= _blit ??= Blit; 80 | Canvas.willRenderCanvases += _blit; 81 | } 82 | 83 | return baseMaterial; 84 | } 85 | 86 | private void Blit() 87 | { 88 | Canvas.willRenderCanvases -= _blit; 89 | if (!graphic || !graphic.canvas) return; 90 | 91 | // mainTexture is null. 92 | var tex = _graphic.mainTexture; 93 | if (!tex) 94 | { 95 | graphic.canvasRenderer.SetTexture(null); 96 | RenderTextureRepository.Release(ref _dynamicTexture); 97 | return; 98 | } 99 | 100 | // Anti-aliasing is disabled. 101 | var texSize = new Vector2Int(tex.width, tex.height); 102 | var canvas = graphic.canvas; 103 | var canvasScale = canvas.scaleFactor; 104 | var rtSize = graphic.rectTransform.rect.size; 105 | if (Mathf.Max(texSize.x, texSize.y) / m_SamplingThreshold < Mathf.Max(rtSize.x, rtSize.y) * canvasScale) 106 | { 107 | graphic.canvasRenderer.SetTexture(tex); 108 | RenderTextureRepository.Release(ref _dynamicTexture); 109 | return; 110 | } 111 | 112 | var cam = canvas.renderMode != RenderMode.ScreenSpaceOverlay 113 | ? canvas.worldCamera 114 | : null; 115 | var renderScale = cam && cam.allowDynamicResolution 116 | ? Mathf.Max(ScalableBufferManager.widthScaleFactor, ScalableBufferManager.heightScaleFactor) 117 | : 1; 118 | #if URP_ENABLE 119 | if (GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset urpAsset) 120 | { 121 | renderScale *= urpAsset.renderScale; 122 | } 123 | #endif 124 | 125 | // Get or create render texture. 126 | var size = Vector2Int.RoundToInt(rtSize * canvasScale * m_ScaleFactor * renderScale); 127 | var hash = new Hash128((uint)tex.GetInstanceID(), (uint)size.GetHashCode(), 0, 0); 128 | if (!RenderTextureRepository.Valid(hash, _dynamicTexture)) 129 | { 130 | RenderTextureRepository.Get(hash, ref _dynamicTexture, 131 | x => new RenderTexture(RenderTextureRepository.GetDescriptor(x, false)) 132 | { 133 | hideFlags = HideFlags.DontSave 134 | }, size); 135 | 136 | // Blit to render texture. 137 | Graphics.Blit(tex, _dynamicTexture); 138 | } 139 | 140 | graphic.canvasRenderer.SetTexture(_dynamicTexture); 141 | } 142 | } 143 | 144 | 145 | #if UNITY_EDITOR 146 | [CustomEditor(typeof(UIDynamicSampler))] 147 | [CanEditMultipleObjects] 148 | public class UIDynamicSamplerEditor : Editor 149 | { 150 | public override void OnInspectorGUI() 151 | { 152 | base.OnInspectorGUI(); 153 | 154 | EditorGUILayout.BeginVertical(EditorStyles.helpBox); 155 | var tex = (target as UIDynamicSampler).dynamicTexture; 156 | if (tex) 157 | { 158 | EditorGUILayout.LabelField("Sampling Size", $"{tex.width} x {tex.height}"); 159 | } 160 | else 161 | { 162 | EditorGUILayout.LabelField("Sampling Size", "disabled"); 163 | } 164 | 165 | EditorGUILayout.EndVertical(); 166 | } 167 | } 168 | #endif 169 | } 170 | -------------------------------------------------------------------------------- /Packages/src/Runtime/UIDynamicSampler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f4d0240e0e7db4dacbbfed76e2216afc 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7755f5982e10c4b1abe9fba3295423d7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-Circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mob-sakai/UIDynamicSampler/377f4d1c9058bace2880b4b46cfa8c13e24c5548/Packages/src/Samples~/Demo/UIDynamicSampler_Demo-Circle.png -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-Circle.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bc3306ae8a1744478956212735a4c3f6 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 0 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: WebGL 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Standalone 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: iPhone 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | - serializedVersion: 3 117 | buildTarget: Android 118 | maxTextureSize: 2048 119 | resizeAlgorithm: 0 120 | textureFormat: -1 121 | textureCompression: 1 122 | compressionQuality: 50 123 | crunchedCompression: 0 124 | allowsAlphaSplitting: 0 125 | overridden: 0 126 | androidETC2FallbackOverride: 0 127 | forceMaximumCompressionQuality_BC6H_BC7: 0 128 | - serializedVersion: 3 129 | buildTarget: Server 130 | maxTextureSize: 2048 131 | resizeAlgorithm: 0 132 | textureFormat: -1 133 | textureCompression: 1 134 | compressionQuality: 50 135 | crunchedCompression: 0 136 | allowsAlphaSplitting: 0 137 | overridden: 0 138 | androidETC2FallbackOverride: 0 139 | forceMaximumCompressionQuality_BC6H_BC7: 0 140 | spriteSheet: 141 | serializedVersion: 2 142 | sprites: [] 143 | outline: [] 144 | physicsShape: [] 145 | bones: [] 146 | spriteID: 5e97eb03825dee720800000000000000 147 | internalID: 0 148 | vertices: [] 149 | indices: 150 | edges: [] 151 | weights: [] 152 | secondaryTextures: [] 153 | nameFileIdTable: {} 154 | spritePackingTag: 155 | pSDRemoveMatte: 0 156 | pSDShowRemoveMatteOption: 0 157 | userData: 158 | assetBundleName: 159 | assetBundleVariant: 160 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-Container.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &8949892104694525651 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 8949892104694525650} 12 | - component: {fileID: 8949892104694525663} 13 | - component: {fileID: 8949892104694525660} 14 | m_Layer: 5 15 | m_Name: Image 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 1 21 | --- !u!224 &8949892104694525650 22 | RectTransform: 23 | m_ObjectHideFlags: 0 24 | m_CorrespondingSourceObject: {fileID: 0} 25 | m_PrefabInstance: {fileID: 0} 26 | m_PrefabAsset: {fileID: 0} 27 | m_GameObject: {fileID: 8949892104694525651} 28 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 29 | m_LocalPosition: {x: 0, y: 0, z: 0} 30 | m_LocalScale: {x: 1, y: 1, z: 1} 31 | m_ConstrainProportionsScale: 0 32 | m_Children: [] 33 | m_Father: {fileID: 8949892105034634158} 34 | m_RootOrder: 0 35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 36 | m_AnchorMin: {x: 0, y: 0} 37 | m_AnchorMax: {x: 1, y: 1} 38 | m_AnchoredPosition: {x: 0.000015258789, y: 0} 39 | m_SizeDelta: {x: 0, y: 0} 40 | m_Pivot: {x: 0.5, y: 0.5} 41 | --- !u!222 &8949892104694525663 42 | CanvasRenderer: 43 | m_ObjectHideFlags: 0 44 | m_CorrespondingSourceObject: {fileID: 0} 45 | m_PrefabInstance: {fileID: 0} 46 | m_PrefabAsset: {fileID: 0} 47 | m_GameObject: {fileID: 8949892104694525651} 48 | m_CullTransparentMesh: 0 49 | --- !u!114 &8949892104694525660 50 | MonoBehaviour: 51 | m_ObjectHideFlags: 0 52 | m_CorrespondingSourceObject: {fileID: 0} 53 | m_PrefabInstance: {fileID: 0} 54 | m_PrefabAsset: {fileID: 0} 55 | m_GameObject: {fileID: 8949892104694525651} 56 | m_Enabled: 1 57 | m_EditorHideFlags: 0 58 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 59 | m_Name: 60 | m_EditorClassIdentifier: 61 | m_Material: {fileID: 0} 62 | m_Color: {r: 1, g: 1, b: 1, a: 1} 63 | m_RaycastTarget: 0 64 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 65 | m_Maskable: 1 66 | m_OnCullStateChanged: 67 | m_PersistentCalls: 68 | m_Calls: [] 69 | m_Sprite: {fileID: 21300000, guid: f2c7ccde58fb7fb44b0008f3b08e8777, type: 3} 70 | m_Type: 0 71 | m_PreserveAspect: 1 72 | m_FillCenter: 1 73 | m_FillMethod: 4 74 | m_FillAmount: 1 75 | m_FillClockwise: 1 76 | m_FillOrigin: 0 77 | m_UseSpriteMesh: 0 78 | m_PixelsPerUnitMultiplier: 1 79 | --- !u!1 &8949892104945177768 80 | GameObject: 81 | m_ObjectHideFlags: 0 82 | m_CorrespondingSourceObject: {fileID: 0} 83 | m_PrefabInstance: {fileID: 0} 84 | m_PrefabAsset: {fileID: 0} 85 | serializedVersion: 6 86 | m_Component: 87 | - component: {fileID: 8949892104945177771} 88 | - component: {fileID: 8949892104945177684} 89 | - component: {fileID: 8949892104945177685} 90 | - component: {fileID: 8949892104945177770} 91 | m_Layer: 5 92 | m_Name: TITLE 93 | m_TagString: Untagged 94 | m_Icon: {fileID: 0} 95 | m_NavMeshLayer: 0 96 | m_StaticEditorFlags: 0 97 | m_IsActive: 1 98 | --- !u!224 &8949892104945177771 99 | RectTransform: 100 | m_ObjectHideFlags: 0 101 | m_CorrespondingSourceObject: {fileID: 0} 102 | m_PrefabInstance: {fileID: 0} 103 | m_PrefabAsset: {fileID: 0} 104 | m_GameObject: {fileID: 8949892104945177768} 105 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 106 | m_LocalPosition: {x: 0, y: 0, z: 0} 107 | m_LocalScale: {x: 1, y: 1, z: 1} 108 | m_ConstrainProportionsScale: 0 109 | m_Children: [] 110 | m_Father: {fileID: 8949892104945510068} 111 | m_RootOrder: 0 112 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 113 | m_AnchorMin: {x: 0, y: 1} 114 | m_AnchorMax: {x: 1, y: 1} 115 | m_AnchoredPosition: {x: 0, y: 0} 116 | m_SizeDelta: {x: 0, y: 50} 117 | m_Pivot: {x: 0.5, y: 1} 118 | --- !u!222 &8949892104945177684 119 | CanvasRenderer: 120 | m_ObjectHideFlags: 0 121 | m_CorrespondingSourceObject: {fileID: 0} 122 | m_PrefabInstance: {fileID: 0} 123 | m_PrefabAsset: {fileID: 0} 124 | m_GameObject: {fileID: 8949892104945177768} 125 | m_CullTransparentMesh: 1 126 | --- !u!114 &8949892104945177685 127 | MonoBehaviour: 128 | m_ObjectHideFlags: 0 129 | m_CorrespondingSourceObject: {fileID: 0} 130 | m_PrefabInstance: {fileID: 0} 131 | m_PrefabAsset: {fileID: 0} 132 | m_GameObject: {fileID: 8949892104945177768} 133 | m_Enabled: 1 134 | m_EditorHideFlags: 0 135 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 136 | m_Name: 137 | m_EditorClassIdentifier: 138 | m_Material: {fileID: 0} 139 | m_Color: {r: 1, g: 1, b: 1, a: 1} 140 | m_RaycastTarget: 0 141 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 142 | m_Maskable: 0 143 | m_OnCullStateChanged: 144 | m_PersistentCalls: 145 | m_Calls: [] 146 | m_FontData: 147 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 148 | m_FontSize: 20 149 | m_FontStyle: 0 150 | m_BestFit: 0 151 | m_MinSize: 2 152 | m_MaxSize: 40 153 | m_Alignment: 1 154 | m_AlignByGeometry: 0 155 | m_RichText: 1 156 | m_HorizontalOverflow: 0 157 | m_VerticalOverflow: 0 158 | m_LineSpacing: 1 159 | m_Text: 'Default 160 | 161 | (x1470)' 162 | --- !u!114 &8949892104945177770 163 | MonoBehaviour: 164 | m_ObjectHideFlags: 0 165 | m_CorrespondingSourceObject: {fileID: 0} 166 | m_PrefabInstance: {fileID: 0} 167 | m_PrefabAsset: {fileID: 0} 168 | m_GameObject: {fileID: 8949892104945177768} 169 | m_Enabled: 1 170 | m_EditorHideFlags: 0 171 | m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} 172 | m_Name: 173 | m_EditorClassIdentifier: 174 | m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} 175 | m_EffectDistance: {x: 1, y: -1} 176 | m_UseGraphicAlpha: 1 177 | --- !u!1 &8949892104945510069 178 | GameObject: 179 | m_ObjectHideFlags: 0 180 | m_CorrespondingSourceObject: {fileID: 0} 181 | m_PrefabInstance: {fileID: 0} 182 | m_PrefabAsset: {fileID: 0} 183 | serializedVersion: 6 184 | m_Component: 185 | - component: {fileID: 8949892104945510068} 186 | m_Layer: 5 187 | m_Name: UIDynamicSampler_Demo-Container 188 | m_TagString: Untagged 189 | m_Icon: {fileID: 0} 190 | m_NavMeshLayer: 0 191 | m_StaticEditorFlags: 0 192 | m_IsActive: 1 193 | --- !u!224 &8949892104945510068 194 | RectTransform: 195 | m_ObjectHideFlags: 0 196 | m_CorrespondingSourceObject: {fileID: 0} 197 | m_PrefabInstance: {fileID: 0} 198 | m_PrefabAsset: {fileID: 0} 199 | m_GameObject: {fileID: 8949892104945510069} 200 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 201 | m_LocalPosition: {x: 0, y: 0, z: 0} 202 | m_LocalScale: {x: 1, y: 1, z: 1} 203 | m_ConstrainProportionsScale: 0 204 | m_Children: 205 | - {fileID: 8949892104945177771} 206 | - {fileID: 8949892105034634158} 207 | m_Father: {fileID: 0} 208 | m_RootOrder: 0 209 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 210 | m_AnchorMin: {x: 0, y: 0.5} 211 | m_AnchorMax: {x: 0, y: 0.5} 212 | m_AnchoredPosition: {x: 1163, y: -31.363} 213 | m_SizeDelta: {x: 200, y: 234.725} 214 | m_Pivot: {x: 0, y: 0.5} 215 | --- !u!1 &8949892105034634159 216 | GameObject: 217 | m_ObjectHideFlags: 0 218 | m_CorrespondingSourceObject: {fileID: 0} 219 | m_PrefabInstance: {fileID: 0} 220 | m_PrefabAsset: {fileID: 0} 221 | serializedVersion: 6 222 | m_Component: 223 | - component: {fileID: 8949892105034634158} 224 | - component: {fileID: 8949892105034634155} 225 | - component: {fileID: 8949892105034634152} 226 | - component: {fileID: 8949892105034634153} 227 | m_Layer: 5 228 | m_Name: Mask 229 | m_TagString: Untagged 230 | m_Icon: {fileID: 0} 231 | m_NavMeshLayer: 0 232 | m_StaticEditorFlags: 0 233 | m_IsActive: 1 234 | --- !u!224 &8949892105034634158 235 | RectTransform: 236 | m_ObjectHideFlags: 0 237 | m_CorrespondingSourceObject: {fileID: 0} 238 | m_PrefabInstance: {fileID: 0} 239 | m_PrefabAsset: {fileID: 0} 240 | m_GameObject: {fileID: 8949892105034634159} 241 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 242 | m_LocalPosition: {x: 0, y: 0, z: 0} 243 | m_LocalScale: {x: 1, y: 1, z: 1} 244 | m_ConstrainProportionsScale: 0 245 | m_Children: 246 | - {fileID: 8949892104694525650} 247 | m_Father: {fileID: 8949892104945510068} 248 | m_RootOrder: 1 249 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 250 | m_AnchorMin: {x: 0.5, y: 1} 251 | m_AnchorMax: {x: 0.5, y: 1} 252 | m_AnchoredPosition: {x: 0, y: -50} 253 | m_SizeDelta: {x: 200, y: 200.00002} 254 | m_Pivot: {x: 0.5, y: 1} 255 | --- !u!222 &8949892105034634155 256 | CanvasRenderer: 257 | m_ObjectHideFlags: 0 258 | m_CorrespondingSourceObject: {fileID: 0} 259 | m_PrefabInstance: {fileID: 0} 260 | m_PrefabAsset: {fileID: 0} 261 | m_GameObject: {fileID: 8949892105034634159} 262 | m_CullTransparentMesh: 0 263 | --- !u!114 &8949892105034634152 264 | MonoBehaviour: 265 | m_ObjectHideFlags: 0 266 | m_CorrespondingSourceObject: {fileID: 0} 267 | m_PrefabInstance: {fileID: 0} 268 | m_PrefabAsset: {fileID: 0} 269 | m_GameObject: {fileID: 8949892105034634159} 270 | m_Enabled: 1 271 | m_EditorHideFlags: 0 272 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 273 | m_Name: 274 | m_EditorClassIdentifier: 275 | m_Material: {fileID: 0} 276 | m_Color: {r: 1, g: 1, b: 1, a: 0.003921569} 277 | m_RaycastTarget: 0 278 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 279 | m_Maskable: 0 280 | m_OnCullStateChanged: 281 | m_PersistentCalls: 282 | m_Calls: [] 283 | m_Sprite: {fileID: 21300000, guid: bc3306ae8a1744478956212735a4c3f6, type: 3} 284 | m_Type: 0 285 | m_PreserveAspect: 0 286 | m_FillCenter: 1 287 | m_FillMethod: 4 288 | m_FillAmount: 1 289 | m_FillClockwise: 1 290 | m_FillOrigin: 0 291 | m_UseSpriteMesh: 0 292 | m_PixelsPerUnitMultiplier: 1 293 | --- !u!114 &8949892105034634153 294 | MonoBehaviour: 295 | m_ObjectHideFlags: 0 296 | m_CorrespondingSourceObject: {fileID: 0} 297 | m_PrefabInstance: {fileID: 0} 298 | m_PrefabAsset: {fileID: 0} 299 | m_GameObject: {fileID: 8949892105034634159} 300 | m_Enabled: 1 301 | m_EditorHideFlags: 0 302 | m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} 303 | m_Name: 304 | m_EditorClassIdentifier: 305 | m_ShowMaskGraphic: 0 306 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-Container.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c2ab54d8d558045309513d2f6740e41d 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan-Mipmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mob-sakai/UIDynamicSampler/377f4d1c9058bace2880b4b46cfa8c13e24c5548/Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan-Mipmap.png -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan-Mipmap.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 87bfb2f2b575a44d985baf5b8052af31 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 2 37 | aniso: 4 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: iPhone 82 | maxTextureSize: 4096 83 | resizeAlgorithm: 0 84 | textureFormat: 50 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 4096 95 | resizeAlgorithm: 0 96 | textureFormat: 47 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: Standalone 106 | maxTextureSize: 4096 107 | resizeAlgorithm: 0 108 | textureFormat: 12 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | - serializedVersion: 3 117 | buildTarget: WebGL 118 | maxTextureSize: 2048 119 | resizeAlgorithm: 0 120 | textureFormat: -1 121 | textureCompression: 1 122 | compressionQuality: 50 123 | crunchedCompression: 0 124 | allowsAlphaSplitting: 0 125 | overridden: 0 126 | androidETC2FallbackOverride: 0 127 | forceMaximumCompressionQuality_BC6H_BC7: 0 128 | - serializedVersion: 3 129 | buildTarget: Server 130 | maxTextureSize: 2048 131 | resizeAlgorithm: 0 132 | textureFormat: -1 133 | textureCompression: 1 134 | compressionQuality: 50 135 | crunchedCompression: 0 136 | allowsAlphaSplitting: 0 137 | overridden: 0 138 | androidETC2FallbackOverride: 0 139 | forceMaximumCompressionQuality_BC6H_BC7: 0 140 | spriteSheet: 141 | serializedVersion: 2 142 | sprites: [] 143 | outline: [] 144 | physicsShape: [] 145 | bones: [] 146 | spriteID: 5e97eb03825dee720800000000000000 147 | internalID: 0 148 | vertices: [] 149 | indices: 150 | edges: [] 151 | weights: [] 152 | secondaryTextures: [] 153 | nameFileIdTable: {} 154 | spritePackingTag: 155 | pSDRemoveMatte: 0 156 | pSDShowRemoveMatteOption: 0 157 | userData: 158 | assetBundleName: 159 | assetBundleVariant: 160 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan-Thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mob-sakai/UIDynamicSampler/377f4d1c9058bace2880b4b46cfa8c13e24c5548/Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan-Thumbnail.png -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan-Thumbnail.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fa51037fd0e4b47af89fb42d62e51616 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: iPhone 82 | maxTextureSize: 4096 83 | resizeAlgorithm: 0 84 | textureFormat: 48 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 4096 95 | resizeAlgorithm: 0 96 | textureFormat: 48 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: Standalone 106 | maxTextureSize: 4096 107 | resizeAlgorithm: 0 108 | textureFormat: 25 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | - serializedVersion: 3 117 | buildTarget: WebGL 118 | maxTextureSize: 2048 119 | resizeAlgorithm: 0 120 | textureFormat: -1 121 | textureCompression: 1 122 | compressionQuality: 50 123 | crunchedCompression: 0 124 | allowsAlphaSplitting: 0 125 | overridden: 0 126 | androidETC2FallbackOverride: 0 127 | forceMaximumCompressionQuality_BC6H_BC7: 0 128 | - serializedVersion: 3 129 | buildTarget: Server 130 | maxTextureSize: 2048 131 | resizeAlgorithm: 0 132 | textureFormat: -1 133 | textureCompression: 1 134 | compressionQuality: 50 135 | crunchedCompression: 0 136 | allowsAlphaSplitting: 0 137 | overridden: 0 138 | androidETC2FallbackOverride: 0 139 | forceMaximumCompressionQuality_BC6H_BC7: 0 140 | spriteSheet: 141 | serializedVersion: 2 142 | sprites: [] 143 | outline: [] 144 | physicsShape: [] 145 | bones: [] 146 | spriteID: 5e97eb03825dee720800000000000000 147 | internalID: 0 148 | vertices: [] 149 | indices: 150 | edges: [] 151 | weights: [] 152 | secondaryTextures: [] 153 | nameFileIdTable: {} 154 | spritePackingTag: 155 | pSDRemoveMatte: 0 156 | pSDShowRemoveMatteOption: 0 157 | userData: 158 | assetBundleName: 159 | assetBundleVariant: 160 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mob-sakai/UIDynamicSampler/377f4d1c9058bace2880b4b46cfa8c13e24c5548/Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan.png -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo-UnityChan.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f2c7ccde58fb7fb44b0008f3b08e8777 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 1 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: iPhone 82 | maxTextureSize: 4096 83 | resizeAlgorithm: 0 84 | textureFormat: 48 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 4096 95 | resizeAlgorithm: 0 96 | textureFormat: 48 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: Standalone 106 | maxTextureSize: 4096 107 | resizeAlgorithm: 0 108 | textureFormat: 25 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | - serializedVersion: 3 117 | buildTarget: WebGL 118 | maxTextureSize: 2048 119 | resizeAlgorithm: 0 120 | textureFormat: -1 121 | textureCompression: 1 122 | compressionQuality: 50 123 | crunchedCompression: 0 124 | allowsAlphaSplitting: 0 125 | overridden: 0 126 | androidETC2FallbackOverride: 0 127 | forceMaximumCompressionQuality_BC6H_BC7: 0 128 | - serializedVersion: 3 129 | buildTarget: Server 130 | maxTextureSize: 2048 131 | resizeAlgorithm: 0 132 | textureFormat: -1 133 | textureCompression: 1 134 | compressionQuality: 50 135 | crunchedCompression: 0 136 | allowsAlphaSplitting: 0 137 | overridden: 0 138 | androidETC2FallbackOverride: 0 139 | forceMaximumCompressionQuality_BC6H_BC7: 0 140 | spriteSheet: 141 | serializedVersion: 2 142 | sprites: [] 143 | outline: [] 144 | physicsShape: [] 145 | bones: [] 146 | spriteID: 5e97eb03825dee720800000000000000 147 | internalID: 0 148 | vertices: [] 149 | indices: 150 | edges: [] 151 | weights: [] 152 | secondaryTextures: [] 153 | nameFileIdTable: {} 154 | spritePackingTag: 155 | pSDRemoveMatte: 0 156 | pSDShowRemoveMatteOption: 0 157 | userData: 158 | assetBundleName: 159 | assetBundleVariant: 160 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | 4 | public class UIDynamicSampler_Demo : MonoBehaviour 5 | { 6 | private Mask[] _masks; 7 | private Image[] _images; 8 | 9 | [SerializeField] 10 | private Transform m_Root; 11 | 12 | private void Awake() 13 | { 14 | _masks = m_Root.GetComponentsInChildren(); 15 | _images = m_Root.GetComponentsInChildren(); 16 | } 17 | 18 | public void SetImageSize(float size) 19 | { 20 | foreach (var mask in _masks) 21 | { 22 | mask.rectTransform.sizeDelta = new Vector2(size, size); 23 | } 24 | 25 | foreach (var image in _images) 26 | { 27 | image.SetMaterialDirty(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: de966b176c2df43d8995e6b6920fe357 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/src/Samples~/Demo/UIDynamicSampler_Demo.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 22c4b187829d14e6dbe71feeab0f3747 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/src/UIDynamicSamplerIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mob-sakai/UIDynamicSampler/377f4d1c9058bace2880b4b46cfa8c13e24c5548/Packages/src/UIDynamicSamplerIcon.png -------------------------------------------------------------------------------- /Packages/src/UIDynamicSamplerIcon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6d70d657ccb874a26850c4e6ade75c24 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 0 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 0 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 2 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: WebGL 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Standalone 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: iPhone 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | - serializedVersion: 3 117 | buildTarget: Android 118 | maxTextureSize: 2048 119 | resizeAlgorithm: 0 120 | textureFormat: -1 121 | textureCompression: 1 122 | compressionQuality: 50 123 | crunchedCompression: 0 124 | allowsAlphaSplitting: 0 125 | overridden: 0 126 | androidETC2FallbackOverride: 0 127 | forceMaximumCompressionQuality_BC6H_BC7: 0 128 | - serializedVersion: 3 129 | buildTarget: Server 130 | maxTextureSize: 2048 131 | resizeAlgorithm: 0 132 | textureFormat: -1 133 | textureCompression: 1 134 | compressionQuality: 50 135 | crunchedCompression: 0 136 | allowsAlphaSplitting: 0 137 | overridden: 0 138 | androidETC2FallbackOverride: 0 139 | forceMaximumCompressionQuality_BC6H_BC7: 0 140 | spriteSheet: 141 | serializedVersion: 2 142 | sprites: [] 143 | outline: [] 144 | physicsShape: [] 145 | bones: [] 146 | spriteID: 147 | internalID: 0 148 | vertices: [] 149 | indices: 150 | edges: [] 151 | weights: [] 152 | secondaryTextures: [] 153 | nameFileIdTable: {} 154 | spritePackingTag: 155 | pSDRemoveMatte: 0 156 | pSDShowRemoveMatteOption: 0 157 | userData: 158 | assetBundleName: 159 | assetBundleVariant: 160 | -------------------------------------------------------------------------------- /Packages/src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.coffee.ui-dynamic-sampler", 3 | "displayName": "UI Dynamic Sampler", 4 | "description": "Dynamic sampler component for anti-aliasing UI elements.", 5 | "version": "1.0.0", 6 | "unity": "2020.3", 7 | "license": "MIT", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/mob-sakai/UIDynamicSampler.git" 11 | }, 12 | "author": { 13 | "name": "mob-sakai", 14 | "email": "sakai861104@gmail.com", 15 | "url": "https://github.com/mob-sakai" 16 | }, 17 | "dependencies": { 18 | "com.unity.ugui": "1.0.0" 19 | }, 20 | "keywords": [ 21 | "ui", 22 | "anti-aliasing" 23 | ], 24 | "samples": [ 25 | { 26 | "displayName": "Demo", 27 | "description": "UI Dynamic Sampler Demo", 28 | "path": "Samples~/Demo" 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /Packages/src/package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e951ffff7bb8b440da299d360bb1f6d3 3 | PackageManifestImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_EnableOutputSuspension: 1 16 | m_SpatializerPlugin: 17 | m_AmbisonicDecoderPlugin: 18 | m_DisableAudio: 0 19 | m_VirtualizeEffects: 1 20 | m_RequestedDSPBufferSize: 0 21 | -------------------------------------------------------------------------------- /ProjectSettings/BurstAotSettings_StandaloneOSX.json: -------------------------------------------------------------------------------- 1 | { 2 | "MonoBehaviour": { 3 | "Version": 4, 4 | "EnableBurstCompilation": true, 5 | "EnableOptimisations": true, 6 | "EnableSafetyChecks": false, 7 | "EnableDebugInAllBuilds": false, 8 | "DebugDataKind": 1, 9 | "EnableArmv9SecurityFeatures": false, 10 | "CpuMinTargetX32": 0, 11 | "CpuMaxTargetX32": 0, 12 | "CpuMinTargetX64": 0, 13 | "CpuMaxTargetX64": 0, 14 | "CpuTargetsX64": 72, 15 | "OptimizeFor": 0 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/CommonBurstAotSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "MonoBehaviour": { 3 | "Version": 4, 4 | "DisabledWarnings": "" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_DefaultMaxDepenetrationVelocity: 10 11 | m_SleepThreshold: 0.005 12 | m_DefaultContactOffset: 0.01 13 | m_DefaultSolverIterations: 6 14 | m_DefaultSolverVelocityIterations: 1 15 | m_QueriesHitBackfaces: 0 16 | m_QueriesHitTriggers: 1 17 | m_EnableAdaptiveForce: 0 18 | m_ClothInterCollisionDistance: 0.1 19 | m_ClothInterCollisionStiffness: 0.2 20 | m_ContactsGeneration: 1 21 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 22 | m_AutoSimulation: 1 23 | m_AutoSyncTransforms: 0 24 | m_ReuseCollisionCallbacks: 0 25 | m_ClothInterCollisionSettingsToggle: 0 26 | m_ClothGravity: {x: 0, y: -9.81, z: 0} 27 | m_ContactPairsMode: 0 28 | m_BroadphaseType: 0 29 | m_WorldBounds: 30 | m_Center: {x: 0, y: 0, z: 0} 31 | m_Extent: {x: 250, y: 250, z: 250} 32 | m_WorldSubdivisions: 8 33 | m_FrictionType: 0 34 | m_EnableEnhancedDeterminism: 0 35 | m_EnableUnifiedHeightmaps: 1 36 | m_ImprovedPatchFriction: 0 37 | m_SolverType: 0 38 | m_DefaultMaxAngularSpeed: 50 39 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/Samples/Demo/UIDynamicSampler_Demo.unity 10 | guid: 22c4b187829d14e6dbe71feeab0f3747 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_SerializationMode: 2 8 | m_LineEndingsForNewScripts: 1 9 | m_DefaultBehaviorMode: 0 10 | m_PrefabRegularEnvironment: {fileID: 0} 11 | m_PrefabUIEnvironment: {fileID: 0} 12 | m_SpritePackerMode: 0 13 | m_SpritePackerPaddingPower: 1 14 | m_Bc7TextureCompressor: 0 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp;java;cpp;c;mm;m;h 20 | m_ProjectGenerationRootNamespace: 21 | m_EnableTextureStreamingInEditMode: 1 22 | m_EnableTextureStreamingInPlayMode: 1 23 | m_AsyncShaderCompilation: 1 24 | m_CachingShaderPreprocessor: 1 25 | m_PrefabModeAllowAutoSave: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_GameObjectNamingDigits: 1 29 | m_GameObjectNamingScheme: 0 30 | m_AssetNamingUsesSpace: 1 31 | m_UseLegacyProbeSampleCount: 0 32 | m_SerializeInlineMappingsOnOneLine: 1 33 | m_DisableCookiesInLightmapper: 0 34 | m_AssetPipelineMode: 1 35 | m_RefreshImportMode: 0 36 | m_CacheServerMode: 0 37 | m_CacheServerEndpoint: 38 | m_CacheServerNamespacePrefix: default 39 | m_CacheServerEnableDownload: 1 40 | m_CacheServerEnableUpload: 1 41 | m_CacheServerEnableAuth: 0 42 | m_CacheServerEnableTls: 0 43 | m_CacheServerValidationMode: 2 44 | m_CacheServerDownloadBatchSize: 128 45 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 14 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_VideoShadersIncludeMode: 2 32 | m_AlwaysIncludedShaders: 33 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} 40 | m_PreloadedShaders: [] 41 | m_PreloadShadersBatchTimeLimit: -1 42 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 43 | m_CustomRenderPipeline: {fileID: 0} 44 | m_TransparencySortMode: 0 45 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 46 | m_DefaultRenderingPath: 1 47 | m_DefaultMobileRenderingPath: 1 48 | m_TierSettings: [] 49 | m_LightmapStripping: 0 50 | m_FogStripping: 0 51 | m_InstancingStripping: 0 52 | m_LightmapKeepPlain: 1 53 | m_LightmapKeepDirCombined: 1 54 | m_LightmapKeepDynamicPlain: 1 55 | m_LightmapKeepDynamicDirCombined: 1 56 | m_LightmapKeepShadowMask: 1 57 | m_LightmapKeepSubtractive: 1 58 | m_FogKeepLinear: 1 59 | m_FogKeepExp: 1 60 | m_FogKeepExp2: 1 61 | m_AlbedoSwatchInfos: [] 62 | m_LightsUseLinearIntensity: 0 63 | m_LightsUseColorTemperature: 0 64 | m_DefaultRenderingLayerMask: 1 65 | m_LogWhenShaderIsCompiled: 0 66 | m_SRPDefaultSettings: {} 67 | m_CameraRelativeLightCulling: 0 68 | m_CameraRelativeShadowCulling: 0 69 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | - serializedVersion: 3 297 | m_Name: Enable Debug Button 1 298 | descriptiveName: 299 | descriptiveNegativeName: 300 | negativeButton: 301 | positiveButton: left ctrl 302 | altNegativeButton: 303 | altPositiveButton: joystick button 8 304 | gravity: 0 305 | dead: 0 306 | sensitivity: 0 307 | snap: 0 308 | invert: 0 309 | type: 0 310 | axis: 0 311 | joyNum: 0 312 | - serializedVersion: 3 313 | m_Name: Enable Debug Button 2 314 | descriptiveName: 315 | descriptiveNegativeName: 316 | negativeButton: 317 | positiveButton: backspace 318 | altNegativeButton: 319 | altPositiveButton: joystick button 9 320 | gravity: 0 321 | dead: 0 322 | sensitivity: 0 323 | snap: 0 324 | invert: 0 325 | type: 0 326 | axis: 0 327 | joyNum: 0 328 | - serializedVersion: 3 329 | m_Name: Debug Reset 330 | descriptiveName: 331 | descriptiveNegativeName: 332 | negativeButton: 333 | positiveButton: left alt 334 | altNegativeButton: 335 | altPositiveButton: joystick button 1 336 | gravity: 0 337 | dead: 0 338 | sensitivity: 0 339 | snap: 0 340 | invert: 0 341 | type: 0 342 | axis: 0 343 | joyNum: 0 344 | - serializedVersion: 3 345 | m_Name: Debug Next 346 | descriptiveName: 347 | descriptiveNegativeName: 348 | negativeButton: 349 | positiveButton: page down 350 | altNegativeButton: 351 | altPositiveButton: joystick button 5 352 | gravity: 0 353 | dead: 0 354 | sensitivity: 0 355 | snap: 0 356 | invert: 0 357 | type: 0 358 | axis: 0 359 | joyNum: 0 360 | - serializedVersion: 3 361 | m_Name: Debug Previous 362 | descriptiveName: 363 | descriptiveNegativeName: 364 | negativeButton: 365 | positiveButton: page up 366 | altNegativeButton: 367 | altPositiveButton: joystick button 4 368 | gravity: 0 369 | dead: 0 370 | sensitivity: 0 371 | snap: 0 372 | invert: 0 373 | type: 0 374 | axis: 0 375 | joyNum: 0 376 | - serializedVersion: 3 377 | m_Name: Debug Validate 378 | descriptiveName: 379 | descriptiveNegativeName: 380 | negativeButton: 381 | positiveButton: return 382 | altNegativeButton: 383 | altPositiveButton: joystick button 0 384 | gravity: 0 385 | dead: 0 386 | sensitivity: 0 387 | snap: 0 388 | invert: 0 389 | type: 0 390 | axis: 0 391 | joyNum: 0 392 | - serializedVersion: 3 393 | m_Name: Debug Persistent 394 | descriptiveName: 395 | descriptiveNegativeName: 396 | negativeButton: 397 | positiveButton: right shift 398 | altNegativeButton: 399 | altPositiveButton: joystick button 2 400 | gravity: 0 401 | dead: 0 402 | sensitivity: 0 403 | snap: 0 404 | invert: 0 405 | type: 0 406 | axis: 0 407 | joyNum: 0 408 | - serializedVersion: 3 409 | m_Name: Debug Multiplier 410 | descriptiveName: 411 | descriptiveNegativeName: 412 | negativeButton: 413 | positiveButton: left shift 414 | altNegativeButton: 415 | altPositiveButton: joystick button 3 416 | gravity: 0 417 | dead: 0 418 | sensitivity: 0 419 | snap: 0 420 | invert: 0 421 | type: 0 422 | axis: 0 423 | joyNum: 0 424 | - serializedVersion: 3 425 | m_Name: Debug Horizontal 426 | descriptiveName: 427 | descriptiveNegativeName: 428 | negativeButton: left 429 | positiveButton: right 430 | altNegativeButton: 431 | altPositiveButton: 432 | gravity: 1000 433 | dead: 0.001 434 | sensitivity: 1000 435 | snap: 0 436 | invert: 0 437 | type: 0 438 | axis: 0 439 | joyNum: 0 440 | - serializedVersion: 3 441 | m_Name: Debug Vertical 442 | descriptiveName: 443 | descriptiveNegativeName: 444 | negativeButton: down 445 | positiveButton: up 446 | altNegativeButton: 447 | altPositiveButton: 448 | gravity: 1000 449 | dead: 0.001 450 | sensitivity: 1000 451 | snap: 0 452 | invert: 0 453 | type: 0 454 | axis: 0 455 | joyNum: 0 456 | - serializedVersion: 3 457 | m_Name: Debug Vertical 458 | descriptiveName: 459 | descriptiveNegativeName: 460 | negativeButton: down 461 | positiveButton: up 462 | altNegativeButton: 463 | altPositiveButton: 464 | gravity: 1000 465 | dead: 0.001 466 | sensitivity: 1000 467 | snap: 0 468 | invert: 0 469 | type: 2 470 | axis: 6 471 | joyNum: 0 472 | - serializedVersion: 3 473 | m_Name: Debug Horizontal 474 | descriptiveName: 475 | descriptiveNegativeName: 476 | negativeButton: left 477 | positiveButton: right 478 | altNegativeButton: 479 | altPositiveButton: 480 | gravity: 1000 481 | dead: 0.001 482 | sensitivity: 1000 483 | snap: 0 484 | invert: 0 485 | type: 2 486 | axis: 5 487 | joyNum: 0 488 | m_UsePhysicalKeys: 0 489 | -------------------------------------------------------------------------------- /ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | maxJobWorkers: 0 89 | preserveTilesOutsideBounds: 0 90 | debug: 91 | m_Flags: 0 92 | m_SettingNames: 93 | - Humanoid 94 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreReleasePackages: 0 16 | m_EnablePackageDependencies: 0 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | m_SeeAllPackageVersions: 0 20 | oneTimeWarningShown: 0 21 | m_Registries: 22 | - m_Id: main 23 | m_Name: 24 | m_Url: https://packages.unity.com 25 | m_Scopes: [] 26 | m_IsDefault: 1 27 | m_Capabilities: 7 28 | m_ConfigSource: 0 29 | m_UserSelectedRegistryName: 30 | m_UserAddingNewScopedRegistry: 0 31 | m_RegistryInfoDraft: 32 | m_Modified: 0 33 | m_ErrorMessage: 34 | m_UserModificationsInstanceId: -864 35 | m_OriginalInstanceId: -866 36 | m_LoadAssets: 0 37 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_SimulationMode: 0 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 0 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 24 7 | productGUID: 998ec68ccfebe49b7a1e72a6b0777837 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: UIDynamicSampler 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.12156863, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1280 46 | defaultScreenHeight: 720 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | mipStripping: 1 53 | numberOfMipsStripped: 0 54 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 55 | iosShowActivityIndicatorOnLoading: -1 56 | androidShowActivityIndicatorOnLoading: -1 57 | iosUseCustomAppBackgroundBehavior: 0 58 | iosAllowHTTPDownload: 1 59 | allowedAutorotateToPortrait: 1 60 | allowedAutorotateToPortraitUpsideDown: 1 61 | allowedAutorotateToLandscapeRight: 1 62 | allowedAutorotateToLandscapeLeft: 1 63 | useOSAutorotation: 1 64 | use32BitDisplayBuffer: 1 65 | preserveFramebufferAlpha: 0 66 | disableDepthAndStencilBuffers: 0 67 | androidStartInFullscreen: 1 68 | androidRenderOutsideSafeArea: 1 69 | androidUseSwappy: 1 70 | androidBlitType: 0 71 | androidResizableWindow: 0 72 | androidDefaultWindowWidth: 1920 73 | androidDefaultWindowHeight: 1080 74 | androidMinimumWindowWidth: 400 75 | androidMinimumWindowHeight: 300 76 | androidFullscreenMode: 1 77 | defaultIsNativeResolution: 1 78 | macRetinaSupport: 1 79 | runInBackground: 0 80 | captureSingleScreen: 0 81 | muteOtherAudioSources: 0 82 | Prepare IOS For Recording: 0 83 | Force IOS Speakers When Recording: 0 84 | deferSystemGesturesMode: 0 85 | hideHomeButton: 0 86 | submitAnalytics: 1 87 | usePlayerLog: 1 88 | bakeCollisionMeshes: 0 89 | forceSingleInstance: 0 90 | useFlipModelSwapchain: 1 91 | resizableWindow: 1 92 | useMacAppStoreValidation: 0 93 | macAppStoreCategory: public.app-category.games 94 | gpuSkinning: 0 95 | xboxPIXTextureCapture: 0 96 | xboxEnableAvatar: 0 97 | xboxEnableKinect: 0 98 | xboxEnableKinectAutoTracking: 0 99 | xboxEnableFitness: 0 100 | visibleInBackground: 1 101 | allowFullscreenSwitch: 1 102 | fullscreenMode: 3 103 | xboxSpeechDB: 0 104 | xboxEnableHeadOrientation: 0 105 | xboxEnableGuest: 0 106 | xboxEnablePIXSampling: 0 107 | metalFramebufferOnly: 0 108 | xboxOneResolution: 0 109 | xboxOneSResolution: 0 110 | xboxOneXResolution: 3 111 | xboxOneMonoLoggingLevel: 0 112 | xboxOneLoggingLevel: 1 113 | xboxOneDisableEsram: 0 114 | xboxOneEnableTypeOptimization: 0 115 | xboxOnePresentImmediateThreshold: 0 116 | switchQueueCommandMemory: 1048576 117 | switchQueueControlMemory: 16384 118 | switchQueueComputeMemory: 262144 119 | switchNVNShaderPoolsGranularity: 33554432 120 | switchNVNDefaultPoolsGranularity: 16777216 121 | switchNVNOtherPoolsGranularity: 16777216 122 | switchNVNMaxPublicTextureIDCount: 0 123 | switchNVNMaxPublicSamplerIDCount: 0 124 | switchMaxWorkerMultiple: 8 125 | stadiaPresentMode: 0 126 | stadiaTargetFramerate: 0 127 | vulkanNumSwapchainBuffers: 3 128 | vulkanEnableSetSRGBWrite: 0 129 | vulkanEnablePreTransform: 0 130 | vulkanEnableLateAcquireNextImage: 0 131 | vulkanEnableCommandBufferRecycling: 1 132 | m_SupportedAspectRatios: 133 | 4:3: 1 134 | 5:4: 1 135 | 16:10: 1 136 | 16:9: 1 137 | Others: 1 138 | bundleVersion: 1.0 139 | preloadedAssets: 140 | - {fileID: 11400000, guid: 8c82bda8115ae4eea9f38fa08bb92b35, type: 2} 141 | metroInputSource: 0 142 | wsaTransparentSwapchain: 0 143 | m_HolographicPauseOnTrackingLoss: 1 144 | xboxOneDisableKinectGpuReservation: 1 145 | xboxOneEnable7thCore: 1 146 | vrSettings: 147 | enable360StereoCapture: 0 148 | isWsaHolographicRemotingEnabled: 0 149 | enableFrameTimingStats: 1 150 | enableOpenGLProfilerGPURecorders: 1 151 | useHDRDisplay: 0 152 | D3DHDRBitDepth: 0 153 | m_ColorGamuts: 00000000 154 | targetPixelDensity: 30 155 | resolutionScalingMode: 0 156 | resetResolutionOnWindowResize: 0 157 | androidSupportedAspectRatio: 1 158 | androidMaxAspectRatio: 2.1 159 | applicationIdentifier: 160 | Standalone: com.DefaultCompany.UIDynamicSampler 161 | iPhone: com.DefaultCompany.UIAntiAliasing 162 | buildNumber: 163 | Standalone: 0 164 | iPhone: 0 165 | tvOS: 0 166 | overrideDefaultApplicationIdentifier: 0 167 | AndroidBundleVersionCode: 1 168 | AndroidMinSdkVersion: 22 169 | AndroidTargetSdkVersion: 0 170 | AndroidPreferredInstallLocation: 1 171 | aotOptions: 172 | stripEngineCode: 1 173 | iPhoneStrippingLevel: 0 174 | iPhoneScriptCallOptimization: 0 175 | ForceInternetPermission: 0 176 | ForceSDCardPermission: 0 177 | CreateWallpaper: 0 178 | APKExpansionFiles: 0 179 | keepLoadedShadersAlive: 0 180 | StripUnusedMeshComponents: 0 181 | VertexChannelCompressionMask: 4054 182 | iPhoneSdkVersion: 988 183 | iOSTargetOSVersionString: 12.0 184 | tvOSSdkVersion: 0 185 | tvOSRequireExtendedGameController: 0 186 | tvOSTargetOSVersionString: 12.0 187 | uIPrerenderedIcon: 0 188 | uIRequiresPersistentWiFi: 0 189 | uIRequiresFullScreen: 1 190 | uIStatusBarHidden: 1 191 | uIExitOnSuspend: 0 192 | uIStatusBarStyle: 0 193 | appleTVSplashScreen: {fileID: 0} 194 | appleTVSplashScreen2x: {fileID: 0} 195 | tvOSSmallIconLayers: [] 196 | tvOSSmallIconLayers2x: [] 197 | tvOSLargeIconLayers: [] 198 | tvOSLargeIconLayers2x: [] 199 | tvOSTopShelfImageLayers: [] 200 | tvOSTopShelfImageLayers2x: [] 201 | tvOSTopShelfImageWideLayers: [] 202 | tvOSTopShelfImageWideLayers2x: [] 203 | iOSLaunchScreenType: 0 204 | iOSLaunchScreenPortrait: {fileID: 0} 205 | iOSLaunchScreenLandscape: {fileID: 0} 206 | iOSLaunchScreenBackgroundColor: 207 | serializedVersion: 2 208 | rgba: 0 209 | iOSLaunchScreenFillPct: 100 210 | iOSLaunchScreenSize: 100 211 | iOSLaunchScreenCustomXibPath: 212 | iOSLaunchScreeniPadType: 0 213 | iOSLaunchScreeniPadImage: {fileID: 0} 214 | iOSLaunchScreeniPadBackgroundColor: 215 | serializedVersion: 2 216 | rgba: 0 217 | iOSLaunchScreeniPadFillPct: 100 218 | iOSLaunchScreeniPadSize: 100 219 | iOSLaunchScreeniPadCustomXibPath: 220 | iOSLaunchScreenCustomStoryboardPath: 221 | iOSLaunchScreeniPadCustomStoryboardPath: 222 | iOSDeviceRequirements: [] 223 | iOSURLSchemes: [] 224 | macOSURLSchemes: [] 225 | iOSBackgroundModes: 0 226 | iOSMetalForceHardShadows: 0 227 | metalEditorSupport: 1 228 | metalAPIValidation: 1 229 | iOSRenderExtraFrameOnPause: 0 230 | iosCopyPluginsCodeInsteadOfSymlink: 0 231 | appleDeveloperTeamID: 232 | iOSManualSigningProvisioningProfileID: 233 | tvOSManualSigningProvisioningProfileID: 234 | iOSManualSigningProvisioningProfileType: 0 235 | tvOSManualSigningProvisioningProfileType: 0 236 | appleEnableAutomaticSigning: 0 237 | iOSRequireARKit: 0 238 | iOSAutomaticallyDetectAndAddCapabilities: 1 239 | appleEnableProMotion: 0 240 | shaderPrecisionModel: 0 241 | clonedFromGUID: 00000000000000000000000000000000 242 | templatePackageId: 243 | templateDefaultScene: 244 | useCustomMainManifest: 0 245 | useCustomLauncherManifest: 0 246 | useCustomMainGradleTemplate: 0 247 | useCustomLauncherGradleManifest: 0 248 | useCustomBaseGradleTemplate: 0 249 | useCustomGradlePropertiesTemplate: 0 250 | useCustomProguardFile: 0 251 | AndroidTargetArchitectures: 1 252 | AndroidTargetDevices: 0 253 | AndroidSplashScreenScale: 0 254 | androidSplashScreen: {fileID: 0} 255 | AndroidKeystoreName: 256 | AndroidKeyaliasName: 257 | AndroidBuildApkPerCpuArchitecture: 0 258 | AndroidTVCompatibility: 0 259 | AndroidIsGame: 1 260 | AndroidEnableTango: 0 261 | androidEnableBanner: 1 262 | androidUseLowAccuracyLocation: 0 263 | androidUseCustomKeystore: 0 264 | m_AndroidBanners: 265 | - width: 320 266 | height: 180 267 | banner: {fileID: 0} 268 | androidGamepadSupportLevel: 0 269 | chromeosInputEmulation: 1 270 | AndroidMinifyWithR8: 0 271 | AndroidMinifyRelease: 0 272 | AndroidMinifyDebug: 0 273 | AndroidValidateAppBundleSize: 1 274 | AndroidAppBundleSizeToValidate: 150 275 | m_BuildTargetIcons: [] 276 | m_BuildTargetPlatformIcons: 277 | - m_BuildTarget: iPhone 278 | m_Icons: 279 | - m_Textures: [] 280 | m_Width: 180 281 | m_Height: 180 282 | m_Kind: 0 283 | m_SubKind: iPhone 284 | - m_Textures: [] 285 | m_Width: 120 286 | m_Height: 120 287 | m_Kind: 0 288 | m_SubKind: iPhone 289 | - m_Textures: [] 290 | m_Width: 167 291 | m_Height: 167 292 | m_Kind: 0 293 | m_SubKind: iPad 294 | - m_Textures: [] 295 | m_Width: 152 296 | m_Height: 152 297 | m_Kind: 0 298 | m_SubKind: iPad 299 | - m_Textures: [] 300 | m_Width: 76 301 | m_Height: 76 302 | m_Kind: 0 303 | m_SubKind: iPad 304 | - m_Textures: [] 305 | m_Width: 120 306 | m_Height: 120 307 | m_Kind: 3 308 | m_SubKind: iPhone 309 | - m_Textures: [] 310 | m_Width: 80 311 | m_Height: 80 312 | m_Kind: 3 313 | m_SubKind: iPhone 314 | - m_Textures: [] 315 | m_Width: 80 316 | m_Height: 80 317 | m_Kind: 3 318 | m_SubKind: iPad 319 | - m_Textures: [] 320 | m_Width: 40 321 | m_Height: 40 322 | m_Kind: 3 323 | m_SubKind: iPad 324 | - m_Textures: [] 325 | m_Width: 87 326 | m_Height: 87 327 | m_Kind: 1 328 | m_SubKind: iPhone 329 | - m_Textures: [] 330 | m_Width: 58 331 | m_Height: 58 332 | m_Kind: 1 333 | m_SubKind: iPhone 334 | - m_Textures: [] 335 | m_Width: 29 336 | m_Height: 29 337 | m_Kind: 1 338 | m_SubKind: iPhone 339 | - m_Textures: [] 340 | m_Width: 58 341 | m_Height: 58 342 | m_Kind: 1 343 | m_SubKind: iPad 344 | - m_Textures: [] 345 | m_Width: 29 346 | m_Height: 29 347 | m_Kind: 1 348 | m_SubKind: iPad 349 | - m_Textures: [] 350 | m_Width: 60 351 | m_Height: 60 352 | m_Kind: 2 353 | m_SubKind: iPhone 354 | - m_Textures: [] 355 | m_Width: 40 356 | m_Height: 40 357 | m_Kind: 2 358 | m_SubKind: iPhone 359 | - m_Textures: [] 360 | m_Width: 40 361 | m_Height: 40 362 | m_Kind: 2 363 | m_SubKind: iPad 364 | - m_Textures: [] 365 | m_Width: 20 366 | m_Height: 20 367 | m_Kind: 2 368 | m_SubKind: iPad 369 | - m_Textures: [] 370 | m_Width: 1024 371 | m_Height: 1024 372 | m_Kind: 4 373 | m_SubKind: App Store 374 | - m_BuildTarget: Android 375 | m_Icons: 376 | - m_Textures: [] 377 | m_Width: 432 378 | m_Height: 432 379 | m_Kind: 2 380 | m_SubKind: 381 | - m_Textures: [] 382 | m_Width: 324 383 | m_Height: 324 384 | m_Kind: 2 385 | m_SubKind: 386 | - m_Textures: [] 387 | m_Width: 216 388 | m_Height: 216 389 | m_Kind: 2 390 | m_SubKind: 391 | - m_Textures: [] 392 | m_Width: 162 393 | m_Height: 162 394 | m_Kind: 2 395 | m_SubKind: 396 | - m_Textures: [] 397 | m_Width: 108 398 | m_Height: 108 399 | m_Kind: 2 400 | m_SubKind: 401 | - m_Textures: [] 402 | m_Width: 81 403 | m_Height: 81 404 | m_Kind: 2 405 | m_SubKind: 406 | - m_Textures: [] 407 | m_Width: 192 408 | m_Height: 192 409 | m_Kind: 1 410 | m_SubKind: 411 | - m_Textures: [] 412 | m_Width: 144 413 | m_Height: 144 414 | m_Kind: 1 415 | m_SubKind: 416 | - m_Textures: [] 417 | m_Width: 96 418 | m_Height: 96 419 | m_Kind: 1 420 | m_SubKind: 421 | - m_Textures: [] 422 | m_Width: 72 423 | m_Height: 72 424 | m_Kind: 1 425 | m_SubKind: 426 | - m_Textures: [] 427 | m_Width: 48 428 | m_Height: 48 429 | m_Kind: 1 430 | m_SubKind: 431 | - m_Textures: [] 432 | m_Width: 36 433 | m_Height: 36 434 | m_Kind: 1 435 | m_SubKind: 436 | - m_Textures: [] 437 | m_Width: 192 438 | m_Height: 192 439 | m_Kind: 0 440 | m_SubKind: 441 | - m_Textures: [] 442 | m_Width: 144 443 | m_Height: 144 444 | m_Kind: 0 445 | m_SubKind: 446 | - m_Textures: [] 447 | m_Width: 96 448 | m_Height: 96 449 | m_Kind: 0 450 | m_SubKind: 451 | - m_Textures: [] 452 | m_Width: 72 453 | m_Height: 72 454 | m_Kind: 0 455 | m_SubKind: 456 | - m_Textures: [] 457 | m_Width: 48 458 | m_Height: 48 459 | m_Kind: 0 460 | m_SubKind: 461 | - m_Textures: [] 462 | m_Width: 36 463 | m_Height: 36 464 | m_Kind: 0 465 | m_SubKind: 466 | m_BuildTargetBatching: [] 467 | m_BuildTargetShaderSettings: [] 468 | m_BuildTargetGraphicsJobs: [] 469 | m_BuildTargetGraphicsJobMode: [] 470 | m_BuildTargetGraphicsAPIs: [] 471 | m_BuildTargetVRSettings: [] 472 | m_DefaultShaderChunkSizeInMB: 16 473 | m_DefaultShaderChunkCount: 0 474 | openGLRequireES31: 0 475 | openGLRequireES31AEP: 0 476 | openGLRequireES32: 0 477 | m_TemplateCustomTags: {} 478 | mobileMTRendering: 479 | Android: 1 480 | iPhone: 1 481 | tvOS: 1 482 | m_BuildTargetGroupLightmapEncodingQuality: [] 483 | m_BuildTargetGroupLightmapSettings: [] 484 | m_BuildTargetNormalMapEncoding: [] 485 | m_BuildTargetDefaultTextureCompressionFormat: [] 486 | playModeTestRunnerEnabled: 0 487 | runPlayModeTestAsEditModeTest: 0 488 | actionOnDotNetUnhandledException: 1 489 | enableInternalProfiler: 0 490 | logObjCUncaughtExceptions: 1 491 | enableCrashReportAPI: 0 492 | cameraUsageDescription: 493 | locationUsageDescription: 494 | microphoneUsageDescription: 495 | bluetoothUsageDescription: 496 | switchNMETAOverride: 497 | switchNetLibKey: 498 | switchSocketMemoryPoolSize: 6144 499 | switchSocketAllocatorPoolSize: 128 500 | switchSocketConcurrencyLimit: 14 501 | switchScreenResolutionBehavior: 2 502 | switchUseCPUProfiler: 0 503 | switchUseGOLDLinker: 0 504 | switchLTOSetting: 0 505 | switchApplicationID: 0x01004b9000490000 506 | switchNSODependencies: 507 | switchTitleNames_0: 508 | switchTitleNames_1: 509 | switchTitleNames_2: 510 | switchTitleNames_3: 511 | switchTitleNames_4: 512 | switchTitleNames_5: 513 | switchTitleNames_6: 514 | switchTitleNames_7: 515 | switchTitleNames_8: 516 | switchTitleNames_9: 517 | switchTitleNames_10: 518 | switchTitleNames_11: 519 | switchTitleNames_12: 520 | switchTitleNames_13: 521 | switchTitleNames_14: 522 | switchTitleNames_15: 523 | switchPublisherNames_0: 524 | switchPublisherNames_1: 525 | switchPublisherNames_2: 526 | switchPublisherNames_3: 527 | switchPublisherNames_4: 528 | switchPublisherNames_5: 529 | switchPublisherNames_6: 530 | switchPublisherNames_7: 531 | switchPublisherNames_8: 532 | switchPublisherNames_9: 533 | switchPublisherNames_10: 534 | switchPublisherNames_11: 535 | switchPublisherNames_12: 536 | switchPublisherNames_13: 537 | switchPublisherNames_14: 538 | switchPublisherNames_15: 539 | switchIcons_0: {fileID: 0} 540 | switchIcons_1: {fileID: 0} 541 | switchIcons_2: {fileID: 0} 542 | switchIcons_3: {fileID: 0} 543 | switchIcons_4: {fileID: 0} 544 | switchIcons_5: {fileID: 0} 545 | switchIcons_6: {fileID: 0} 546 | switchIcons_7: {fileID: 0} 547 | switchIcons_8: {fileID: 0} 548 | switchIcons_9: {fileID: 0} 549 | switchIcons_10: {fileID: 0} 550 | switchIcons_11: {fileID: 0} 551 | switchIcons_12: {fileID: 0} 552 | switchIcons_13: {fileID: 0} 553 | switchIcons_14: {fileID: 0} 554 | switchIcons_15: {fileID: 0} 555 | switchSmallIcons_0: {fileID: 0} 556 | switchSmallIcons_1: {fileID: 0} 557 | switchSmallIcons_2: {fileID: 0} 558 | switchSmallIcons_3: {fileID: 0} 559 | switchSmallIcons_4: {fileID: 0} 560 | switchSmallIcons_5: {fileID: 0} 561 | switchSmallIcons_6: {fileID: 0} 562 | switchSmallIcons_7: {fileID: 0} 563 | switchSmallIcons_8: {fileID: 0} 564 | switchSmallIcons_9: {fileID: 0} 565 | switchSmallIcons_10: {fileID: 0} 566 | switchSmallIcons_11: {fileID: 0} 567 | switchSmallIcons_12: {fileID: 0} 568 | switchSmallIcons_13: {fileID: 0} 569 | switchSmallIcons_14: {fileID: 0} 570 | switchSmallIcons_15: {fileID: 0} 571 | switchManualHTML: 572 | switchAccessibleURLs: 573 | switchLegalInformation: 574 | switchMainThreadStackSize: 1048576 575 | switchPresenceGroupId: 576 | switchLogoHandling: 0 577 | switchReleaseVersion: 0 578 | switchDisplayVersion: 1.0.0 579 | switchStartupUserAccount: 0 580 | switchSupportedLanguagesMask: 0 581 | switchLogoType: 0 582 | switchApplicationErrorCodeCategory: 583 | switchUserAccountSaveDataSize: 0 584 | switchUserAccountSaveDataJournalSize: 0 585 | switchApplicationAttribute: 0 586 | switchCardSpecSize: -1 587 | switchCardSpecClock: -1 588 | switchRatingsMask: 0 589 | switchRatingsInt_0: 0 590 | switchRatingsInt_1: 0 591 | switchRatingsInt_2: 0 592 | switchRatingsInt_3: 0 593 | switchRatingsInt_4: 0 594 | switchRatingsInt_5: 0 595 | switchRatingsInt_6: 0 596 | switchRatingsInt_7: 0 597 | switchRatingsInt_8: 0 598 | switchRatingsInt_9: 0 599 | switchRatingsInt_10: 0 600 | switchRatingsInt_11: 0 601 | switchRatingsInt_12: 0 602 | switchLocalCommunicationIds_0: 603 | switchLocalCommunicationIds_1: 604 | switchLocalCommunicationIds_2: 605 | switchLocalCommunicationIds_3: 606 | switchLocalCommunicationIds_4: 607 | switchLocalCommunicationIds_5: 608 | switchLocalCommunicationIds_6: 609 | switchLocalCommunicationIds_7: 610 | switchParentalControl: 0 611 | switchAllowsScreenshot: 1 612 | switchAllowsVideoCapturing: 1 613 | switchAllowsRuntimeAddOnContentInstall: 0 614 | switchDataLossConfirmation: 0 615 | switchUserAccountLockEnabled: 0 616 | switchSystemResourceMemory: 16777216 617 | switchSupportedNpadStyles: 22 618 | switchNativeFsCacheSize: 32 619 | switchIsHoldTypeHorizontal: 0 620 | switchSupportedNpadCount: 8 621 | switchEnableTouchScreen: 1 622 | switchSocketConfigEnabled: 0 623 | switchTcpInitialSendBufferSize: 32 624 | switchTcpInitialReceiveBufferSize: 64 625 | switchTcpAutoSendBufferSizeMax: 256 626 | switchTcpAutoReceiveBufferSizeMax: 256 627 | switchUdpSendBufferSize: 9 628 | switchUdpReceiveBufferSize: 42 629 | switchSocketBufferEfficiency: 4 630 | switchSocketInitializeEnabled: 1 631 | switchNetworkInterfaceManagerInitializeEnabled: 1 632 | switchPlayerConnectionEnabled: 1 633 | switchUseNewStyleFilepaths: 0 634 | switchUseLegacyFmodPriorities: 1 635 | switchUseMicroSleepForYield: 1 636 | switchEnableRamDiskSupport: 0 637 | switchMicroSleepForYieldTime: 25 638 | switchRamDiskSpaceSize: 12 639 | ps4NPAgeRating: 12 640 | ps4NPTitleSecret: 641 | ps4NPTrophyPackPath: 642 | ps4ParentalLevel: 11 643 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 644 | ps4Category: 0 645 | ps4MasterVersion: 01.00 646 | ps4AppVersion: 01.00 647 | ps4AppType: 0 648 | ps4ParamSfxPath: 649 | ps4VideoOutPixelFormat: 0 650 | ps4VideoOutInitialWidth: 1920 651 | ps4VideoOutBaseModeInitialWidth: 1920 652 | ps4VideoOutReprojectionRate: 60 653 | ps4PronunciationXMLPath: 654 | ps4PronunciationSIGPath: 655 | ps4BackgroundImagePath: 656 | ps4StartupImagePath: 657 | ps4StartupImagesFolder: 658 | ps4IconImagesFolder: 659 | ps4SaveDataImagePath: 660 | ps4SdkOverride: 661 | ps4BGMPath: 662 | ps4ShareFilePath: 663 | ps4ShareOverlayImagePath: 664 | ps4PrivacyGuardImagePath: 665 | ps4ExtraSceSysFile: 666 | ps4NPtitleDatPath: 667 | ps4RemotePlayKeyAssignment: -1 668 | ps4RemotePlayKeyMappingDir: 669 | ps4PlayTogetherPlayerCount: 0 670 | ps4EnterButtonAssignment: 2 671 | ps4ApplicationParam1: 0 672 | ps4ApplicationParam2: 0 673 | ps4ApplicationParam3: 0 674 | ps4ApplicationParam4: 0 675 | ps4DownloadDataSize: 0 676 | ps4GarlicHeapSize: 2048 677 | ps4ProGarlicHeapSize: 2560 678 | playerPrefsMaxSize: 32768 679 | ps4Passcode: mXzhFoXdJN4WFpg3IPg2KFKvrVlCTh0r 680 | ps4pnSessions: 1 681 | ps4pnPresence: 1 682 | ps4pnFriends: 1 683 | ps4pnGameCustomData: 1 684 | playerPrefsSupport: 0 685 | enableApplicationExit: 0 686 | resetTempFolder: 1 687 | restrictedAudioUsageRights: 0 688 | ps4UseResolutionFallback: 0 689 | ps4ReprojectionSupport: 0 690 | ps4UseAudio3dBackend: 0 691 | ps4UseLowGarlicFragmentationMode: 1 692 | ps4SocialScreenEnabled: 0 693 | ps4ScriptOptimizationLevel: 2 694 | ps4Audio3dVirtualSpeakerCount: 14 695 | ps4attribCpuUsage: 0 696 | ps4PatchPkgPath: 697 | ps4PatchLatestPkgPath: 698 | ps4PatchChangeinfoPath: 699 | ps4PatchDayOne: 0 700 | ps4attribUserManagement: 0 701 | ps4attribMoveSupport: 0 702 | ps4attrib3DSupport: 0 703 | ps4attribShareSupport: 0 704 | ps4attribExclusiveVR: 0 705 | ps4disableAutoHideSplash: 0 706 | ps4videoRecordingFeaturesUsed: 0 707 | ps4contentSearchFeaturesUsed: 0 708 | ps4CompatibilityPS5: 0 709 | ps4AllowPS5Detection: 0 710 | ps4GPU800MHz: 1 711 | ps4attribEyeToEyeDistanceSettingVR: 0 712 | ps4IncludedModules: [] 713 | ps4attribVROutputEnabled: 0 714 | monoEnv: 715 | splashScreenBackgroundSourceLandscape: {fileID: 0} 716 | splashScreenBackgroundSourcePortrait: {fileID: 0} 717 | blurSplashScreenBackground: 1 718 | spritePackerPolicy: 719 | webGLMemorySize: 32 720 | webGLExceptionSupport: 1 721 | webGLNameFilesAsHashes: 0 722 | webGLDataCaching: 1 723 | webGLDebugSymbols: 0 724 | webGLEmscriptenArgs: 725 | webGLModulesDirectory: 726 | webGLTemplate: APPLICATION:Default 727 | webGLAnalyzeBuildSize: 0 728 | webGLUseEmbeddedResources: 0 729 | webGLCompressionFormat: 2 730 | webGLWasmArithmeticExceptions: 0 731 | webGLLinkerTarget: 1 732 | webGLThreadsSupport: 0 733 | webGLDecompressionFallback: 0 734 | webGLPowerPreference: 2 735 | scriptingDefineSymbols: {} 736 | additionalCompilerArguments: {} 737 | platformArchitecture: {} 738 | scriptingBackend: {} 739 | il2cppCompilerConfiguration: {} 740 | managedStrippingLevel: {} 741 | incrementalIl2cppBuild: {} 742 | suppressCommonWarnings: 1 743 | allowUnsafeCode: 0 744 | useDeterministicCompilation: 1 745 | enableRoslynAnalyzers: 1 746 | additionalIl2CppArgs: 747 | scriptingRuntimeVersion: 1 748 | gcIncremental: 1 749 | assemblyVersionValidation: 1 750 | gcWBarrierValidation: 0 751 | apiCompatibilityLevelPerPlatform: {} 752 | m_RenderingPath: 1 753 | m_MobileRenderingPath: 1 754 | metroPackageName: UIAntiAliasing 755 | metroPackageVersion: 756 | metroCertificatePath: 757 | metroCertificatePassword: 758 | metroCertificateSubject: 759 | metroCertificateIssuer: 760 | metroCertificateNotAfter: 0000000000000000 761 | metroApplicationDescription: UIAntiAliasing 762 | wsaImages: {} 763 | metroTileShortName: 764 | metroTileShowName: 0 765 | metroMediumTileShowName: 0 766 | metroLargeTileShowName: 0 767 | metroWideTileShowName: 0 768 | metroSupportStreamingInstall: 0 769 | metroLastRequiredScene: 0 770 | metroDefaultTileSize: 1 771 | metroTileForegroundText: 2 772 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 773 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} 774 | metroSplashScreenUseBackgroundColor: 0 775 | platformCapabilities: {} 776 | metroTargetDeviceFamilies: {} 777 | metroFTAName: 778 | metroFTAFileTypes: [] 779 | metroProtocolName: 780 | vcxProjDefaultLanguage: 781 | XboxOneProductId: 782 | XboxOneUpdateKey: 783 | XboxOneSandboxId: 784 | XboxOneContentId: 785 | XboxOneTitleId: 786 | XboxOneSCId: 787 | XboxOneGameOsOverridePath: 788 | XboxOnePackagingOverridePath: 789 | XboxOneAppManifestOverridePath: 790 | XboxOneVersion: 1.0.0.0 791 | XboxOnePackageEncryption: 0 792 | XboxOnePackageUpdateGranularity: 2 793 | XboxOneDescription: 794 | XboxOneLanguage: 795 | - enus 796 | XboxOneCapability: [] 797 | XboxOneGameRating: {} 798 | XboxOneIsContentPackage: 0 799 | XboxOneEnhancedXboxCompatibilityMode: 0 800 | XboxOneEnableGPUVariability: 1 801 | XboxOneSockets: {} 802 | XboxOneSplashScreen: {fileID: 0} 803 | XboxOneAllowedProductIds: [] 804 | XboxOnePersistentLocalStorageSize: 0 805 | XboxOneXTitleMemory: 8 806 | XboxOneOverrideIdentityName: 807 | XboxOneOverrideIdentityPublisher: 808 | vrEditorSettings: {} 809 | cloudServicesEnabled: {} 810 | luminIcon: 811 | m_Name: 812 | m_ModelFolderPath: 813 | m_PortalFolderPath: 814 | luminCert: 815 | m_CertPath: 816 | m_SignPackage: 1 817 | luminIsChannelApp: 0 818 | luminVersion: 819 | m_VersionCode: 1 820 | m_VersionName: 821 | apiCompatibilityLevel: 6 822 | activeInputHandler: 0 823 | windowsGamepadBackendHint: 0 824 | cloudProjectId: 825 | framebufferDepthMemorylessMode: 0 826 | qualitySettingsNames: [] 827 | projectName: 828 | organizationId: 829 | cloudEnabled: 0 830 | legacyClampBlendShapeWeights: 0 831 | playerDataPath: 832 | forceSRGBBlit: 1 833 | virtualTexturingSupportEnabled: 0 834 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2021.3.30f1 2 | m_EditorVersionWithRevision: 2021.3.30f1 (b4360d7cdac4) 3 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | skinWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | realtimeGICPUUsage: 25 31 | lodBias: 0.3 32 | maximumLODLevel: 0 33 | streamingMipmapsActive: 0 34 | streamingMipmapsAddAllCameras: 1 35 | streamingMipmapsMemoryBudget: 512 36 | streamingMipmapsRenderersPerFrame: 512 37 | streamingMipmapsMaxLevelReduction: 2 38 | streamingMipmapsMaxFileIORequests: 1024 39 | particleRaycastBudget: 4 40 | asyncUploadTimeSlice: 2 41 | asyncUploadBufferSize: 16 42 | asyncUploadPersistentBuffer: 1 43 | resolutionScalingFixedDPIFactor: 1 44 | customRenderPipeline: {fileID: 0} 45 | excludedTargetPlatforms: [] 46 | - serializedVersion: 2 47 | name: Low 48 | pixelLightCount: 0 49 | shadows: 0 50 | shadowResolution: 0 51 | shadowProjection: 1 52 | shadowCascades: 1 53 | shadowDistance: 20 54 | shadowNearPlaneOffset: 3 55 | shadowCascade2Split: 0.33333334 56 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 57 | shadowmaskMode: 0 58 | skinWeights: 2 59 | textureQuality: 0 60 | anisotropicTextures: 0 61 | antiAliasing: 0 62 | softParticles: 0 63 | softVegetation: 0 64 | realtimeReflectionProbes: 0 65 | billboardsFaceCameraPosition: 0 66 | vSyncCount: 0 67 | realtimeGICPUUsage: 25 68 | lodBias: 0.4 69 | maximumLODLevel: 0 70 | streamingMipmapsActive: 0 71 | streamingMipmapsAddAllCameras: 1 72 | streamingMipmapsMemoryBudget: 512 73 | streamingMipmapsRenderersPerFrame: 512 74 | streamingMipmapsMaxLevelReduction: 2 75 | streamingMipmapsMaxFileIORequests: 1024 76 | particleRaycastBudget: 16 77 | asyncUploadTimeSlice: 2 78 | asyncUploadBufferSize: 16 79 | asyncUploadPersistentBuffer: 1 80 | resolutionScalingFixedDPIFactor: 1 81 | customRenderPipeline: {fileID: 0} 82 | excludedTargetPlatforms: [] 83 | - serializedVersion: 2 84 | name: Medium 85 | pixelLightCount: 1 86 | shadows: 1 87 | shadowResolution: 0 88 | shadowProjection: 1 89 | shadowCascades: 1 90 | shadowDistance: 20 91 | shadowNearPlaneOffset: 3 92 | shadowCascade2Split: 0.33333334 93 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 94 | shadowmaskMode: 0 95 | skinWeights: 2 96 | textureQuality: 0 97 | anisotropicTextures: 1 98 | antiAliasing: 0 99 | softParticles: 0 100 | softVegetation: 0 101 | realtimeReflectionProbes: 0 102 | billboardsFaceCameraPosition: 0 103 | vSyncCount: 1 104 | realtimeGICPUUsage: 25 105 | lodBias: 0.7 106 | maximumLODLevel: 0 107 | streamingMipmapsActive: 0 108 | streamingMipmapsAddAllCameras: 1 109 | streamingMipmapsMemoryBudget: 512 110 | streamingMipmapsRenderersPerFrame: 512 111 | streamingMipmapsMaxLevelReduction: 2 112 | streamingMipmapsMaxFileIORequests: 1024 113 | particleRaycastBudget: 64 114 | asyncUploadTimeSlice: 2 115 | asyncUploadBufferSize: 16 116 | asyncUploadPersistentBuffer: 1 117 | resolutionScalingFixedDPIFactor: 1 118 | customRenderPipeline: {fileID: 0} 119 | excludedTargetPlatforms: [] 120 | - serializedVersion: 2 121 | name: High 122 | pixelLightCount: 2 123 | shadows: 2 124 | shadowResolution: 1 125 | shadowProjection: 1 126 | shadowCascades: 2 127 | shadowDistance: 40 128 | shadowNearPlaneOffset: 3 129 | shadowCascade2Split: 0.33333334 130 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 131 | shadowmaskMode: 1 132 | skinWeights: 2 133 | textureQuality: 0 134 | anisotropicTextures: 1 135 | antiAliasing: 0 136 | softParticles: 0 137 | softVegetation: 1 138 | realtimeReflectionProbes: 1 139 | billboardsFaceCameraPosition: 1 140 | vSyncCount: 1 141 | realtimeGICPUUsage: 50 142 | lodBias: 1 143 | maximumLODLevel: 0 144 | streamingMipmapsActive: 0 145 | streamingMipmapsAddAllCameras: 1 146 | streamingMipmapsMemoryBudget: 512 147 | streamingMipmapsRenderersPerFrame: 512 148 | streamingMipmapsMaxLevelReduction: 2 149 | streamingMipmapsMaxFileIORequests: 1024 150 | particleRaycastBudget: 256 151 | asyncUploadTimeSlice: 2 152 | asyncUploadBufferSize: 16 153 | asyncUploadPersistentBuffer: 1 154 | resolutionScalingFixedDPIFactor: 1 155 | customRenderPipeline: {fileID: 0} 156 | excludedTargetPlatforms: [] 157 | - serializedVersion: 2 158 | name: Very High 159 | pixelLightCount: 3 160 | shadows: 2 161 | shadowResolution: 2 162 | shadowProjection: 1 163 | shadowCascades: 2 164 | shadowDistance: 70 165 | shadowNearPlaneOffset: 3 166 | shadowCascade2Split: 0.33333334 167 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 168 | shadowmaskMode: 1 169 | skinWeights: 4 170 | textureQuality: 0 171 | anisotropicTextures: 2 172 | antiAliasing: 2 173 | softParticles: 1 174 | softVegetation: 1 175 | realtimeReflectionProbes: 1 176 | billboardsFaceCameraPosition: 1 177 | vSyncCount: 1 178 | realtimeGICPUUsage: 50 179 | lodBias: 1.5 180 | maximumLODLevel: 0 181 | streamingMipmapsActive: 0 182 | streamingMipmapsAddAllCameras: 1 183 | streamingMipmapsMemoryBudget: 512 184 | streamingMipmapsRenderersPerFrame: 512 185 | streamingMipmapsMaxLevelReduction: 2 186 | streamingMipmapsMaxFileIORequests: 1024 187 | particleRaycastBudget: 1024 188 | asyncUploadTimeSlice: 2 189 | asyncUploadBufferSize: 16 190 | asyncUploadPersistentBuffer: 1 191 | resolutionScalingFixedDPIFactor: 1 192 | customRenderPipeline: {fileID: 0} 193 | excludedTargetPlatforms: [] 194 | - serializedVersion: 2 195 | name: Ultra 196 | pixelLightCount: 4 197 | shadows: 2 198 | shadowResolution: 2 199 | shadowProjection: 1 200 | shadowCascades: 4 201 | shadowDistance: 150 202 | shadowNearPlaneOffset: 3 203 | shadowCascade2Split: 0.33333334 204 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 205 | shadowmaskMode: 1 206 | skinWeights: 255 207 | textureQuality: 0 208 | anisotropicTextures: 2 209 | antiAliasing: 2 210 | softParticles: 1 211 | softVegetation: 1 212 | realtimeReflectionProbes: 1 213 | billboardsFaceCameraPosition: 1 214 | vSyncCount: 1 215 | realtimeGICPUUsage: 100 216 | lodBias: 2 217 | maximumLODLevel: 0 218 | streamingMipmapsActive: 0 219 | streamingMipmapsAddAllCameras: 1 220 | streamingMipmapsMemoryBudget: 512 221 | streamingMipmapsRenderersPerFrame: 512 222 | streamingMipmapsMaxLevelReduction: 2 223 | streamingMipmapsMaxFileIORequests: 1024 224 | particleRaycastBudget: 4096 225 | asyncUploadTimeSlice: 2 226 | asyncUploadBufferSize: 16 227 | asyncUploadPersistentBuffer: 1 228 | resolutionScalingFixedDPIFactor: 1 229 | customRenderPipeline: {fileID: 0} 230 | excludedTargetPlatforms: [] 231 | m_PerPlatformDefaultQuality: 232 | Android: 2 233 | EmbeddedLinux: 5 234 | GameCoreScarlett: 5 235 | GameCoreXboxOne: 5 236 | LinuxHeadlessSimulation: 5 237 | Lumin: 5 238 | Nintendo Switch: 5 239 | PS4: 5 240 | PS5: 5 241 | Server: 5 242 | Stadia: 5 243 | Standalone: 5 244 | WebGL: 3 245 | Windows Store Apps: 5 246 | XboxOne: 5 247 | iPhone: 2 248 | tvOS: 2 249 | -------------------------------------------------------------------------------- /ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "defaultInstantiationMode": 0 8 | }, 9 | { 10 | "userAdded": false, 11 | "type": "UnityEditor.Animations.AnimatorController", 12 | "defaultInstantiationMode": 0 13 | }, 14 | { 15 | "userAdded": false, 16 | "type": "UnityEngine.AnimatorOverrideController", 17 | "defaultInstantiationMode": 0 18 | }, 19 | { 20 | "userAdded": false, 21 | "type": "UnityEditor.Audio.AudioMixerController", 22 | "defaultInstantiationMode": 0 23 | }, 24 | { 25 | "userAdded": false, 26 | "type": "UnityEngine.ComputeShader", 27 | "defaultInstantiationMode": 1 28 | }, 29 | { 30 | "userAdded": false, 31 | "type": "UnityEngine.Cubemap", 32 | "defaultInstantiationMode": 0 33 | }, 34 | { 35 | "userAdded": false, 36 | "type": "UnityEngine.GameObject", 37 | "defaultInstantiationMode": 0 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEditor.LightingDataAsset", 42 | "defaultInstantiationMode": 0 43 | }, 44 | { 45 | "userAdded": false, 46 | "type": "UnityEngine.LightingSettings", 47 | "defaultInstantiationMode": 0 48 | }, 49 | { 50 | "userAdded": false, 51 | "type": "UnityEngine.Material", 52 | "defaultInstantiationMode": 0 53 | }, 54 | { 55 | "userAdded": false, 56 | "type": "UnityEditor.MonoScript", 57 | "defaultInstantiationMode": 1 58 | }, 59 | { 60 | "userAdded": false, 61 | "type": "UnityEngine.PhysicMaterial", 62 | "defaultInstantiationMode": 0 63 | }, 64 | { 65 | "userAdded": false, 66 | "type": "UnityEngine.PhysicsMaterial2D", 67 | "defaultInstantiationMode": 0 68 | }, 69 | { 70 | "userAdded": false, 71 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 72 | "defaultInstantiationMode": 0 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 77 | "defaultInstantiationMode": 0 78 | }, 79 | { 80 | "userAdded": false, 81 | "type": "UnityEngine.Rendering.VolumeProfile", 82 | "defaultInstantiationMode": 0 83 | }, 84 | { 85 | "userAdded": false, 86 | "type": "UnityEditor.SceneAsset", 87 | "defaultInstantiationMode": 1 88 | }, 89 | { 90 | "userAdded": false, 91 | "type": "UnityEngine.Shader", 92 | "defaultInstantiationMode": 1 93 | }, 94 | { 95 | "userAdded": false, 96 | "type": "UnityEngine.ShaderVariantCollection", 97 | "defaultInstantiationMode": 1 98 | }, 99 | { 100 | "userAdded": false, 101 | "type": "UnityEngine.Texture", 102 | "defaultInstantiationMode": 0 103 | }, 104 | { 105 | "userAdded": false, 106 | "type": "UnityEngine.Texture2D", 107 | "defaultInstantiationMode": 0 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Timeline.TimelineAsset", 112 | "defaultInstantiationMode": 0 113 | } 114 | ], 115 | "defaultDependencyTypeInfo": { 116 | "userAdded": false, 117 | "type": "", 118 | "defaultInstantiationMode": 1 119 | }, 120 | "newSceneOverride": 0 121 | } -------------------------------------------------------------------------------- /ProjectSettings/ShaderGraphSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: de02f9e1d18f588468e474319d09a723, type: 3} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | customInterpolatorErrorThreshold: 32 16 | customInterpolatorWarningThreshold: 16 17 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/URPProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_LastMaterialVersion: 5 16 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | m_PackageRequiringCoreStatsPresent: 0 27 | UnityAdsSettings: 28 | m_Enabled: 0 29 | m_InitializeOnStartup: 1 30 | m_TestMode: 0 31 | m_IosGameId: 32 | m_AndroidGameId: 33 | m_GameIds: {} 34 | m_GameId: 35 | PerformanceReportingSettings: 36 | m_Enabled: 0 37 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | m_CompiledVersion: 0 14 | m_RuntimeVersion: 0 15 | m_RuntimeResources: {fileID: 0} 16 | -------------------------------------------------------------------------------- /ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /ProjectSettings/boot.config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mob-sakai/UIDynamicSampler/377f4d1c9058bace2880b4b46cfa8c13e24c5548/ProjectSettings/boot.config -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Packages/src/README.md --------------------------------------------------------------------------------