├── .github
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE
│ └── bug_report.md
└── README.md
├── .gitignore
├── Gizmos.meta
├── Gizmos
├── Kitbashery.meta
└── Kitbashery
│ ├── Gameplay.meta
│ └── Gameplay
│ ├── ActivationEvents Icon.png
│ ├── ActivationEvents Icon.png.meta
│ ├── CollisionEvents Icon.png
│ ├── CollisionEvents Icon.png.meta
│ ├── ForceField Icon.png
│ ├── ForceField Icon.png.meta
│ ├── Health Icon.png
│ ├── Health Icon.png.meta
│ ├── HealthZone Icon.png
│ ├── HealthZone Icon.png.meta
│ ├── ObjectPools Icon.png
│ ├── ObjectPools Icon.png.meta
│ ├── Projectile Icon.png
│ ├── Projectile Icon.png.meta
│ ├── Spawner Icon.png
│ ├── Spawner Icon.png.meta
│ ├── TimeManager Icon.png
│ └── TimeManager Icon.png.meta
├── LICENSE.md
├── LICENSE.md.meta
├── Runtime.meta
├── Runtime
├── ActivationEvents.cs
├── ActivationEvents.cs.meta
├── CollisionEvents.cs
├── CollisionEvents.cs.meta
├── ForceField.cs
├── ForceField.cs.meta
├── Health.cs
├── Health.cs.meta
├── HealthZone.cs
├── HealthZone.cs.meta
├── ObjectPools.cs
├── ObjectPools.cs.meta
├── Projectile.cs
├── Projectile.cs.meta
├── Spawner.cs
├── Spawner.cs.meta
├── TimeManager.cs
├── TimeManager.cs.meta
├── kitbashery.game-kit.asmdef
└── kitbashery.game-kit.asmdef.meta
├── Samples~
├── Demo.meta
└── Demo
│ ├── Demo Sphere.prefab
│ ├── Demo Sphere.prefab.meta
│ ├── Game Kit Demo.unity
│ └── Game Kit Demo.unity.meta
├── package.json
└── package.json.meta
/.github/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
6 | community a harassment-free experience for everyone, regardless of age, body
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender
8 | identity and expression, level of experience, education, socio-economic status,
9 | nationality, personal appearance, race, religion, or sexual identity
10 | and orientation.
11 |
12 | We pledge to act and interact in ways that contribute to an open, welcoming,
13 | diverse, inclusive, and healthy community.
14 |
15 | ## Our Standards
16 |
17 | Examples of behavior that contributes to a positive environment for our
18 | community include:
19 |
20 | * Demonstrating empathy and kindness toward other people
21 | * Being respectful of differing opinions, viewpoints, and experiences
22 | * Giving and gracefully accepting constructive feedback
23 | * Accepting responsibility and apologizing to those affected by our mistakes,
24 | and learning from the experience
25 | * Focusing on what is best not just for us as individuals, but for the
26 | overall community
27 |
28 | Examples of unacceptable behavior include:
29 |
30 | * The use of sexualized language or imagery, and sexual attention or
31 | advances of any kind
32 | * Trolling, insulting or derogatory comments, and personal or political attacks
33 | * Public or private harassment
34 | * Publishing others' private information, such as a physical or email
35 | address, without their explicit permission
36 | * Other conduct which could reasonably be considered inappropriate in a
37 | professional setting
38 |
39 | ## Enforcement Responsibilities
40 |
41 | Community leaders are responsible for clarifying and enforcing our standards of
42 | acceptable behavior and will take appropriate and fair corrective action in
43 | response to any behavior that they deem inappropriate, threatening, offensive,
44 | or harmful.
45 |
46 | Community leaders have the right and responsibility to remove, edit, or reject
47 | comments, commits, code, wiki edits, issues, and other contributions that are
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation
49 | decisions when appropriate.
50 |
51 | ## Scope
52 |
53 | This Code of Conduct applies within all community spaces, and also applies when
54 | an individual is officially representing the community in public spaces.
55 | Examples of representing our community include using an official e-mail address,
56 | posting via an official social media account, or acting as an appointed
57 | representative at an online or offline event.
58 |
59 | ## Enforcement
60 |
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 | reported to the community leaders responsible for enforcement at
63 | kitbashery@gmail.com.
64 | All complaints will be reviewed and investigated promptly and fairly.
65 |
66 | All community leaders are obligated to respect the privacy and security of the
67 | reporter of any incident.
68 |
69 | ## Enforcement Guidelines
70 |
71 | Community leaders will follow these Community Impact Guidelines in determining
72 | the consequences for any action they deem in violation of this Code of Conduct:
73 |
74 | ### 1. Correction
75 |
76 | **Community Impact**: Use of inappropriate language or other behavior deemed
77 | unprofessional or unwelcome in the community.
78 |
79 | **Consequence**: A private, written warning from community leaders, providing
80 | clarity around the nature of the violation and an explanation of why the
81 | behavior was inappropriate. A public apology may be requested.
82 |
83 | ### 2. Warning
84 |
85 | **Community Impact**: A violation through a single incident or series
86 | of actions.
87 |
88 | **Consequence**: A warning with consequences for continued behavior. No
89 | interaction with the people involved, including unsolicited interaction with
90 | those enforcing the Code of Conduct, for a specified period of time. This
91 | includes avoiding interactions in community spaces as well as external channels
92 | like social media. Violating these terms may lead to a temporary or
93 | permanent ban.
94 |
95 | ### 3. Temporary Ban
96 |
97 | **Community Impact**: A serious violation of community standards, including
98 | sustained inappropriate behavior.
99 |
100 | **Consequence**: A temporary ban from any sort of interaction or public
101 | communication with the community for a specified period of time. No public or
102 | private interaction with the people involved, including unsolicited interaction
103 | with those enforcing the Code of Conduct, is allowed during this period.
104 | Violating these terms may lead to a permanent ban.
105 |
106 | ### 4. Permanent Ban
107 |
108 | **Community Impact**: Demonstrating a pattern of violation of community
109 | standards, including sustained inappropriate behavior, harassment of an
110 | individual, or aggression toward or disparagement of classes of individuals.
111 |
112 | **Consequence**: A permanent ban from any sort of public interaction within
113 | the community.
114 |
115 | ## Attribution
116 |
117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118 | version 2.0, available at
119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120 |
121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct
122 | enforcement ladder](https://github.com/mozilla/diversity).
123 |
124 | [homepage]: https://www.contributor-covenant.org
125 |
126 | For answers to common questions about this code of conduct, see the FAQ at
127 | https://www.contributor-covenant.org/faq. Translations are available at
128 | https://www.contributor-covenant.org/translations.
129 |
--------------------------------------------------------------------------------
/.github/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | ## Contributing:
2 |
3 | All code contributions are subject to the following requirements:
4 |
5 | All C# code must be up to Microsoft's [C# Coding Conventions](https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions). In the past Unity used conventions like using m_variableName and such practices can still be found in legacy code. However going forward Microsoft's conventions are now the standard.
6 |
7 | In addition to the C# coding standards there is a prefered comment and region structure to follow.
8 |
9 | * Encapsulate all properties in a #region labeled: Properties:
10 | * Encapsulate all Monobehaviour Initializers, Updates, Gizmos and IEnumerators in a #region labeled: Initialization & Updates.
11 | * Encapsulate Methods in a #region labeled: Methods: within this region you can have sub regions labeled to your liking.
12 | * Triple slash summary comments must be used on all public methods and properties that are not obviously named. These summary comments corralate to the descriptions in the documentation.
13 |
14 | ```csharp
15 | ///
16 | /// your summary...
17 | ///
18 | YourMethod()
19 | {
20 | //your code.
21 | }
22 | ```
23 | Sometimes when there is a private field/method that isn't very well named it is a good idea to add a summary comment there as well.
24 |
25 | Additionally over any public property field that will be displayed in Unity's inspector window include:
26 |
27 | ```csharp
28 | [ToolTip("Your tooltip text")]
29 | ```
30 |
31 | Sometimes with very obviouslty named fields that are self explanitory it isn't necessary to add a tooltip attribute, but in most cases it is prefered.
32 |
33 | In some cases it is prefered to be more strict than Microsoft's conventions such as var is rarely if ever used, instead a known type should be used. Additionally when checking if statements == true/false is always used instead of if(variableName) These two practices are done to reduce ambiguity.
34 |
35 | After putting in a pull request it is helpful (but not necessary) to also document them by putting in a pull request to The documentation repo and update the docs. Doing so however does not mean your additions/changes will be accepted so it may be best to add docs after your changes have been merged or let an official developer document the changes.
36 |
37 | Code that deviates to far from these guidelines may not be merged untill it is revised and/or fits within the scope of the project.
38 |
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.github/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | 
4 |
5 | [](https://unity3d.com/get-unity/download)
6 | [](https://github.com/Kitbashery/Game-Kit/blob/main/.github/LICENSE.md)
7 | [](https://openupm.com/packages/com.kitbashery.game-kit.html)
8 | [](https://github.com/Kitbashery/Game-Kit/releases/download/Development-Package/Kitbashery_GameKit.unitypackage)
9 | [](https://kitbashery.com/docs/game-kit)
10 | [](https://github.com/Kitbashery/.github/blob/main/.github/CONTRIBUTING.md)
11 |
12 | #### For a more performant, stable and fully featured solution check out our latest asset:
13 | [](https://assetstore.unity.com/packages/slug/248930?aid=1100lvf66)
14 |
15 | # Game Kit
16 |
17 | ## Description:
18 | GameKit contains feature rich systems and components commonly used in games. Designed with 3D games in mind, however some components may function in 2D as well.
19 |
20 | ## Features:
21 |
22 | #### Object pooling:
23 | * Improves game performace
24 | * Sequential naming
25 | * Hide pooled GameObjects in the inspector
26 | * Expandable pools.
27 |
28 | #### Spawner:
29 | * Forward & offset spawn direction
30 | * Integrated object pooling
31 | * Spawn events
32 | * Wave system
33 | * Random spawns
34 |
35 | #### Health:
36 | * Invinsibility
37 | * Multiple health bars
38 | * Passive regeneration
39 | * Damage/healing
40 | * Stackable effects over time
41 | * Damage/heal/death Events
42 | * Area of effect zones
43 | * Healthbar UI support
44 |
45 | #### Projectiles:
46 | * Impact force
47 | * Seeking
48 | * Ricochets
49 | * Integrated with health system
50 | * Integrated object pooling
51 |
52 | #### Event Systems:
53 | * Dynamic collision events
54 | * Dynamic activation events
55 | * Integrated with health system
56 | * Integrated with projectiles
57 |
58 | #### Time Management:
59 | * Play/Pause
60 | * FPS Counter
61 | * Slow Motion
62 | * Time Events
63 |
64 | #### Force Fields:
65 | * Directional forces
66 | * Sync with WindZone
67 | * Explosion/Implosion
68 |
69 |
70 | # Getting Started:
71 | All components can be found under Kitbashery in the component menu:
72 | 
73 |
74 | Online documentation & scripting API is found at:
75 |
76 | https://kitbashery.com/docs/game-kit
77 |
78 | ----
79 | The name Kitbashery & all associated images Copyright © 2023 Kitbashery. All Rights Reserved.
80 |
81 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # This .gitignore file should be placed at the root of your Unity project directory
2 | #
3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
4 | #
5 | /[Ll]ibrary/
6 | /[Tt]emp/
7 | /[Oo]bj/
8 | /[Bb]uild/
9 | /[Bb]uilds/
10 | /[Ll]ogs/
11 | /[Mm]emoryCaptures/
12 |
13 | # Asset meta data should only be ignored when the corresponding asset is also ignored
14 | !/[Aa]ssets/**/*.meta
15 |
16 | # Uncomment this line if you wish to ignore the asset store tools plugin
17 | # /[Aa]ssets/AssetStoreTools*
18 |
19 | # Autogenerated Jetbrains Rider plugin
20 | [Aa]ssets/Plugins/Editor/JetBrains*
21 |
22 | # Visual Studio cache directory
23 | .vs/
24 |
25 | # Gradle cache directory
26 | .gradle/
27 |
28 | # Autogenerated VS/MD/Consulo solution and project files
29 | ExportedObj/
30 | .consulo/
31 | *.csproj
32 | *.unityproj
33 | *.sln
34 | *.suo
35 | *.tmp
36 | *.user
37 | *.userprefs
38 | *.pidb
39 | *.booproj
40 | *.svd
41 | *.pdb
42 | *.mdb
43 | *.opendb
44 | *.VC.db
45 |
46 | # Unity3D generated meta files
47 | *.pidb.meta
48 | *.pdb.meta
49 | *.mdb.meta
50 |
51 | # Unity3D generated file on crash reports
52 | sysinfo.txt
53 |
54 | # Builds
55 | *.apk
56 | *.unitypackage
57 |
58 | # Crashlytics generated file
59 | crashlytics-build.properties
60 |
--------------------------------------------------------------------------------
/Gizmos.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5269231391443574d9195c8a2e7fb314
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 93f92657914763841b4dcc2b5393088c
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fcfdbaca0cb3ab345b7420d6b1ca4e84
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/ActivationEvents Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/ActivationEvents Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/ActivationEvents Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 528f30f65bef92d49a68bf78678de876
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/CollisionEvents Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/CollisionEvents Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/CollisionEvents Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 609d93c33ccb1a148a98edf9ea2f2fa6
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/ForceField Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/ForceField Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/ForceField Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 35ba978c0620bee4cba4870280e098b0
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/Health Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/Health Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/Health Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bda33c99099617d44802e6d58657fe68
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/HealthZone Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/HealthZone Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/HealthZone Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 98fa57431c5f8bb44b84110b86f3699c
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/ObjectPools Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/ObjectPools Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/ObjectPools Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 73a4d41112a438a42947614be5d5cf9d
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/Projectile Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/Projectile Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/Projectile Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 54f72835463919a4b8cd30bfd216feb8
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/Spawner Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/Spawner Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/Spawner Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 530cffd1eb210d24c83d59eb68e3f69f
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/TimeManager Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kitbashery/Game-Kit/76caf3e7f5c010c6f6c29c838e045e3abe6885c3/Gizmos/Kitbashery/Gameplay/TimeManager Icon.png
--------------------------------------------------------------------------------
/Gizmos/Kitbashery/Gameplay/TimeManager Icon.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e22227f5d8588bd409651653feb95a90
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
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 | platformSettings:
67 | - serializedVersion: 3
68 | buildTarget: DefaultTexturePlatform
69 | maxTextureSize: 32
70 | resizeAlgorithm: 0
71 | textureFormat: -1
72 | textureCompression: 1
73 | compressionQuality: 50
74 | crunchedCompression: 0
75 | allowsAlphaSplitting: 0
76 | overridden: 0
77 | androidETC2FallbackOverride: 0
78 | forceMaximumCompressionQuality_BC6H_BC7: 0
79 | - serializedVersion: 3
80 | buildTarget: Standalone
81 | maxTextureSize: 2048
82 | resizeAlgorithm: 0
83 | textureFormat: -1
84 | textureCompression: 1
85 | compressionQuality: 50
86 | crunchedCompression: 0
87 | allowsAlphaSplitting: 0
88 | overridden: 0
89 | androidETC2FallbackOverride: 0
90 | forceMaximumCompressionQuality_BC6H_BC7: 0
91 | - serializedVersion: 3
92 | buildTarget: Server
93 | maxTextureSize: 2048
94 | resizeAlgorithm: 0
95 | textureFormat: -1
96 | textureCompression: 1
97 | compressionQuality: 50
98 | crunchedCompression: 0
99 | allowsAlphaSplitting: 0
100 | overridden: 0
101 | androidETC2FallbackOverride: 0
102 | forceMaximumCompressionQuality_BC6H_BC7: 0
103 | spriteSheet:
104 | serializedVersion: 2
105 | sprites: []
106 | outline: []
107 | physicsShape: []
108 | bones: []
109 | spriteID:
110 | internalID: 0
111 | vertices: []
112 | indices:
113 | edges: []
114 | weights: []
115 | secondaryTextures: []
116 | nameFileIdTable: {}
117 | spritePackingTag:
118 | pSDRemoveMatte: 0
119 | pSDShowRemoveMatteOption: 0
120 | userData:
121 | assetBundleName:
122 | assetBundleVariant:
123 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Kitbashery
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/LICENSE.md.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0d1288ee8a8048a4d969ac509fd0bc9b
3 | TextScriptImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Runtime.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6173e6a37085ece4d9a7d3afd67da3a0
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/ActivationEvents.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using UnityEngine.Events;
3 |
4 | /*
5 | MIT License
6 |
7 | Copyright (c) 2022 Kitbashery
8 |
9 | Permission is hereby granted, free of charge, to any person obtaining a copy
10 | of this software and associated documentation files (the "Software"), to deal
11 | in the Software without restriction, including without limitation the rights
12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 | copies of the Software, and to permit persons to whom the Software is
14 | furnished to do so, subject to the following conditions:
15 |
16 | The above copyright notice and this permission notice shall be included in all
17 | copies or substantial portions of the Software.
18 |
19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 | SOFTWARE.
26 |
27 |
28 |
29 | Need support or additional features? Please visit https://kitbashery.com/
30 | */
31 |
32 | namespace Kitbashery.Gameplay
33 | {
34 | ///
35 | /// Exposes s to the inspector that are invoked during their corralating activation messages.
36 | ///
37 | [HelpURL("https://kitbashery.com/docs/game-kit/activation-events.html")]
38 | [DisallowMultipleComponent]
39 | [AddComponentMenu("Kitbashery/Event/Activation Events")]
40 | public class ActivationEvents : MonoBehaviour
41 | {
42 | [Header("Called when a script instance is being loaded.")]
43 | public UnityEvent onAwake;
44 | [Header("Called before the first frame update.")]
45 | public UnityEvent onStart;
46 | [Header("Called when the object becomes active and enabled.")]
47 | public UnityEvent onEnable;
48 | [Header("Called when the object becomes disabled or inactive.")]
49 | public UnityEvent onDisable;
50 | [Header("Called when the MonoBehaviour will be destroyed.")]
51 | public UnityEvent onDestroy;
52 |
53 | private void Awake()
54 | {
55 | onAwake.Invoke();
56 | }
57 |
58 | private void OnEnable()
59 | {
60 | onEnable.Invoke();
61 | }
62 |
63 | private void Start()
64 | {
65 | onStart.Invoke();
66 | }
67 |
68 | private void OnDisable()
69 | {
70 | onDisable.Invoke();
71 | }
72 |
73 | private void OnDestroy()
74 | {
75 | onDestroy.Invoke();
76 | }
77 | }
78 | }
--------------------------------------------------------------------------------
/Runtime/ActivationEvents.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a36c92081ad09b94593c7184174249da
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: 528f30f65bef92d49a68bf78678de876, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/CollisionEvents.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using UnityEngine;
3 | using UnityEngine.Events;
4 |
5 | /*
6 | MIT License
7 |
8 | Copyright (c) 2022 Kitbashery
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 |
29 |
30 | Need support or additional features? Please visit https://kitbashery.com/
31 | */
32 |
33 | namespace Kitbashery.Gameplay
34 | {
35 | ///
36 | /// A wrapper for 's built-in physics methods adding conditional constrains and events.
37 | ///
38 | [HelpURL("https://kitbashery.com/docs/game-kit/collision-events.html")]
39 | [DisallowMultipleComponent]
40 | [RequireComponent(typeof(Collider))]
41 | [AddComponentMenu("Kitbashery/Event/Collision Events")]
42 | public class CollisionEvents : MonoBehaviour
43 | {
44 | #region Properties:
45 |
46 | [Tooltip("Use trigger events (true/false).")]
47 | public bool isTrigger = true;
48 | [Tooltip("Events will not be invoked if there are more collisions taking place than the maximum.")]
49 | [Min(1)]
50 | public int maxCollisions = 50;
51 |
52 | [Tooltip("Tags a collider must have in order for events to be invoked.")]
53 | public List requiredTags = new List();
54 |
55 | ///
56 | /// Colliders to ignore when the script is initialized.
57 | ///
58 | [Tooltip("Colliders to ignore (Only supported in Unity 5.5.0b3 and later).")]
59 | public List ignoredColliders = new List();
60 | [Space]
61 |
62 | public UnityEvent enterEvent;
63 | public UnityEvent exitEvent;
64 | public UnityEvent stayEvent;
65 |
66 | ///
67 | /// The collider that last interacted with the event collider.
68 | ///
69 | [HideInInspector]
70 | public Collider lastContact;
71 |
72 | ///
73 | /// The last collision that occured.
74 | ///
75 | public Collision lastCollision;
76 |
77 | ///
78 | /// All colliders currently interacting with the collision event collider.
79 | ///
80 | [HideInInspector]
81 | public List colliders = new List();
82 |
83 | ///
84 | /// The collider used to detect collision events (Found when Awake() is called).
85 | ///
86 | [HideInInspector]
87 | public Collider eventCollider;
88 |
89 | #endregion
90 |
91 | #region Initialization & Updates:
92 |
93 | private void Awake()
94 | {
95 | eventCollider = transform.GetComponent();
96 | eventCollider.isTrigger = isTrigger;
97 | IgnoreColliders(ignoredColliders, true);
98 | }
99 |
100 | private void OnTriggerEnter(Collider other)
101 | {
102 | if (isTrigger == true && colliders.Count < maxCollisions && (requiredTags.Count == 0 || requiredTags.Contains(other.gameObject.tag)))
103 | {
104 | lastContact = other;
105 | if (!colliders.Contains(other))
106 | {
107 | colliders.Add(other);
108 | }
109 | enterEvent.Invoke();
110 | }
111 | }
112 |
113 | private void OnTriggerExit(Collider other)
114 | {
115 | if (isTrigger == true && colliders.Count < maxCollisions && (requiredTags.Count == 0 || requiredTags.Contains(other.gameObject.tag)))
116 | {
117 | lastContact = other;
118 | if (colliders.Contains(other))
119 | {
120 | colliders.Remove(other);
121 | }
122 | exitEvent.Invoke();
123 | }
124 | }
125 |
126 | private void OnTriggerStay(Collider other)
127 | {
128 | if (isTrigger == true && (requiredTags.Count == 0 || requiredTags.Contains(other.gameObject.tag)))
129 | {
130 | lastContact = other;
131 | stayEvent.Invoke();
132 | }
133 | }
134 |
135 | private void OnCollisionEnter(Collision collision)
136 | {
137 | if (isTrigger == false && colliders.Count < maxCollisions && (requiredTags.Count == 0 || requiredTags.Contains(collision.gameObject.tag)))
138 | {
139 | lastContact = collision.collider;
140 | lastCollision = collision;
141 | if (!colliders.Contains(collision.collider))
142 | {
143 | colliders.Add(collision.collider);
144 | }
145 | enterEvent.Invoke();
146 | }
147 | }
148 |
149 | private void OnCollisionExit(Collision collision)
150 | {
151 | if (isTrigger == false && colliders.Count < maxCollisions && (requiredTags.Count == 0 || requiredTags.Contains(collision.gameObject.tag)))
152 | {
153 | lastContact = collision.collider;
154 | lastCollision = collision;
155 | if (colliders.Contains(collision.collider))
156 | {
157 | colliders.Remove(collision.collider);
158 | }
159 | exitEvent.Invoke();
160 | }
161 | }
162 |
163 | private void OnCollisionStay(Collision collision)
164 | {
165 | if (isTrigger == false && (requiredTags.Count == 0 || requiredTags.Contains(collision.gameObject.tag)))
166 | {
167 | lastContact = collision.collider;
168 | lastCollision = collision;
169 | stayEvent.Invoke();
170 | }
171 | }
172 |
173 | #endregion
174 |
175 | #region Core Functions:
176 |
177 | ///
178 | /// Tells the physics engine to ignore/detect collisions between a list of colliders and the .
179 | ///
180 | /// Colliders to ignore/detect.
181 | /// Should the colliders in the ignore list be ignored or detected? (true/false)
182 | public void IgnoreColliders(List ignoreList, bool ignore)
183 | {
184 | //Note: Prior to Unity 5.5.0b3 calling this could reset the trigger state of a collider in PhysX.
185 | //See: https://forum.unity.com/threads/physics-ignorecollision-that-does-not-reset-trigger-state.340836/
186 |
187 | #if UNITY_5_5_OR_NEWER
188 | foreach (Collider col in ignoredColliders)
189 | {
190 | Physics.IgnoreCollision(eventCollider, col, ignore);
191 | }
192 | #else
193 |
194 | //Do nothing...
195 | //TODO: is backward compatibility to support triggers possible?
196 |
197 | #endif
198 | }
199 |
200 | ///
201 | /// Used in the Unity editor to check if a contains a listener with a certain method.
202 | ///
203 | /// The to check for a listener in.
204 | /// The name of the method to check for.
205 | /// true if an event contains a listener with methodName.
206 | public bool EventContainsListenerWithMethod(UnityEvent uEvent, string methodName)
207 | {
208 | for (int i = 0; i < uEvent.GetPersistentEventCount(); i++)
209 | {
210 | if (uEvent.GetPersistentMethodName(i) == methodName)
211 | {
212 | return true;
213 | }
214 | }
215 |
216 | return false;
217 | }
218 |
219 | public void DebugCollisionCount()
220 | {
221 | Debug.LogFormat(gameObject, "|CollisionEvent|: Colliding with {0} colliders.", colliders.Count);
222 | }
223 |
224 | public void DebugLastCollision()
225 | {
226 | Debug.LogFormat(gameObject, "|CollisionEvent|: last collided with {0}'s collider.", lastContact.gameObject.name);
227 | }
228 |
229 | #endregion
230 | }
231 | }
--------------------------------------------------------------------------------
/Runtime/CollisionEvents.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: cb65b08cef889c14eb78493d5ae0aee8
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: 609d93c33ccb1a148a98edf9ea2f2fa6, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/ForceField.cs:
--------------------------------------------------------------------------------
1 | using System.Collections;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 |
5 | namespace Kitbashery.Gameplay
6 | {
7 | ///
8 | /// Applys force to s within it's bounds.
9 | ///
10 | [HelpURL("https://kitbashery.com/docs/game-kit/force-field.html")]
11 | [AddComponentMenu("Kitbashery/Physics/Force Field")]
12 | public class ForceField : CollisionEvents
13 | {
14 | #region Properties:
15 |
16 | [Header("Force Field:")]
17 | [HideInInspector]
18 | public List rigidbodies = new List();
19 |
20 | public ForceTypes mode = ForceTypes.directional;
21 |
22 | public float force = 10;
23 |
24 | public Vector3 forceDirection = Vector3.forward;
25 |
26 | [Space]
27 | [Tooltip("WindZone component that the force field syncs to if set to use the wind ForceMode.")]
28 | public WindZone wind;
29 |
30 | private float windPluseTime = 0;
31 |
32 | #endregion
33 |
34 | private void Start()
35 | {
36 | isTrigger = true;
37 | eventCollider.isTrigger = true;
38 | }
39 |
40 | #region Initialization & Updates:
41 |
42 | #if UNITY_EDITOR
43 | private void OnValidate()
44 | {
45 | //Autofill events:
46 | if (enterEvent == null)
47 | {
48 | enterEvent = new UnityEngine.Events.UnityEvent();
49 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(enterEvent, RegisterRigidbody);
50 | }
51 | else if (EventContainsListenerWithMethod(enterEvent, "RegisterRigidbody") == false)
52 | {
53 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(enterEvent, RegisterRigidbody);
54 | }
55 |
56 | if (exitEvent == null)
57 | {
58 | exitEvent = new UnityEngine.Events.UnityEvent();
59 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(exitEvent, UnregisterRigidbody);
60 | }
61 | else if (EventContainsListenerWithMethod(exitEvent, "UnregisterRigidbody") == false)
62 | {
63 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(exitEvent, UnregisterRigidbody);
64 | }
65 | }
66 | #endif
67 |
68 |
69 | private void FixedUpdate()
70 | {
71 | foreach(Rigidbody rigid in rigidbodies)
72 | {
73 | switch(mode)
74 | {
75 | case ForceTypes.explode:
76 |
77 | rigid.AddExplosionForce(force, transform.position, eventCollider.bounds.extents.x);
78 |
79 | break;
80 |
81 | case ForceTypes.wind:
82 |
83 | if(wind != null)
84 | {
85 | windPluseTime += Time.fixedDeltaTime;
86 | if (windPluseTime >= wind.windPulseFrequency)
87 | {
88 | if(wind.mode == WindZoneMode.Directional)
89 | {
90 | rigid.AddForce(wind.transform.forward * Random.Range(wind.windMain, wind.windMain + wind.windTurbulence) * wind.windPulseMagnitude, ForceMode.Impulse);
91 | }
92 | else
93 | {
94 | rigid.AddForce((wind.transform.position * wind.radius) * Random.Range(wind.windMain, wind.windMain + wind.windTurbulence) * wind.windPulseMagnitude, ForceMode.Force);
95 | }
96 |
97 | windPluseTime = 0;
98 | }
99 | }
100 | else
101 | {
102 | Debug.LogWarningFormat(gameObject, "|Game Kit|: ForceType is set the wind, however no WindZone was defined. The ForceField will not apply force.");
103 | }
104 |
105 | break;
106 |
107 | case ForceTypes.directional:
108 |
109 | rigid.AddForce(forceDirection * force);
110 |
111 | break;
112 |
113 | case ForceTypes.implode:
114 |
115 | rigid.AddForce((transform.position - rigid.transform.position).normalized * force, ForceMode.Force);
116 |
117 | break;
118 | }
119 | }
120 | }
121 |
122 | #endregion
123 |
124 | public void RegisterRigidbody()
125 | {
126 | if(lastContact != null)
127 | {
128 | rigidbodies.Add(lastContact.attachedRigidbody);
129 | }
130 | }
131 |
132 | public void UnregisterRigidbody()
133 | {
134 | rigidbodies.Remove(lastContact.attachedRigidbody);
135 | }
136 | }
137 |
138 | public enum ForceTypes { wind, directional, explode, implode }
139 | }
--------------------------------------------------------------------------------
/Runtime/ForceField.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3ec71563c819ad94e91452ec834dbc36
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: 35ba978c0620bee4cba4870280e098b0, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Health.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Linq;
3 | using System.Collections;
4 | using System.Collections.Generic;
5 | using UnityEngine;
6 | using UnityEngine.Events;
7 |
8 | /*
9 | MIT License
10 |
11 | Copyright (c) 2022 Kitbashery
12 |
13 | Permission is hereby granted, free of charge, to any person obtaining a copy
14 | of this software and associated documentation files (the "Software"), to deal
15 | in the Software without restriction, including without limitation the rights
16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 | copies of the Software, and to permit persons to whom the Software is
18 | furnished to do so, subject to the following conditions:
19 |
20 | The above copyright notice and this permission notice shall be included in all
21 | copies or substantial portions of the Software.
22 |
23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29 | SOFTWARE.
30 |
31 |
32 |
33 | Need support or additional features? Please visit https://kitbashery.com/
34 | */
35 |
36 | namespace Kitbashery.Gameplay
37 | {
38 | ///
39 | /// Tracks "hit points" and invokes events based on the current amount or state.
40 | ///
41 | [HelpURL("https://kitbashery.com/docs/game-kit/health.html")]
42 | [AddComponentMenu("Kitbashery/Gameplay/Health")]
43 | public class Health : MonoBehaviour
44 | {
45 | #region Properties:
46 |
47 | [field: SerializeField, Tooltip("Check this to disable receiving damage.")]
48 | public bool invinsible { get; set; } = false;
49 |
50 | [Tooltip("If assigned the hitpoints of the bonus health will need to be depleted before damage can be applied to this health component.")]
51 | public Health bonusHealth;
52 | [Tooltip("The hitpoints to start with, it isn't recommended to modify this value directly during runtime, use ModifyHealth() instead.")]
53 | [Min(0)]
54 | public int hitPoints = 100;
55 | [field: SerializeField, Tooltip("Should the maximum hit points be expanded if healed beyond maxHitPoints?")]
56 | public bool overhealExpand { get; set; } = false;
57 |
58 | [field: SerializeField, Tooltip("Enables passive health regeneration.")]
59 | public bool canRegen { get; set; } = false;
60 | [Tooltip("Hitpoints to regenerate.")]
61 | [Min(1)]
62 | public int regenPoints = 1;
63 | [Tooltip("Time between regenerating hitpoints (in seconds).")]
64 | [Min(0.01f)]
65 | public float regenRate = 0.1f;
66 |
67 | private int originalHitpoints = 100;
68 | private int maxHitpoints = 100;
69 | ///
70 | /// Half the current max value of .
71 | ///
72 | private float halfHealth = 50f;
73 | private float currentRegenTime = 0;
74 |
75 | private Dictionary healthEffects = new Dictionary();
76 |
77 | [Space]
78 | public UnityEvent onReceivedDamage;
79 | public UnityEvent onHealed;
80 | public UnityEvent onDead;
81 |
82 | #endregion
83 |
84 | #region Initialization & Updates:
85 |
86 | private void Awake()
87 | {
88 | originalHitpoints = hitPoints;
89 | maxHitpoints = hitPoints;
90 | halfHealth = maxHitpoints / 2;
91 |
92 | if(bonusHealth == this)
93 | {
94 | bonusHealth = null;
95 | Debug.Log("|Health|: Has bonusHealth assigned to itself so it has been set to null.", gameObject);
96 | }
97 | }
98 |
99 | private void Update()
100 | {
101 | if (canRegen == true && hitPoints < maxHitpoints)
102 | {
103 | if (currentRegenTime >= regenRate)
104 | {
105 | hitPoints = Mathf.Clamp(hitPoints + regenPoints, 0, maxHitpoints);
106 | currentRegenTime = 0;
107 | }
108 | else
109 | {
110 | currentRegenTime += Time.deltaTime;
111 | }
112 | onHealed.Invoke();
113 | }
114 | }
115 | private IEnumerator ExecuteTimedHealthEffect(TimedHealthEffect effect)
116 | {
117 | for (int i = 0; i < effect.times; i++)
118 | {
119 | ModifyHealth(effect.modifier, effect.amount);
120 |
121 | yield return new WaitForSeconds(effect.interval);
122 | if (i == effect.times)
123 | {
124 | healthEffects.Remove(effect);
125 | }
126 | }
127 | }
128 |
129 | #endregion
130 |
131 | #region Core Functions:
132 |
133 | public void ModifyHealth(HealthModifiers modifier, int amount)
134 | {
135 | switch(modifier)
136 | {
137 | case HealthModifiers.damage:
138 |
139 | ApplyDamage(amount);
140 |
141 | break;
142 |
143 | case HealthModifiers.heal:
144 |
145 | Heal(amount);
146 |
147 | break;
148 | }
149 | }
150 |
151 | ///
152 | /// Starts a that will modify health over time.
153 | ///
154 | ///
155 | public void ModifyHealthOverTime(TimedHealthEffect effect)
156 | {
157 | healthEffects.Add(effect, StartCoroutine(ExecuteTimedHealthEffect(effect)));
158 | }
159 |
160 | ///
161 | /// Stops all timed health effects that use a specific health modifier.
162 | ///
163 | ///
164 | public void StopTimedEffectsWithModifier(HealthModifiers modifier)
165 | {
166 | for (int i = healthEffects.Count; i > 0; i--)
167 | {
168 | TimedHealthEffect effect = healthEffects.Keys.ElementAt(i);
169 | if(effect.modifier == modifier)
170 | {
171 | StopCoroutine(healthEffects[effect]);
172 | healthEffects.Remove(effect);
173 | }
174 | }
175 | }
176 |
177 | ///
178 | /// Stops a specific health effect by its name.
179 | ///
180 | ///
181 | public void StopTimedHealthEffect(string effectName)
182 | {
183 | for(int i = healthEffects.Count; i > 0; i--)
184 | {
185 | TimedHealthEffect effect = healthEffects.Keys.ElementAt(i);
186 | if (!string.IsNullOrEmpty(effectName))
187 | {
188 | if (effect.name == effectName)
189 | {
190 | StopCoroutine(healthEffects[effect]);
191 | healthEffects.Remove(effect);
192 | }
193 | }
194 | else
195 | {
196 | StopCoroutine(healthEffects[effect]);
197 | healthEffects.Remove(effect);
198 | }
199 | }
200 | }
201 |
202 | public void StopAllTimedHealthEffects()
203 | {
204 | for (int i = healthEffects.Count; i > 0; i--)
205 | {
206 | TimedHealthEffect effect = healthEffects.Keys.ElementAt(i);
207 | StopCoroutine(healthEffects[effect]);
208 | healthEffects.Remove(effect);
209 | }
210 | }
211 |
212 | ///
213 | /// Applies damage, if there is bonus health damage will be applied to that component first.
214 | ///
215 | /// The amount of damage to apply.
216 | public void ApplyDamage(int amount)
217 | {
218 | if (invinsible == false && hitPoints > 0)
219 | {
220 | if (bonusHealth != null)
221 | {
222 | if (bonusHealth.hitPoints <= 0)
223 | {
224 | hitPoints -= amount;
225 | onReceivedDamage.Invoke();
226 | }
227 | else
228 | {
229 | bonusHealth.ApplyDamage(amount);
230 | }
231 | }
232 | else
233 | {
234 | hitPoints -= amount;
235 | onReceivedDamage.Invoke();
236 | }
237 |
238 | if (hitPoints <= 0)
239 | {
240 | onDead.Invoke();
241 | }
242 | }
243 | }
244 |
245 | ///
246 | /// Instantly regenerates hitpoints if canRegen is true.
247 | ///
248 | public void ClearRegenCooldown()
249 | {
250 | currentRegenTime = 0;
251 | }
252 |
253 | ///
254 | /// Instantly heals the specified amount of hitpoints.
255 | ///
256 | /// The amount of hitpoints to heal.
257 | public void Heal(int amount)
258 | {
259 | if (hitPoints < maxHitpoints)
260 | {
261 | hitPoints += amount;
262 | if (maxHitpoints - hitPoints < 0)
263 | {
264 | if(overhealExpand == true)
265 | {
266 | SetMaxHitpoints(hitPoints);
267 | }
268 | hitPoints = maxHitpoints;
269 | }
270 | onHealed.Invoke();
271 | }
272 | }
273 |
274 | ///
275 | /// Resets the hitpoints of all health and (optionally) all bonus health components in the chain to their original values. Useful for pooling.
276 | ///
277 | /// If true will reset the bonus health recursively until no bonus health is found.
278 | public void ResetHealth(bool resetBonusHealth = false)
279 | {
280 | hitPoints = originalHitpoints;
281 | if (bonusHealth != null && resetBonusHealth == true)
282 | {
283 | bonusHealth.ResetHealth(resetBonusHealth);
284 | }
285 | }
286 |
287 | ///
288 | /// Overrides the initial hitpoint value and adjusts the current hitpoints to fit within the new range.
289 | ///
290 | /// The new max value of hitpoints.
291 | public void SetMaxHitpoints(int amount)
292 | {
293 | if (amount != maxHitpoints && amount > 0)
294 | {
295 | if (amount > maxHitpoints)
296 | {
297 | hitPoints += (maxHitpoints - amount);
298 | }
299 | else
300 | {
301 | if (hitPoints > amount)
302 | {
303 | hitPoints = amount;
304 | }
305 | }
306 | maxHitpoints = amount;
307 | halfHealth = maxHitpoints / 2;
308 | }
309 | }
310 |
311 | ///
312 | /// Use to update healbar UI.
313 | ///
314 | /// UI slider to update.
315 | public void UpdateHealthbar(UnityEngine.UI.Slider healthbar)
316 | {
317 | if(healthbar.maxValue != maxHitpoints)
318 | {
319 | healthbar.maxValue = maxHitpoints;
320 | }
321 | healthbar.value = hitPoints;
322 | }
323 |
324 | ///
325 | /// Checks if the amount of hitpoints is below 50% of the intial value.
326 | ///
327 | /// true if hitpoints are below 50%
328 | public bool IsLessThanHalfHealth()
329 | {
330 | return halfHealth < hitPoints;
331 | }
332 |
333 | ///
334 | /// Checks if there are any heal/damage over time effects being apllied.
335 | ///
336 | /// true if there are effect playing.
337 | public bool TimedEffectsPlaying()
338 | {
339 | return healthEffects.Count > 0;
340 | }
341 |
342 | ///
343 | /// Checks if there is a specific timed health effect playing.
344 | ///
345 | /// The name of the effect to check for.
346 | /// true if an effect is found.
347 | public bool HasTimedHealthEffect(string effectName)
348 | {
349 | foreach(TimedHealthEffect key in healthEffects.Keys)
350 | {
351 | if(key.name == effectName)
352 | {
353 | return true;
354 | }
355 | }
356 | return false;
357 | }
358 |
359 | public void DebugTimedEffectCount()
360 | {
361 | Debug.LogFormat(gameObject, "|Health|: Has {0} timed health effects being applied.", healthEffects.Count);
362 | }
363 |
364 | public void DebugCurrentHealth()
365 | {
366 | Debug.LogFormat(gameObject, "|Health|: Hitpoints currently are: {0}", hitPoints);
367 | }
368 |
369 | #endregion
370 | }
371 |
372 | [Serializable]
373 | public struct TimedHealthEffect
374 | {
375 | [Tooltip("The name of the effect, used for stopping effects with this name.")]
376 | public string name;
377 | public HealthModifiers modifier;
378 | [Tooltip("The amount of healing or damage to apply.")]
379 | [Min(1)]
380 | public int amount;
381 | [Tooltip("The amount of times to modify health.")]
382 | [Min(1)]
383 | public int times;
384 | [Tooltip("Time interval in seconds between modifying health.")]
385 | [Min(0)]
386 | public float interval;
387 | }
388 |
389 | public enum HealthModifiers { damage, heal }
390 | }
--------------------------------------------------------------------------------
/Runtime/Health.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bba5fb71024046749af5e8b7a9b5caf1
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: bda33c99099617d44802e6d58657fe68, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/HealthZone.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using UnityEngine;
3 | using UnityEngine.Events;
4 |
5 | /*
6 | MIT License
7 |
8 | Copyright (c) 2022 Kitbashery
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 |
29 |
30 | Need support or additional features? Please visit https://kitbashery.com/
31 | */
32 |
33 | namespace Kitbashery.Gameplay
34 | {
35 | ///
36 | /// Modifies the components of colliding s.
37 | ///
38 | [HelpURL("https://kitbashery.com/docs/game-kit/health-zone.html")]
39 | [AddComponentMenu("Kitbashery/Gameplay/Health Zone")]
40 | public class HealthZone : CollisionEvents
41 | {
42 | #region Properties:
43 |
44 | [Header("Health Zone:")]
45 | [Space]
46 | public HealthModifiers modifier = HealthModifiers.damage;
47 | [Tooltip("Amount of health to modify per frame.")]
48 | [Min(0)]
49 | public int amount = 1;
50 |
51 | ///
52 | /// Health components to apply damage to.
53 | ///
54 | [HideInInspector]
55 | public List targetHP = new List();
56 |
57 | ///
58 | /// The last health components registered/unregisterd.
59 | ///
60 | [HideInInspector]
61 | public Health lastHealth;
62 |
63 | #endregion
64 |
65 | #if UNITY_EDITOR
66 | private void OnValidate()
67 | {
68 | //Autofill events:
69 | if (enterEvent == null)
70 | {
71 | enterEvent = new UnityEvent();
72 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(enterEvent, RegisterTarget);
73 | }
74 | else if(EventContainsListenerWithMethod(enterEvent, "RegisterTarget") == false)
75 | {
76 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(enterEvent, RegisterTarget);
77 | }
78 |
79 | if (exitEvent == null)
80 | {
81 | exitEvent = new UnityEvent();
82 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(exitEvent, UnregisterTarget);
83 | }
84 | else if(EventContainsListenerWithMethod(exitEvent, "UnregisterTarget") == false)
85 | {
86 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(exitEvent, UnregisterTarget);
87 | }
88 |
89 | if (stayEvent == null)
90 | {
91 | stayEvent = new UnityEvent();
92 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(stayEvent, ModifyHealth);
93 | }
94 | else if (EventContainsListenerWithMethod(stayEvent, "ModifyHealth") == false)
95 | {
96 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(stayEvent, ModifyHealth);
97 | }
98 | }
99 | #endif
100 |
101 | #region Core Functions:
102 |
103 | ///
104 | /// Health change is updated per frame to all components in the target list.
105 | ///
106 | public void ModifyHealth()
107 | {
108 | if (targetHP.Count > 0)
109 | {
110 | foreach(Health hp in targetHP)
111 | {
112 | hp.ModifyHealth(modifier, amount);
113 | }
114 | }
115 | }
116 |
117 | ///
118 | /// Tries to get the component of the last collider that made contact and add it to the target list.
119 | ///
120 | public void RegisterTarget()
121 | {
122 | lastHealth = lastContact.gameObject.GetComponent();
123 | if (lastHealth != null)
124 | {
125 | targetHP.Add(lastHealth);
126 | }
127 | }
128 |
129 | ///
130 | /// Tries to get the component of the last collider that left contact and removes it from the target list.
131 | ///
132 | public void UnregisterTarget()
133 | {
134 | lastHealth = lastContact.gameObject.GetComponent();
135 | if(lastHealth != null)
136 | {
137 | targetHP.Remove(lastHealth);
138 | }
139 | }
140 |
141 | ///
142 | /// Adds the required listeners to the s in the base class. Call if adding this component via script.
143 | ///
144 | public void AddListeners()
145 | {
146 | enterEvent.AddListener(RegisterTarget);
147 | exitEvent.AddListener(UnregisterTarget);
148 | stayEvent.AddListener(ModifyHealth);
149 | }
150 |
151 | #endregion
152 | }
153 | }
--------------------------------------------------------------------------------
/Runtime/HealthZone.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 19cd1953f62ae9040b5319c19cf3e9ca
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: 98fa57431c5f8bb44b84110b86f3699c, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/ObjectPools.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 |
5 | /*
6 | MIT License
7 |
8 | Copyright (c) 2022 Kitbashery
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 |
29 |
30 | Need support or additional features? Please visit https://kitbashery.com/
31 | */
32 |
33 | namespace Kitbashery.Gameplay
34 | {
35 | ///
36 | /// A singleton class for managing multiple pools of s.
37 | ///
38 | [HelpURL("https://kitbashery.com/docs/game-kit/object-pools.html")]
39 | [DisallowMultipleComponent]
40 | [AddComponentMenu("Kitbashery/Gameplay/Object Pools")]
41 | public class ObjectPools : MonoBehaviour
42 | {
43 | #region Properties:
44 |
45 | public static ObjectPools Instance;
46 |
47 | ///
48 | /// A non-reorderable list of s.
49 | ///
50 | [NonReorderable]
51 | public List pools = new List();
52 |
53 | private Dictionary namedPools = new Dictionary();
54 |
55 | ///
56 | /// Temporary GameObject used when populating pools.
57 | ///
58 | private GameObject tmp;
59 |
60 | #endregion
61 |
62 | #region Initialization & Updates:
63 |
64 | void Awake()
65 | {
66 | if (Instance != null && Instance != this)
67 | {
68 | Destroy(this);
69 | }
70 | else
71 | {
72 | Instance = this;
73 | }
74 | }
75 |
76 | void Start()
77 | {
78 | CreatePools();
79 | }
80 |
81 | #endregion
82 |
83 | #region Core Functions:
84 |
85 | public void CreatePools()
86 | {
87 | foreach (Pool pool in pools)
88 | {
89 | if (!namedPools.ContainsKey(pool.prefab.name))
90 | {
91 | PopulatePool(pool);
92 | namedPools.Add(pool.prefab.name, pool);
93 | }
94 | else
95 | {
96 | Debug.LogWarningFormat("|Object Pool|: Failed to create pool ({0}) a pool already exisits for that prefab, concider renaming.", pool.prefab.name);
97 | }
98 | }
99 | tmp = null;
100 | }
101 |
102 | public void PopulatePool(Pool pool)
103 | {
104 | if (pool.pooledObjects.Count < pool.amount)
105 | {
106 | for (int i = 0; i < pool.amount; i++)
107 | {
108 | tmp = Instantiate(pool.prefab);
109 | tmp.SetActive(false);
110 | tmp.gameObject.hideFlags = pool.hideFlags;
111 | if (pool.sequencialNaming == true)
112 | {
113 | tmp.gameObject.name = pool.prefab.name + " " + i;
114 | }
115 | pool.pooledObjects.Add(tmp);
116 | }
117 | }
118 | }
119 |
120 | public void ExpandPool(Pool pool, int amount)
121 | {
122 | pool.amount += amount;
123 | PopulatePool(pool);
124 | }
125 |
126 | ///
127 | /// Destroys all objects in all pools.
128 | ///
129 | /// Preserve pooled GameObjects that are currently active in the scene.
130 | public void DestroyPools(bool omitActive)
131 | {
132 | foreach (Pool pool in pools)
133 | {
134 | for (int i = pool.pooledObjects.Count; i > 0; i--)
135 | {
136 | if (omitActive == false)
137 | {
138 | Destroy(pool.pooledObjects[i]);
139 | }
140 | else
141 | {
142 | if (pool.pooledObjects[i].activeSelf == false)
143 | {
144 | Destroy(pool.pooledObjects[i]);
145 | }
146 | }
147 | }
148 |
149 | pool.pooledObjects.Clear();
150 | }
151 | }
152 |
153 | public void ActivatePooledObject(int index)
154 | {
155 | if (index <= pools.Count)
156 | {
157 | for (int i = 0; i < pools[index].amount; i++)
158 | {
159 | if (!pools[index].pooledObjects[i].activeInHierarchy)
160 | {
161 | pools[index].pooledObjects[i].SetActive(true);
162 | }
163 | }
164 | }
165 | else
166 | {
167 | Debug.LogWarningFormat("|Object Pool|: failed to activate GameObject from pool {0} GameObject will be null, make sure the index is within range.", index);
168 | }
169 | }
170 |
171 | public void ActivatePooledObject(string prefabName)
172 | {
173 | if (!string.IsNullOrEmpty(prefabName) && namedPools.ContainsKey(prefabName))
174 | {
175 | for (int i = 0; i < namedPools[prefabName].amount; i++)
176 | {
177 | if (!namedPools[prefabName].pooledObjects[i].activeInHierarchy)
178 | {
179 | namedPools[prefabName].pooledObjects[i].SetActive(true);
180 | }
181 | }
182 | }
183 | else
184 | {
185 | Debug.LogWarningFormat("|Object Pool|: failed to activate GameObject from pool ({0}) GameObject will be null, make sure the name is correct.", name);
186 | }
187 | }
188 |
189 | ///
190 | /// Gets a pooled GameObject by the index of its pool.
191 | ///
192 | /// The index of a pool in .
193 | /// The first inactive prefab instance.
194 | public GameObject GetPooledObject(int index)
195 | {
196 | if (index <= pools.Count)
197 | {
198 | for (int i = 0; i < pools[index].amount; i++)
199 | {
200 | if (!pools[index].pooledObjects[i].activeInHierarchy)
201 | {
202 | return pools[index].pooledObjects[i];
203 | }
204 | }
205 | }
206 | else
207 | {
208 | Debug.LogWarningFormat("|Object Pool|: failed to get GameObject from pool {0} GameObject will be null, make sure the index is within range.", index);
209 | }
210 |
211 | return null;
212 | }
213 |
214 | ///
215 | /// Gets a pooled GameObject by its prefab name.
216 | ///
217 | /// The name of the prefab to get an instance of.
218 | /// The first inactive prefab instance.
219 | public GameObject GetPooledObject(string prefabName)
220 | {
221 | if (!string.IsNullOrEmpty(prefabName) && namedPools.ContainsKey(prefabName))
222 | {
223 | for (int i = 0; i < namedPools[prefabName].amount; i++)
224 | {
225 | if (!namedPools[prefabName].pooledObjects[i].activeInHierarchy)
226 | {
227 | return namedPools[prefabName].pooledObjects[i];
228 | }
229 | }
230 | }
231 | else
232 | {
233 | Debug.LogWarningFormat("|Object Pool|: failed to get GameObject from pool ({0}) GameObject will be null, make sure the name is correct.", name);
234 | }
235 |
236 | return null;
237 | }
238 |
239 | #endregion
240 | }
241 |
242 | [Serializable]
243 | public struct Pool
244 | {
245 | [Tooltip("The GameObject to pool.")]
246 | public GameObject prefab;
247 | [Tooltip("The initial amount of GameObjects to instantiate.")]
248 | [Min(1)]
249 | public int amount;
250 | [Tooltip("HideFlags for prefabs instantiated via the pooling system. Useful for hiding pooled objects in the heirarchy.")]
251 | public HideFlags hideFlags;
252 | [Tooltip("Use numbered names for GameObjects instead of name(clone).")]
253 | public bool sequencialNaming;
254 | [Tooltip("The GameObjects currently pooled.")]
255 | public List pooledObjects;
256 | }
257 |
258 | [Serializable]
259 | public struct PoolID
260 | {
261 | [Tooltip("The index of a pool in the ObjectPools instance pool list.")]
262 | [Min(0)]
263 | public int poolIndex;
264 |
265 | [Tooltip("If specified the spawner will try to get GameObjects from the pool by the prefab name instead of index.")]
266 | public string prefabName;
267 | }
268 | }
--------------------------------------------------------------------------------
/Runtime/ObjectPools.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0106a81881bee9248bb49427003b5364
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: 73a4d41112a438a42947614be5d5cf9d, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Projectile.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using UnityEngine.Events;
3 |
4 | /*
5 | MIT License
6 |
7 | Copyright (c) 2022 Kitbashery
8 |
9 | Permission is hereby granted, free of charge, to any person obtaining a copy
10 | of this software and associated documentation files (the "Software"), to deal
11 | in the Software without restriction, including without limitation the rights
12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 | copies of the Software, and to permit persons to whom the Software is
14 | furnished to do so, subject to the following conditions:
15 |
16 | The above copyright notice and this permission notice shall be included in all
17 | copies or substantial portions of the Software.
18 |
19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 | SOFTWARE.
26 |
27 |
28 |
29 | Need support or additional features? Please visit https://kitbashery.com/
30 | */
31 |
32 | namespace Kitbashery.Gameplay
33 | {
34 | ///
35 | /// A physics based projectile.
36 | ///
37 | [HelpURL("https://kitbashery.com/docs/game-kit/projectile.html")]
38 | [AddComponentMenu("Kitbashery/Physics/Projectile")]
39 | [RequireComponent(typeof(Rigidbody))]
40 | public class Projectile : CollisionEvents
41 | {
42 | #region Properties:
43 |
44 | [Header("Projectile:")]
45 | public Rigidbody rigid;
46 |
47 | [Space]
48 | [Tooltip("Should force be applied to the hit rigidbody?")]
49 | public bool applyForceOnImpact = true;
50 | [Tooltip("Force applied to the rigidbody of hit colliders.")]
51 | public float impactForce = 1f;
52 | [Tooltip("Initial velocity of the rigidbody.")]
53 | public float velocity = 500f;
54 |
55 | [Space]
56 | [Tooltip("Should health be modified on impact?")]
57 | public bool modifyHealthOnImpact = false;
58 | public TimedHealthEffect healthEffect;
59 |
60 | ///
61 | /// The last health component registered/unregisterd.
62 | ///
63 | private Health lastHealth;
64 |
65 | [Space]
66 | [Tooltip("Should the projectile be disabled on impact? (useful for pooling).")]
67 | public bool disableOnImpact = true;
68 | [Tooltip("How many times should the projectile be allowed to bounce before it can be disabled?")]
69 | [Min(0)]
70 | public int ricochets = 0;
71 | public UnityEvent onRicochet;
72 | [Min(0)]
73 | private int currentRicochets = 0;
74 | [Tooltip("Should the GameObject be deactivated after lifeTime has elapsed.")]
75 | public bool useLifeTime = true;
76 | [Tooltip("How long this projectile will live before being deactivated (in seconds).")]
77 | public float lifeTime = 10f;
78 | [Min(0)]
79 | private float life = 0f;
80 |
81 | [Space]
82 | public bool seekTarget = false;
83 | public Transform target;
84 | [Tooltip("Determines how a target should be selected if target is not initially defined.")]
85 | public TargetModes targetMode = TargetModes.targetFirst;
86 | [Tooltip("The layer(s) to search for a target in.")]
87 | public LayerMask layerMask;
88 | [Tooltip("How should the projectile interact with trigger colliders?")]
89 | public QueryTriggerInteraction triggerInteraction = QueryTriggerInteraction.Ignore;
90 | ///
91 | /// Raycast hits collected when the projectile searches for targets to seek.
92 | ///
93 | [HideInInspector]
94 | public RaycastHit[] hits;
95 | [Tooltip("The tag required for a GameObject to be set as a target. (leave blank if you don't need this).")]
96 | public string targetTag;
97 | [Tooltip("The range to search for a target in.")]
98 | public float searchRange = 10f;
99 | [Tooltip("The speed at which the projectile will travel to the target.")]
100 | public float seekSpeed = 10f;
101 |
102 |
103 | #endregion
104 |
105 | #region Initialziation & Updates:
106 |
107 | private void Awake()
108 | {
109 | if(rigid == null)
110 | {
111 | rigid = gameObject.GetComponent();
112 | }
113 | }
114 |
115 | #if UNITY_EDITOR
116 | private void OnValidate()
117 | {
118 | //Autofill events:
119 | if(enterEvent == null)
120 | {
121 | enterEvent = new UnityEngine.Events.UnityEvent();
122 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(enterEvent, Impact);
123 |
124 | healthEffect.amount = 1;
125 | healthEffect.times = 1;
126 | }
127 | else if (EventContainsListenerWithMethod(enterEvent, "Impact") == false)
128 | {
129 | UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(enterEvent, Impact);
130 | }
131 | }
132 | #endif
133 |
134 | private void OnEnable()
135 | {
136 | if (seekTarget == true && target == null)
137 | {
138 | FindBestTarget();
139 | }
140 |
141 | rigid.velocity = Vector3.zero;
142 | rigid.AddForce(transform.forward * velocity, ForceMode.Impulse);
143 | }
144 |
145 | private void OnDisable()
146 | {
147 | transform.position = Vector3.zero;
148 | transform.rotation = Quaternion.identity;
149 | lastHealth = null;
150 | target = null;
151 | life = 0;
152 | currentRicochets = 0;
153 | }
154 |
155 | private void Update()
156 | {
157 | if(useLifeTime == true)
158 | {
159 | life += Time.deltaTime;
160 | if (life >= lifeTime)
161 | {
162 | gameObject.SetActive(false);
163 | }
164 | }
165 | }
166 |
167 | private void FixedUpdate()
168 | {
169 | if (seekTarget == true && target != null)
170 | {
171 | transform.LookAt(target);
172 | rigid.AddForce((target.position - transform.position).normalized * seekSpeed);
173 | }
174 | }
175 |
176 | #endregion
177 |
178 | public void Impact()
179 | {
180 | if(lastContact != null)
181 | {
182 | if (applyForceOnImpact == true)
183 | {
184 | Vector3 hit = lastContact.ClosestPoint(transform.position);
185 | if(lastContact.attachedRigidbody != null)
186 | {
187 | lastContact.attachedRigidbody.AddForceAtPosition(Vector3.one * impactForce, hit);
188 | }
189 | }
190 |
191 | if (modifyHealthOnImpact == true)
192 | {
193 | lastHealth = lastContact.GetComponent();
194 | if (healthEffect.times > 1)
195 | {
196 | lastHealth.ModifyHealthOverTime(healthEffect);
197 | }
198 | else
199 | {
200 | lastHealth.ModifyHealth(healthEffect.modifier, healthEffect.amount);
201 | }
202 | }
203 | }
204 |
205 | if(ricochets > 0 && lastCollision != null)
206 | {
207 | if(disableOnImpact == true && currentRicochets == ricochets)
208 | {
209 | gameObject.SetActive(false);
210 | }
211 | else
212 | {
213 | onRicochet.Invoke();
214 | rigid.velocity = Vector3.zero;
215 | Vector3 richochet = -lastCollision.GetContact(0).normal;
216 | transform.LookAt(richochet);
217 | rigid.AddForce(richochet * (velocity / currentRicochets), ForceMode.Impulse);
218 | currentRicochets++;
219 | }
220 | }
221 | else
222 | {
223 | if(disableOnImpact == true)
224 | {
225 | gameObject.SetActive(false);
226 | }
227 | }
228 | }
229 |
230 | ///
231 | /// Call if adding this component via script.
232 | ///
233 | public void AddImpactListener()
234 | {
235 | enterEvent.AddListener(Impact);
236 | }
237 |
238 | ///
239 | /// Finds the best target for the projectile to seek to.
240 | ///
241 | public void FindBestTarget()
242 | {
243 | Physics.SphereCastNonAlloc(transform.position, searchRange, Vector3.zero, hits, Mathf.Infinity, layerMask, triggerInteraction);
244 | if (hits.Length > 0)
245 | {
246 | Transform bestTarget = null;
247 |
248 | switch (targetMode)
249 | {
250 | case TargetModes.targetFirst:
251 |
252 | foreach (RaycastHit hit in hits)
253 | {
254 | if (string.IsNullOrEmpty(targetTag) || hit.transform.gameObject.CompareTag(targetTag) == true)
255 | {
256 | bestTarget = hit.transform;
257 | }
258 | }
259 |
260 | break;
261 |
262 | case TargetModes.targetNearest:
263 |
264 | float nearestDistance = Mathf.Infinity;
265 | foreach (RaycastHit hit in hits)
266 | {
267 | if (string.IsNullOrEmpty(targetTag) || hit.transform.gameObject.CompareTag(targetTag) == true)
268 | {
269 | float distance = Vector3.Distance(transform.position, hit.transform.position);
270 | if (distance < nearestDistance)
271 | {
272 | nearestDistance = distance;
273 | bestTarget = hit.transform;
274 | }
275 | }
276 | }
277 |
278 | break;
279 |
280 | case TargetModes.targetFarthest:
281 |
282 | float farthestDistance = 0;
283 | foreach (RaycastHit hit in hits)
284 | {
285 | if (string.IsNullOrEmpty(targetTag) || hit.transform.gameObject.CompareTag(targetTag) == true)
286 | {
287 | float distance = Vector3.Distance(transform.position, hit.transform.position);
288 | if (distance > farthestDistance)
289 | {
290 | farthestDistance = distance;
291 | bestTarget = hit.transform;
292 | }
293 | }
294 | }
295 |
296 | break;
297 | }
298 |
299 | target = bestTarget;
300 | }
301 | }
302 | }
303 |
304 | public enum TargetModes { targetFirst, targetNearest, targetFarthest }
305 | }
--------------------------------------------------------------------------------
/Runtime/Projectile.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 49df814edf10eda419221794ab9a80c1
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: 54f72835463919a4b8cd30bfd216feb8, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Spawner.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.Collections.Generic;
4 | using UnityEngine;
5 | using UnityEngine.Events;
6 |
7 | /*
8 | MIT License
9 |
10 | Copyright (c) 2022 Kitbashery
11 |
12 | Permission is hereby granted, free of charge, to any person obtaining a copy
13 | of this software and associated documentation files (the "Software"), to deal
14 | in the Software without restriction, including without limitation the rights
15 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16 | copies of the Software, and to permit persons to whom the Software is
17 | furnished to do so, subject to the following conditions:
18 |
19 | The above copyright notice and this permission notice shall be included in all
20 | copies or substantial portions of the Software.
21 |
22 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28 | SOFTWARE.
29 |
30 |
31 |
32 | Need support or additional features? Please visit https://kitbashery.com/
33 | */
34 |
35 | namespace Kitbashery.Gameplay
36 | {
37 | ///
38 | /// Enables GameObjects pooled by in sequential waves.
39 | ///
40 | [HelpURL("https://kitbashery.com/docs/game-kit/spawner.html")]
41 | [AddComponentMenu("Kitbashery/Gameplay/Spawner")]
42 | public class Spawner : MonoBehaviour
43 | {
44 | #region Properties:
45 |
46 | [field: SerializeField]
47 | public bool canSpawn { get; set; }
48 |
49 | [field: SerializeField, Tooltip("Spawned GameObjects will be positioned in the direction the spawner is facing.")]
50 | public bool spawnForward { get; set; } = false;
51 | [field: SerializeField, Tooltip("How far forward to spawn a GameObject (if Spawn Forward is checked).")]
52 | public float forwardDistance { get; set; } = 0;
53 | public Vector3 spawnOffset;
54 | [Tooltip("Sequential information on what pool to spawn GameObjects from, how often and how many.")]
55 | public List waves = new List();
56 |
57 | [HideInInspector]
58 | public GameObject lastSpawned;
59 |
60 | [HideInInspector]
61 | [Min(0)]
62 | public int currentWave = 0;
63 |
64 | [HideInInspector]
65 | [Min(0)]
66 | public int currentWaveSpawns = 0;
67 |
68 | private float currentTime = 0;
69 |
70 | #endregion
71 |
72 | #region Initialization & Updates:
73 |
74 | private void Start()
75 | {
76 | if (ObjectPools.Instance == null)
77 | {
78 | Debug.LogWarning("There is not an instance of ObjectPools in the scene. Disabling spawner.");
79 | canSpawn = false;
80 | }
81 | }
82 |
83 | // Update is called once per frame.
84 | void Update()
85 | {
86 | if (canSpawn == true)
87 | {
88 | if (waves.Count > 0)
89 | {
90 | if (currentWave > waves.Count)
91 | {
92 | currentWave = 0;
93 | }
94 | else
95 | {
96 | currentTime += Time.deltaTime;
97 | if (currentTime >= waves[currentWave].interval)
98 | {
99 | if (!string.IsNullOrEmpty(waves[currentWave].poolIdentifiers[currentWaveSpawns].prefabName))
100 | {
101 | lastSpawned = ObjectPools.Instance.GetPooledObject(waves[currentWave].poolIdentifiers[currentWaveSpawns].prefabName);
102 | }
103 | else
104 | {
105 | lastSpawned = ObjectPools.Instance.GetPooledObject(waves[currentWave].poolIdentifiers[currentWaveSpawns].poolIndex);
106 | }
107 |
108 | if (lastSpawned != null)
109 | {
110 | waves[currentWave].onSpawn.Invoke();
111 |
112 | lastSpawned.transform.rotation = transform.rotation;
113 | if (spawnForward == true)
114 | {
115 | lastSpawned.transform.position = transform.TransformPoint((transform.forward * forwardDistance) + spawnOffset);
116 | }
117 | else
118 | {
119 | lastSpawned.transform.position = transform.TransformPoint(spawnOffset);
120 | }
121 |
122 | lastSpawned.SetActive(true);
123 | }
124 | else
125 | {
126 | Debug.LogWarning("|Spawner|: Failed to spawn, make sure all wave amounts are less than or equal to the pool's max amount or increase the pool's amount.", gameObject);
127 | }
128 |
129 | currentWaveSpawns++;
130 | if (currentWaveSpawns == waves[currentWave].poolIdentifiers.Count)
131 | {
132 | currentWaveSpawns = 0;
133 | currentWave++;
134 | if (currentWave == waves.Count)
135 | {
136 | currentWave = 0;
137 | canSpawn = false;
138 | }
139 | waves[currentWave].onWaveComplete.Invoke();
140 | }
141 |
142 | currentTime = 0;
143 | }
144 | }
145 | }
146 | else
147 | {
148 | Debug.LogWarning("|Spawner|: Trying to spawn but no waves are defined.", gameObject);
149 | }
150 | }
151 | }
152 |
153 | private void OnDrawGizmosSelected()
154 | {
155 | Gizmos.color = Color.green;
156 | if (spawnForward == true)
157 | {
158 | Gizmos.DrawSphere(transform.TransformPoint((transform.forward * forwardDistance) + spawnOffset), 0.1f);
159 | }
160 | else
161 | {
162 | Gizmos.DrawSphere(transform.position + spawnOffset, 0.1f);
163 | }
164 | }
165 |
166 | private IEnumerator Delay(float time)
167 | {
168 | canSpawn = false;
169 | yield return new WaitForSeconds(time);
170 | canSpawn = true;
171 | }
172 |
173 | #endregion
174 |
175 | #region Core Functions:
176 |
177 | public void DelaySpawn(float time)
178 | {
179 | StartCoroutine(Delay(time));
180 | }
181 |
182 | public void SetWave(int wave)
183 | {
184 | if (wave <= waves.Count)
185 | {
186 | currentWave = 0;
187 | }
188 | else
189 | {
190 | Debug.LogWarning("|Spawner|: Tried to set the wave beyond the maximum amount of waves.", gameObject);
191 | }
192 |
193 | }
194 |
195 | ///
196 | /// Randomizes the spawns of a wave.
197 | ///
198 | /// The wave to randomize.
199 | /// The wave with randomized spawns.
200 | public Wave RandomizeWave(Wave wave)
201 | {
202 | List ids = new List();
203 | for(int i = 0; i < wave.spawnAmount; i++)
204 | {
205 | PoolID id = new();
206 | id.poolIndex = wave.randomPools[UnityEngine.Random.Range(0, wave.randomPools.Count)];
207 | ids.Add(id);
208 | }
209 | wave.poolIdentifiers = ids;
210 |
211 | return wave;
212 | }
213 |
214 | ///
215 | /// Randomizes all waves that have randomWaves set to true.
216 | ///
217 | public void RandomizeWaves()
218 | {
219 | for(int i = 0; i < waves.Count; i++)
220 | {
221 | if (waves[i].randomizeWaves == true)
222 | {
223 | waves[i] = RandomizeWave(waves[i]);
224 | }
225 | }
226 | }
227 |
228 | public void DebugCurrentWave()
229 | {
230 | Debug.LogFormat(gameObject, "|Spawner|: Currently on wave {0} of {1} and has spawned {2} of {3} times.", currentWave, waves.Count, currentWaveSpawns, waves[currentWave].poolIdentifiers.Count);
231 | }
232 |
233 | public void RandomizeSpawnOffset(float radius)
234 | {
235 | UnityEngine.Random.InitState(spawnOffset.GetHashCode());
236 | spawnOffset = UnityEngine.Random.insideUnitSphere * radius;
237 | }
238 |
239 | #endregion
240 | }
241 |
242 | ///
243 | /// Defines spawns used by to enable pooled GameObjects.
244 | ///
245 | [Serializable]
246 | public struct Wave
247 | {
248 | [Space]
249 | [Tooltip("Time in seconds between spawns.")]
250 | [Min(0)]
251 | public float interval;
252 |
253 | [Tooltip("The amount of spawns in this wave.")]
254 | public int spawnAmount;
255 |
256 | public UnityEvent onSpawn;
257 |
258 | public UnityEvent onWaveComplete;
259 |
260 | [Tooltip("Defines the prefabs to enable from a pool during this wave.")]
261 | public List poolIdentifiers;
262 |
263 | [Space]
264 | [Tooltip("Should spawns be randomized? (used instead of poolIdentifiers).")]
265 | public bool randomizeWaves;
266 | [Tooltip("Pool indices to select spawns from.")]
267 | public List randomPools;
268 | }
269 | }
--------------------------------------------------------------------------------
/Runtime/Spawner.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a746ef034d374934ca8e42907c796477
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: 530cffd1eb210d24c83d59eb68e3f69f, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/TimeManager.cs:
--------------------------------------------------------------------------------
1 | using System.Collections;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 | using UnityEngine.Events;
5 | using UnityEngine.UI;
6 | using TMPro;
7 |
8 | #if ENABLE_INPUT_SYSTEM
9 | using UnityEngine.InputSystem;
10 | using UnityEngine.InputSystem.Controls;
11 | #endif
12 |
13 | namespace Kitbashery.Gameplay
14 | {
15 | ///
16 | /// Manages play/pause, framerate events and time scale effects.
17 | ///
18 | [HelpURL("https://kitbashery.com/docs/game-kit/time-manager.html")]
19 | [DisallowMultipleComponent]
20 | [AddComponentMenu("Kitbashery/Event/Time Manager")]
21 | public class TimeManager : MonoBehaviour
22 | {
23 | #region Properties:
24 |
25 | public static TimeManager Instance;
26 |
27 | [Header("Pause Settings:")]
28 | public KeyCode togglePauseKey = KeyCode.Escape;
29 |
30 | [field: SerializeField]
31 | public bool pauseAudio { get; set; } = true;
32 | [field: SerializeField]
33 | public bool pauseTime { get; set; } = true;
34 | [field: SerializeField]
35 | public bool showCursor { get; set; } = true;
36 |
37 | public UnityEvent onPause;
38 |
39 | public UnityEvent onUnPause;
40 |
41 | [HideInInspector]
42 | public bool paused = false;
43 |
44 | [HideInInspector]
45 | public bool modifyingTimeScale = false;
46 |
47 | [HideInInspector]
48 | public float currentTimeDuration = 0;
49 |
50 | [HideInInspector]
51 | public float currentTimeMultiplier = 0;
52 |
53 | private float initialTimeScale;
54 |
55 | [Header("FPS Counter:")]
56 | [Tooltip("Should fps counters be updated and fps events invoked?")]
57 | public bool debugFPS = false;
58 | public Text fpsCounter;
59 | public TMP_Text fpsCounterTMP;
60 | [Min(1)]
61 | public float targetFPS = 60;
62 | [HideInInspector]
63 | public float currentFPS;
64 | public UnityEvent onBelowTargetFPS;
65 | public UnityEvent onAboveTargetFPS;
66 |
67 | #endregion
68 |
69 | #region
70 |
71 | private void Awake()
72 | {
73 | if (Instance != null && Instance != this)
74 | {
75 | Destroy(this);
76 | }
77 | else
78 | {
79 | Instance = this;
80 | }
81 |
82 | initialTimeScale = Time.timeScale;
83 | }
84 |
85 | private void Update()
86 | {
87 | if(isPauseKeyPressed() == true)
88 | {
89 | TogglePause();
90 | }
91 |
92 | if(debugFPS == true)
93 | {
94 | CountFPS();
95 | }
96 | }
97 |
98 | private bool isPauseKeyPressed()
99 | {
100 | #if ENABLE_INPUT_SYSTEM
101 | return ((KeyControl)Keyboard.current[togglePauseKey.ToString()]).wasPressedThisFrame;
102 | #endif
103 |
104 | #if ENABLE_LEGACY_INPUT_MANAGER
105 | return Input.GetKeyDown(togglePauseKey) == true;
106 | #endif
107 | }
108 |
109 | private IEnumerator ModifyTimeScale()
110 | {
111 | Time.timeScale += currentTimeMultiplier;
112 | modifyingTimeScale = true;
113 | yield return new WaitForSeconds(currentTimeDuration);
114 | if (paused == false)
115 | {
116 | Time.timeScale = initialTimeScale;
117 | }
118 | else
119 | {
120 | Time.timeScale = 0;
121 | }
122 | currentTimeMultiplier = 0;
123 | currentTimeDuration = 0;
124 | modifyingTimeScale = false;
125 | }
126 |
127 | #endregion
128 |
129 | #region Methods:
130 |
131 | public void TogglePause()
132 | {
133 | if (paused == true)
134 | {
135 | if (pauseTime == true)
136 | {
137 | Time.timeScale = 0f;
138 | }
139 |
140 | if (pauseAudio == true)
141 | {
142 | AudioListener.pause = true;
143 | }
144 |
145 | if(showCursor == true)
146 | {
147 | Cursor.lockState = CursorLockMode.Confined;
148 | Cursor.visible = true;
149 | }
150 | onPause.Invoke();
151 | }
152 | else
153 | {
154 | Time.timeScale = initialTimeScale;
155 | AudioListener.pause = false;
156 | if(showCursor == true)
157 | {
158 | Cursor.lockState = CursorLockMode.Locked;
159 | Cursor.visible = false;
160 | }
161 | onUnPause.Invoke();
162 | }
163 | paused = !paused;
164 | }
165 |
166 | public void CountFPS()
167 | {
168 | currentFPS = 1f / Time.unscaledDeltaTime;
169 |
170 | if(fpsCounterTMP != null)
171 | {
172 | fpsCounterTMP.text = "FPS: " + ((int)currentFPS).ToString();
173 | }
174 | else
175 | {
176 | if (fpsCounter != null)
177 | {
178 | fpsCounter.text = "FPS: " + ((int)currentFPS).ToString();
179 | }
180 | }
181 |
182 | if(currentFPS < targetFPS)
183 | {
184 | onBelowTargetFPS.Invoke();
185 | }
186 | else if(currentFPS > targetFPS)
187 | {
188 | onAboveTargetFPS.Invoke();
189 | }
190 | }
191 |
192 | public void DebugFPS()
193 | {
194 | Debug.Log(((int)currentFPS).ToString());
195 | }
196 |
197 | ///
198 | /// Scales the time of the game for the specified duration.
199 | ///
200 | /// How much to add to the timescale.
201 | /// The duration of the effect.
202 | /// Should the current multiplier be added onto.
203 | /// Should the current durration be added onto.
204 | public void ScaleTime(float multiplier, float duration, bool addMultiplier, bool addDuration)
205 | {
206 | if (modifyingTimeScale == true)
207 | {
208 | StopCoroutine(ModifyTimeScale());
209 | if (addDuration == true)
210 | {
211 | currentTimeDuration += duration;
212 | }
213 | else
214 | {
215 | currentTimeDuration = duration;
216 | }
217 |
218 | if (addMultiplier == true)
219 | {
220 | currentTimeMultiplier += duration;
221 | }
222 | else
223 | {
224 | currentTimeMultiplier = multiplier;
225 | }
226 | StartCoroutine(ModifyTimeScale());
227 | }
228 | else
229 | {
230 | currentTimeDuration = duration;
231 | currentTimeMultiplier = multiplier;
232 | StartCoroutine(ModifyTimeScale());
233 | }
234 | }
235 |
236 | ///
237 | /// Slows the time scale to half speed (overrides ScaleTime effects).
238 | ///
239 | /// How long the slow motion effect lasts.
240 | public void SlowMoHalfSpeed(float duration)
241 | {
242 | if (modifyingTimeScale == true)
243 | {
244 | StopCoroutine(ModifyTimeScale());
245 | }
246 | currentTimeDuration = duration;
247 | Time.timeScale = initialTimeScale / 2;
248 | currentTimeMultiplier = 0;
249 | StartCoroutine(ModifyTimeScale());
250 | }
251 |
252 | #endregion
253 | }
254 | }
255 |
--------------------------------------------------------------------------------
/Runtime/TimeManager.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d286f65bd2844b8498ac95cfbd8de857
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {fileID: 2800000, guid: e22227f5d8588bd409651653feb95a90, type: 3}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/kitbashery.game-kit.asmdef:
--------------------------------------------------------------------------------
1 | {
2 | "name": "kitbashery.game-kit",
3 | "rootNamespace": "",
4 | "references": [
5 | "GUID:6055be8ebefd69e48b49212b09b47b2f",
6 | "GUID:75469ad4d38634e559750d17036d5f7c"
7 | ],
8 | "includePlatforms": [],
9 | "excludePlatforms": [],
10 | "allowUnsafeCode": false,
11 | "overrideReferences": false,
12 | "precompiledReferences": [],
13 | "autoReferenced": true,
14 | "defineConstraints": [],
15 | "versionDefines": [],
16 | "noEngineReferences": false
17 | }
--------------------------------------------------------------------------------
/Runtime/kitbashery.game-kit.asmdef.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 10bd4f94ce0396a46b8d3cebc38a19dc
3 | AssemblyDefinitionImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Samples~/Demo.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f0e4cdcf495e3514fae9da2ad0155cb7
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Samples~/Demo/Demo Sphere.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &8584135303632376971
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: 2684473636813238548}
12 | - component: {fileID: 5421185522491994082}
13 | - component: {fileID: 4402657934764809078}
14 | - component: {fileID: 3009970984603776332}
15 | - component: {fileID: 5725633749661894332}
16 | - component: {fileID: 7524617555889825348}
17 | m_Layer: 0
18 | m_Name: Demo Sphere
19 | m_TagString: Untagged
20 | m_Icon: {fileID: 0}
21 | m_NavMeshLayer: 0
22 | m_StaticEditorFlags: 0
23 | m_IsActive: 1
24 | --- !u!4 &2684473636813238548
25 | Transform:
26 | m_ObjectHideFlags: 0
27 | m_CorrespondingSourceObject: {fileID: 0}
28 | m_PrefabInstance: {fileID: 0}
29 | m_PrefabAsset: {fileID: 0}
30 | m_GameObject: {fileID: 8584135303632376971}
31 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
32 | m_LocalPosition: {x: 0, y: 0, z: 0}
33 | m_LocalScale: {x: 1, y: 1, z: 1}
34 | m_ConstrainProportionsScale: 0
35 | m_Children: []
36 | m_Father: {fileID: 0}
37 | m_RootOrder: 0
38 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
39 | --- !u!33 &5421185522491994082
40 | MeshFilter:
41 | m_ObjectHideFlags: 0
42 | m_CorrespondingSourceObject: {fileID: 0}
43 | m_PrefabInstance: {fileID: 0}
44 | m_PrefabAsset: {fileID: 0}
45 | m_GameObject: {fileID: 8584135303632376971}
46 | m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
47 | --- !u!23 &4402657934764809078
48 | MeshRenderer:
49 | m_ObjectHideFlags: 0
50 | m_CorrespondingSourceObject: {fileID: 0}
51 | m_PrefabInstance: {fileID: 0}
52 | m_PrefabAsset: {fileID: 0}
53 | m_GameObject: {fileID: 8584135303632376971}
54 | m_Enabled: 1
55 | m_CastShadows: 1
56 | m_ReceiveShadows: 1
57 | m_DynamicOccludee: 1
58 | m_StaticShadowCaster: 0
59 | m_MotionVectors: 1
60 | m_LightProbeUsage: 1
61 | m_ReflectionProbeUsage: 1
62 | m_RayTracingMode: 2
63 | m_RayTraceProcedural: 0
64 | m_RenderingLayerMask: 1
65 | m_RendererPriority: 0
66 | m_Materials:
67 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
68 | m_StaticBatchInfo:
69 | firstSubMesh: 0
70 | subMeshCount: 0
71 | m_StaticBatchRoot: {fileID: 0}
72 | m_ProbeAnchor: {fileID: 0}
73 | m_LightProbeVolumeOverride: {fileID: 0}
74 | m_ScaleInLightmap: 1
75 | m_ReceiveGI: 1
76 | m_PreserveUVs: 0
77 | m_IgnoreNormalsForChartDetection: 0
78 | m_ImportantGI: 0
79 | m_StitchLightmapSeams: 1
80 | m_SelectedEditorRenderState: 3
81 | m_MinimumChartSize: 4
82 | m_AutoUVMaxDistance: 0.5
83 | m_AutoUVMaxAngle: 89
84 | m_LightmapParameters: {fileID: 0}
85 | m_SortingLayerID: 0
86 | m_SortingLayer: 0
87 | m_SortingOrder: 0
88 | m_AdditionalVertexStreams: {fileID: 0}
89 | --- !u!135 &3009970984603776332
90 | SphereCollider:
91 | m_ObjectHideFlags: 0
92 | m_CorrespondingSourceObject: {fileID: 0}
93 | m_PrefabInstance: {fileID: 0}
94 | m_PrefabAsset: {fileID: 0}
95 | m_GameObject: {fileID: 8584135303632376971}
96 | m_Material: {fileID: 0}
97 | m_IsTrigger: 0
98 | m_Enabled: 1
99 | serializedVersion: 2
100 | m_Radius: 0.5
101 | m_Center: {x: 0, y: 0, z: 0}
102 | --- !u!114 &5725633749661894332
103 | MonoBehaviour:
104 | m_ObjectHideFlags: 0
105 | m_CorrespondingSourceObject: {fileID: 0}
106 | m_PrefabInstance: {fileID: 0}
107 | m_PrefabAsset: {fileID: 0}
108 | m_GameObject: {fileID: 8584135303632376971}
109 | m_Enabled: 1
110 | m_EditorHideFlags: 0
111 | m_Script: {fileID: 11500000, guid: bba5fb71024046749af5e8b7a9b5caf1, type: 3}
112 | m_Name:
113 | m_EditorClassIdentifier:
114 | invinsible: 0
115 | bonusHealth: {fileID: 0}
116 | hitPoints: 100
117 | canRegen: 0
118 | regenPoints: 1
119 | regenRate: 0.1
120 | onReceivedDamage:
121 | m_PersistentCalls:
122 | m_Calls: []
123 | onHealed:
124 | m_PersistentCalls:
125 | m_Calls: []
126 | onDead:
127 | m_PersistentCalls:
128 | m_Calls: []
129 | --- !u!54 &7524617555889825348
130 | Rigidbody:
131 | m_ObjectHideFlags: 0
132 | m_CorrespondingSourceObject: {fileID: 0}
133 | m_PrefabInstance: {fileID: 0}
134 | m_PrefabAsset: {fileID: 0}
135 | m_GameObject: {fileID: 8584135303632376971}
136 | serializedVersion: 2
137 | m_Mass: 1
138 | m_Drag: 0
139 | m_AngularDrag: 0.05
140 | m_UseGravity: 1
141 | m_IsKinematic: 0
142 | m_Interpolate: 0
143 | m_Constraints: 0
144 | m_CollisionDetection: 0
145 |
--------------------------------------------------------------------------------
/Samples~/Demo/Demo Sphere.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4a4d317d41134a94f8ca594bd9c5f6f3
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Samples~/Demo/Game Kit Demo.unity:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!29 &1
4 | OcclusionCullingSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_OcclusionBakeSettings:
8 | smallestOccluder: 5
9 | smallestHole: 0.25
10 | backfaceThreshold: 100
11 | m_SceneGUID: 00000000000000000000000000000000
12 | m_OcclusionCullingData: {fileID: 0}
13 | --- !u!104 &2
14 | RenderSettings:
15 | m_ObjectHideFlags: 0
16 | serializedVersion: 9
17 | m_Fog: 0
18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
19 | m_FogMode: 3
20 | m_FogDensity: 0.01
21 | m_LinearFogStart: 0
22 | m_LinearFogEnd: 300
23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
26 | m_AmbientIntensity: 1
27 | m_AmbientMode: 0
28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
30 | m_HaloStrength: 0.5
31 | m_FlareStrength: 1
32 | m_FlareFadeSpeed: 3
33 | m_HaloTexture: {fileID: 0}
34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
35 | m_DefaultReflectionMode: 0
36 | m_DefaultReflectionResolution: 128
37 | m_ReflectionBounces: 1
38 | m_ReflectionIntensity: 1
39 | m_CustomReflection: {fileID: 0}
40 | m_Sun: {fileID: 0}
41 | m_IndirectSpecularColor: {r: 0.41679892, g: 0.44434357, b: 0.45980346, a: 1}
42 | m_UseRadianceAmbientProbe: 0
43 | --- !u!157 &3
44 | LightmapSettings:
45 | m_ObjectHideFlags: 0
46 | serializedVersion: 12
47 | m_GIWorkflowMode: 1
48 | m_GISettings:
49 | serializedVersion: 2
50 | m_BounceScale: 1
51 | m_IndirectOutputScale: 1
52 | m_AlbedoBoost: 1
53 | m_EnvironmentLightingMode: 0
54 | m_EnableBakedLightmaps: 1
55 | m_EnableRealtimeLightmaps: 0
56 | m_LightmapEditorSettings:
57 | serializedVersion: 12
58 | m_Resolution: 2
59 | m_BakeResolution: 40
60 | m_AtlasSize: 1024
61 | m_AO: 0
62 | m_AOMaxDistance: 1
63 | m_CompAOExponent: 1
64 | m_CompAOExponentDirect: 0
65 | m_ExtractAmbientOcclusion: 0
66 | m_Padding: 2
67 | m_LightmapParameters: {fileID: 0}
68 | m_LightmapsBakeMode: 1
69 | m_TextureCompression: 1
70 | m_FinalGather: 0
71 | m_FinalGatherFiltering: 1
72 | m_FinalGatherRayCount: 256
73 | m_ReflectionCompression: 2
74 | m_MixedBakeMode: 2
75 | m_BakeBackend: 1
76 | m_PVRSampling: 1
77 | m_PVRDirectSampleCount: 32
78 | m_PVRSampleCount: 512
79 | m_PVRBounces: 2
80 | m_PVREnvironmentSampleCount: 256
81 | m_PVREnvironmentReferencePointCount: 2048
82 | m_PVRFilteringMode: 1
83 | m_PVRDenoiserTypeDirect: 1
84 | m_PVRDenoiserTypeIndirect: 1
85 | m_PVRDenoiserTypeAO: 1
86 | m_PVRFilterTypeDirect: 0
87 | m_PVRFilterTypeIndirect: 0
88 | m_PVRFilterTypeAO: 0
89 | m_PVREnvironmentMIS: 1
90 | m_PVRCulling: 1
91 | m_PVRFilteringGaussRadiusDirect: 1
92 | m_PVRFilteringGaussRadiusIndirect: 5
93 | m_PVRFilteringGaussRadiusAO: 2
94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5
95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2
96 | m_PVRFilteringAtrousPositionSigmaAO: 1
97 | m_ExportTrainingData: 0
98 | m_TrainingDataDestination: TrainingData
99 | m_LightProbeSampleCountMultiplier: 4
100 | m_LightingDataAsset: {fileID: 0}
101 | m_LightingSettings: {fileID: 0}
102 | --- !u!196 &4
103 | NavMeshSettings:
104 | serializedVersion: 2
105 | m_ObjectHideFlags: 0
106 | m_BuildSettings:
107 | serializedVersion: 2
108 | agentTypeID: 0
109 | agentRadius: 0.5
110 | agentHeight: 2
111 | agentSlope: 45
112 | agentClimb: 0.4
113 | ledgeDropHeight: 0
114 | maxJumpAcrossDistance: 0
115 | minRegionArea: 2
116 | manualCellSize: 0
117 | cellSize: 0.16666667
118 | manualTileSize: 0
119 | tileSize: 256
120 | accuratePlacement: 0
121 | maxJobWorkers: 0
122 | preserveTilesOutsideBounds: 0
123 | debug:
124 | m_Flags: 0
125 | m_NavMeshData: {fileID: 0}
126 | --- !u!1 &9782536
127 | GameObject:
128 | m_ObjectHideFlags: 0
129 | m_CorrespondingSourceObject: {fileID: 0}
130 | m_PrefabInstance: {fileID: 0}
131 | m_PrefabAsset: {fileID: 0}
132 | serializedVersion: 6
133 | m_Component:
134 | - component: {fileID: 9782539}
135 | - component: {fileID: 9782538}
136 | - component: {fileID: 9782537}
137 | m_Layer: 0
138 | m_Name: Main Camera
139 | m_TagString: MainCamera
140 | m_Icon: {fileID: 0}
141 | m_NavMeshLayer: 0
142 | m_StaticEditorFlags: 0
143 | m_IsActive: 1
144 | --- !u!81 &9782537
145 | AudioListener:
146 | m_ObjectHideFlags: 0
147 | m_CorrespondingSourceObject: {fileID: 0}
148 | m_PrefabInstance: {fileID: 0}
149 | m_PrefabAsset: {fileID: 0}
150 | m_GameObject: {fileID: 9782536}
151 | m_Enabled: 1
152 | --- !u!20 &9782538
153 | Camera:
154 | m_ObjectHideFlags: 0
155 | m_CorrespondingSourceObject: {fileID: 0}
156 | m_PrefabInstance: {fileID: 0}
157 | m_PrefabAsset: {fileID: 0}
158 | m_GameObject: {fileID: 9782536}
159 | m_Enabled: 1
160 | serializedVersion: 2
161 | m_ClearFlags: 1
162 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
163 | m_projectionMatrixMode: 1
164 | m_GateFitMode: 2
165 | m_FOVAxisMode: 0
166 | m_SensorSize: {x: 36, y: 24}
167 | m_LensShift: {x: 0, y: 0}
168 | m_FocalLength: 50
169 | m_NormalizedViewPortRect:
170 | serializedVersion: 2
171 | x: 0
172 | y: 0
173 | width: 1
174 | height: 1
175 | near clip plane: 0.3
176 | far clip plane: 1000
177 | field of view: 60
178 | orthographic: 0
179 | orthographic size: 5
180 | m_Depth: -1
181 | m_CullingMask:
182 | serializedVersion: 2
183 | m_Bits: 4294967295
184 | m_RenderingPath: -1
185 | m_TargetTexture: {fileID: 0}
186 | m_TargetDisplay: 0
187 | m_TargetEye: 3
188 | m_HDR: 1
189 | m_AllowMSAA: 1
190 | m_AllowDynamicResolution: 0
191 | m_ForceIntoRT: 0
192 | m_OcclusionCulling: 1
193 | m_StereoConvergence: 10
194 | m_StereoSeparation: 0.022
195 | --- !u!4 &9782539
196 | Transform:
197 | m_ObjectHideFlags: 0
198 | m_CorrespondingSourceObject: {fileID: 0}
199 | m_PrefabInstance: {fileID: 0}
200 | m_PrefabAsset: {fileID: 0}
201 | m_GameObject: {fileID: 9782536}
202 | m_LocalRotation: {x: 0.011410333, y: -0.9883825, z: 0.09698209, w: 0.11646631}
203 | m_LocalPosition: {x: 34.329803, y: 6.8915224, z: 18.13562}
204 | m_LocalScale: {x: 1, y: 1, z: 1}
205 | m_ConstrainProportionsScale: 0
206 | m_Children: []
207 | m_Father: {fileID: 0}
208 | m_RootOrder: 0
209 | m_LocalEulerAnglesHint: {x: 0, y: -180, z: 0}
210 | --- !u!1 &43853249
211 | GameObject:
212 | m_ObjectHideFlags: 0
213 | m_CorrespondingSourceObject: {fileID: 0}
214 | m_PrefabInstance: {fileID: 0}
215 | m_PrefabAsset: {fileID: 0}
216 | serializedVersion: 6
217 | m_Component:
218 | - component: {fileID: 43853254}
219 | - component: {fileID: 43853251}
220 | - component: {fileID: 43853255}
221 | m_Layer: 0
222 | m_Name: Health Zone
223 | m_TagString: Untagged
224 | m_Icon: {fileID: 0}
225 | m_NavMeshLayer: 0
226 | m_StaticEditorFlags: 0
227 | m_IsActive: 0
228 | --- !u!65 &43853251
229 | BoxCollider:
230 | m_ObjectHideFlags: 0
231 | m_CorrespondingSourceObject: {fileID: 0}
232 | m_PrefabInstance: {fileID: 0}
233 | m_PrefabAsset: {fileID: 0}
234 | m_GameObject: {fileID: 43853249}
235 | m_Material: {fileID: 0}
236 | m_IsTrigger: 0
237 | m_Enabled: 1
238 | serializedVersion: 2
239 | m_Size: {x: 1, y: 1, z: 1}
240 | m_Center: {x: 0, y: 0, z: 0}
241 | --- !u!4 &43853254
242 | Transform:
243 | m_ObjectHideFlags: 0
244 | m_CorrespondingSourceObject: {fileID: 0}
245 | m_PrefabInstance: {fileID: 0}
246 | m_PrefabAsset: {fileID: 0}
247 | m_GameObject: {fileID: 43853249}
248 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
249 | m_LocalPosition: {x: 26.35, y: 0, z: 0}
250 | m_LocalScale: {x: 5, y: 1, z: 5}
251 | m_ConstrainProportionsScale: 0
252 | m_Children: []
253 | m_Father: {fileID: 0}
254 | m_RootOrder: 6
255 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
256 | --- !u!114 &43853255
257 | MonoBehaviour:
258 | m_ObjectHideFlags: 0
259 | m_CorrespondingSourceObject: {fileID: 0}
260 | m_PrefabInstance: {fileID: 0}
261 | m_PrefabAsset: {fileID: 0}
262 | m_GameObject: {fileID: 43853249}
263 | m_Enabled: 1
264 | m_EditorHideFlags: 0
265 | m_Script: {fileID: 11500000, guid: 19cd1953f62ae9040b5319c19cf3e9ca, type: 3}
266 | m_Name:
267 | m_EditorClassIdentifier:
268 | isTrigger: 1
269 | maxCollisions: 50
270 | requiredTags: []
271 | ignoredColliders: []
272 | enterEvent:
273 | m_PersistentCalls:
274 | m_Calls:
275 | - m_Target: {fileID: 43853255}
276 | m_TargetAssemblyTypeName: Kitbashery.Gameplay.HealthZone, Assembly-CSharp
277 | m_MethodName: RegisterTarget
278 | m_Mode: 1
279 | m_Arguments:
280 | m_ObjectArgument: {fileID: 0}
281 | m_ObjectArgumentAssemblyTypeName:
282 | m_IntArgument: 0
283 | m_FloatArgument: 0
284 | m_StringArgument:
285 | m_BoolArgument: 0
286 | m_CallState: 2
287 | exitEvent:
288 | m_PersistentCalls:
289 | m_Calls:
290 | - m_Target: {fileID: 43853255}
291 | m_TargetAssemblyTypeName: Kitbashery.Gameplay.HealthZone, Assembly-CSharp
292 | m_MethodName: UnregisterTarget
293 | m_Mode: 1
294 | m_Arguments:
295 | m_ObjectArgument: {fileID: 0}
296 | m_ObjectArgumentAssemblyTypeName:
297 | m_IntArgument: 0
298 | m_FloatArgument: 0
299 | m_StringArgument:
300 | m_BoolArgument: 0
301 | m_CallState: 2
302 | stayEvent:
303 | m_PersistentCalls:
304 | m_Calls:
305 | - m_Target: {fileID: 43853255}
306 | m_TargetAssemblyTypeName: Kitbashery.Gameplay.HealthZone, Assembly-CSharp
307 | m_MethodName: ModifyHealth
308 | m_Mode: 1
309 | m_Arguments:
310 | m_ObjectArgument: {fileID: 0}
311 | m_ObjectArgumentAssemblyTypeName:
312 | m_IntArgument: 0
313 | m_FloatArgument: 0
314 | m_StringArgument:
315 | m_BoolArgument: 0
316 | m_CallState: 2
317 | lastContact: {fileID: 0}
318 | colliders: []
319 | eventCollider: {fileID: 0}
320 | modifier: 0
321 | amount: 50
322 | targetHP: []
323 | lastHealth: {fileID: 0}
324 | --- !u!1 &70724180
325 | GameObject:
326 | m_ObjectHideFlags: 0
327 | m_CorrespondingSourceObject: {fileID: 0}
328 | m_PrefabInstance: {fileID: 0}
329 | m_PrefabAsset: {fileID: 0}
330 | serializedVersion: 6
331 | m_Component:
332 | - component: {fileID: 70724182}
333 | - component: {fileID: 70724181}
334 | m_Layer: 0
335 | m_Name: Activation Events
336 | m_TagString: Untagged
337 | m_Icon: {fileID: 0}
338 | m_NavMeshLayer: 0
339 | m_StaticEditorFlags: 0
340 | m_IsActive: 1
341 | --- !u!114 &70724181
342 | MonoBehaviour:
343 | m_ObjectHideFlags: 0
344 | m_CorrespondingSourceObject: {fileID: 0}
345 | m_PrefabInstance: {fileID: 0}
346 | m_PrefabAsset: {fileID: 0}
347 | m_GameObject: {fileID: 70724180}
348 | m_Enabled: 1
349 | m_EditorHideFlags: 0
350 | m_Script: {fileID: 11500000, guid: a36c92081ad09b94593c7184174249da, type: 3}
351 | m_Name:
352 | m_EditorClassIdentifier:
353 | onAwake:
354 | m_PersistentCalls:
355 | m_Calls: []
356 | onStart:
357 | m_PersistentCalls:
358 | m_Calls:
359 | - m_Target: {fileID: 1799891581}
360 | m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
361 | m_MethodName: SetActive
362 | m_Mode: 6
363 | m_Arguments:
364 | m_ObjectArgument: {fileID: 0}
365 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
366 | m_IntArgument: 0
367 | m_FloatArgument: 0
368 | m_StringArgument:
369 | m_BoolArgument: 1
370 | m_CallState: 2
371 | - m_Target: {fileID: 163759811}
372 | m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
373 | m_MethodName: SetActive
374 | m_Mode: 6
375 | m_Arguments:
376 | m_ObjectArgument: {fileID: 0}
377 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
378 | m_IntArgument: 0
379 | m_FloatArgument: 0
380 | m_StringArgument:
381 | m_BoolArgument: 1
382 | m_CallState: 2
383 | - m_Target: {fileID: 43853249}
384 | m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
385 | m_MethodName: SetActive
386 | m_Mode: 6
387 | m_Arguments:
388 | m_ObjectArgument: {fileID: 0}
389 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
390 | m_IntArgument: 0
391 | m_FloatArgument: 0
392 | m_StringArgument:
393 | m_BoolArgument: 1
394 | m_CallState: 2
395 | - m_Target: {fileID: 1394021188}
396 | m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
397 | m_MethodName: SetActive
398 | m_Mode: 6
399 | m_Arguments:
400 | m_ObjectArgument: {fileID: 0}
401 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
402 | m_IntArgument: 0
403 | m_FloatArgument: 0
404 | m_StringArgument:
405 | m_BoolArgument: 1
406 | m_CallState: 2
407 | - m_Target: {fileID: 751761738}
408 | m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
409 | m_MethodName: SetActive
410 | m_Mode: 6
411 | m_Arguments:
412 | m_ObjectArgument: {fileID: 0}
413 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
414 | m_IntArgument: 0
415 | m_FloatArgument: 0
416 | m_StringArgument:
417 | m_BoolArgument: 1
418 | m_CallState: 2
419 | - m_Target: {fileID: 2065983280}
420 | m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
421 | m_MethodName: SetActive
422 | m_Mode: 6
423 | m_Arguments:
424 | m_ObjectArgument: {fileID: 0}
425 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
426 | m_IntArgument: 0
427 | m_FloatArgument: 0
428 | m_StringArgument:
429 | m_BoolArgument: 1
430 | m_CallState: 2
431 | onEnable:
432 | m_PersistentCalls:
433 | m_Calls: []
434 | onDisable:
435 | m_PersistentCalls:
436 | m_Calls: []
437 | onDestroy:
438 | m_PersistentCalls:
439 | m_Calls: []
440 | --- !u!4 &70724182
441 | Transform:
442 | m_ObjectHideFlags: 0
443 | m_CorrespondingSourceObject: {fileID: 0}
444 | m_PrefabInstance: {fileID: 0}
445 | m_PrefabAsset: {fileID: 0}
446 | m_GameObject: {fileID: 70724180}
447 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
448 | m_LocalPosition: {x: 25.196363, y: 4.657934, z: -1.9020252}
449 | m_LocalScale: {x: 1, y: 1, z: 1}
450 | m_ConstrainProportionsScale: 0
451 | m_Children: []
452 | m_Father: {fileID: 0}
453 | m_RootOrder: 3
454 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
455 | --- !u!1 &137633614
456 | GameObject:
457 | m_ObjectHideFlags: 0
458 | m_CorrespondingSourceObject: {fileID: 0}
459 | m_PrefabInstance: {fileID: 0}
460 | m_PrefabAsset: {fileID: 0}
461 | serializedVersion: 6
462 | m_Component:
463 | - component: {fileID: 137633618}
464 | - component: {fileID: 137633617}
465 | - component: {fileID: 137633616}
466 | - component: {fileID: 137633615}
467 | m_Layer: 0
468 | m_Name: Cube
469 | m_TagString: Untagged
470 | m_Icon: {fileID: 0}
471 | m_NavMeshLayer: 0
472 | m_StaticEditorFlags: 0
473 | m_IsActive: 1
474 | --- !u!65 &137633615
475 | BoxCollider:
476 | m_ObjectHideFlags: 0
477 | m_CorrespondingSourceObject: {fileID: 0}
478 | m_PrefabInstance: {fileID: 0}
479 | m_PrefabAsset: {fileID: 0}
480 | m_GameObject: {fileID: 137633614}
481 | m_Material: {fileID: 0}
482 | m_IsTrigger: 0
483 | m_Enabled: 1
484 | serializedVersion: 2
485 | m_Size: {x: 1, y: 1, z: 1}
486 | m_Center: {x: 0, y: 0, z: 0}
487 | --- !u!23 &137633616
488 | MeshRenderer:
489 | m_ObjectHideFlags: 0
490 | m_CorrespondingSourceObject: {fileID: 0}
491 | m_PrefabInstance: {fileID: 0}
492 | m_PrefabAsset: {fileID: 0}
493 | m_GameObject: {fileID: 137633614}
494 | m_Enabled: 1
495 | m_CastShadows: 0
496 | m_ReceiveShadows: 1
497 | m_DynamicOccludee: 1
498 | m_StaticShadowCaster: 0
499 | m_MotionVectors: 1
500 | m_LightProbeUsage: 1
501 | m_ReflectionProbeUsage: 1
502 | m_RayTracingMode: 2
503 | m_RayTraceProcedural: 0
504 | m_RenderingLayerMask: 1
505 | m_RendererPriority: 0
506 | m_Materials:
507 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
508 | m_StaticBatchInfo:
509 | firstSubMesh: 0
510 | subMeshCount: 0
511 | m_StaticBatchRoot: {fileID: 0}
512 | m_ProbeAnchor: {fileID: 0}
513 | m_LightProbeVolumeOverride: {fileID: 0}
514 | m_ScaleInLightmap: 1
515 | m_ReceiveGI: 1
516 | m_PreserveUVs: 0
517 | m_IgnoreNormalsForChartDetection: 0
518 | m_ImportantGI: 0
519 | m_StitchLightmapSeams: 1
520 | m_SelectedEditorRenderState: 3
521 | m_MinimumChartSize: 4
522 | m_AutoUVMaxDistance: 0.5
523 | m_AutoUVMaxAngle: 89
524 | m_LightmapParameters: {fileID: 0}
525 | m_SortingLayerID: 0
526 | m_SortingLayer: 0
527 | m_SortingOrder: 0
528 | m_AdditionalVertexStreams: {fileID: 0}
529 | --- !u!33 &137633617
530 | MeshFilter:
531 | m_ObjectHideFlags: 0
532 | m_CorrespondingSourceObject: {fileID: 0}
533 | m_PrefabInstance: {fileID: 0}
534 | m_PrefabAsset: {fileID: 0}
535 | m_GameObject: {fileID: 137633614}
536 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
537 | --- !u!4 &137633618
538 | Transform:
539 | m_ObjectHideFlags: 0
540 | m_CorrespondingSourceObject: {fileID: 0}
541 | m_PrefabInstance: {fileID: 0}
542 | m_PrefabAsset: {fileID: 0}
543 | m_GameObject: {fileID: 137633614}
544 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
545 | m_LocalPosition: {x: -27.888596, y: -1.3829961, z: -8.741816}
546 | m_LocalScale: {x: 100, y: 10, z: 1}
547 | m_ConstrainProportionsScale: 0
548 | m_Children: []
549 | m_Father: {fileID: 2059835720}
550 | m_RootOrder: 1
551 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
552 | --- !u!1 &163759811
553 | GameObject:
554 | m_ObjectHideFlags: 0
555 | m_CorrespondingSourceObject: {fileID: 0}
556 | m_PrefabInstance: {fileID: 0}
557 | m_PrefabAsset: {fileID: 0}
558 | serializedVersion: 6
559 | m_Component:
560 | - component: {fileID: 163759813}
561 | - component: {fileID: 163759812}
562 | m_Layer: 0
563 | m_Name: Health
564 | m_TagString: Untagged
565 | m_Icon: {fileID: 0}
566 | m_NavMeshLayer: 0
567 | m_StaticEditorFlags: 0
568 | m_IsActive: 0
569 | --- !u!114 &163759812
570 | MonoBehaviour:
571 | m_ObjectHideFlags: 0
572 | m_CorrespondingSourceObject: {fileID: 0}
573 | m_PrefabInstance: {fileID: 0}
574 | m_PrefabAsset: {fileID: 0}
575 | m_GameObject: {fileID: 163759811}
576 | m_Enabled: 1
577 | m_EditorHideFlags: 0
578 | m_Script: {fileID: 11500000, guid: bba5fb71024046749af5e8b7a9b5caf1, type: 3}
579 | m_Name:
580 | m_EditorClassIdentifier:
581 | k__BackingField: 0
582 | bonusHealth: {fileID: 0}
583 | hitPoints: 100
584 | k__BackingField: 0
585 | k__BackingField: 0
586 | regenPoints: 1
587 | regenRate: 0.1
588 | onReceivedDamage:
589 | m_PersistentCalls:
590 | m_Calls: []
591 | onHealed:
592 | m_PersistentCalls:
593 | m_Calls: []
594 | onDead:
595 | m_PersistentCalls:
596 | m_Calls: []
597 | --- !u!4 &163759813
598 | Transform:
599 | m_ObjectHideFlags: 0
600 | m_CorrespondingSourceObject: {fileID: 0}
601 | m_PrefabInstance: {fileID: 0}
602 | m_PrefabAsset: {fileID: 0}
603 | m_GameObject: {fileID: 163759811}
604 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
605 | m_LocalPosition: {x: 25.196363, y: 4.657934, z: -1.9020252}
606 | m_LocalScale: {x: 1, y: 1, z: 1}
607 | m_ConstrainProportionsScale: 0
608 | m_Children: []
609 | m_Father: {fileID: 0}
610 | m_RootOrder: 5
611 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
612 | --- !u!1 &298043554
613 | GameObject:
614 | m_ObjectHideFlags: 0
615 | m_CorrespondingSourceObject: {fileID: 0}
616 | m_PrefabInstance: {fileID: 0}
617 | m_PrefabAsset: {fileID: 0}
618 | serializedVersion: 6
619 | m_Component:
620 | - component: {fileID: 298043558}
621 | - component: {fileID: 298043557}
622 | - component: {fileID: 298043556}
623 | - component: {fileID: 298043555}
624 | m_Layer: 0
625 | m_Name: Force Field
626 | m_TagString: Untagged
627 | m_Icon: {fileID: 0}
628 | m_NavMeshLayer: 0
629 | m_StaticEditorFlags: 0
630 | m_IsActive: 1
631 | --- !u!114 &298043555
632 | MonoBehaviour:
633 | m_ObjectHideFlags: 0
634 | m_CorrespondingSourceObject: {fileID: 0}
635 | m_PrefabInstance: {fileID: 0}
636 | m_PrefabAsset: {fileID: 0}
637 | m_GameObject: {fileID: 298043554}
638 | m_Enabled: 1
639 | m_EditorHideFlags: 0
640 | m_Script: {fileID: 11500000, guid: 3ec71563c819ad94e91452ec834dbc36, type: 3}
641 | m_Name:
642 | m_EditorClassIdentifier:
643 | isTrigger: 1
644 | maxCollisions: 50
645 | requiredTags: []
646 | ignoredColliders: []
647 | enterEvent:
648 | m_PersistentCalls:
649 | m_Calls:
650 | - m_Target: {fileID: 298043555}
651 | m_TargetAssemblyTypeName: Kitbashery.Gameplay.ForceField, Assembly-CSharp
652 | m_MethodName: RegisterRigidbody
653 | m_Mode: 1
654 | m_Arguments:
655 | m_ObjectArgument: {fileID: 0}
656 | m_ObjectArgumentAssemblyTypeName:
657 | m_IntArgument: 0
658 | m_FloatArgument: 0
659 | m_StringArgument:
660 | m_BoolArgument: 0
661 | m_CallState: 2
662 | exitEvent:
663 | m_PersistentCalls:
664 | m_Calls:
665 | - m_Target: {fileID: 298043555}
666 | m_TargetAssemblyTypeName: Kitbashery.Gameplay.ForceField, Assembly-CSharp
667 | m_MethodName: UnregisterRigidbody
668 | m_Mode: 1
669 | m_Arguments:
670 | m_ObjectArgument: {fileID: 0}
671 | m_ObjectArgumentAssemblyTypeName:
672 | m_IntArgument: 0
673 | m_FloatArgument: 0
674 | m_StringArgument:
675 | m_BoolArgument: 0
676 | m_CallState: 2
677 | stayEvent:
678 | m_PersistentCalls:
679 | m_Calls: []
680 | lastContact: {fileID: 0}
681 | colliders: []
682 | eventCollider: {fileID: 0}
683 | rigidbodies: []
684 | mode: 0
685 | force: 500
686 | forceDirection: {x: 0, y: 0, z: 1}
687 | wind: {fileID: 298043557}
688 | --- !u!65 &298043556
689 | BoxCollider:
690 | m_ObjectHideFlags: 0
691 | m_CorrespondingSourceObject: {fileID: 0}
692 | m_PrefabInstance: {fileID: 0}
693 | m_PrefabAsset: {fileID: 0}
694 | m_GameObject: {fileID: 298043554}
695 | m_Material: {fileID: 0}
696 | m_IsTrigger: 1
697 | m_Enabled: 1
698 | serializedVersion: 2
699 | m_Size: {x: 30, y: 15, z: 15}
700 | m_Center: {x: 0, y: 0, z: 0}
701 | --- !u!182 &298043557
702 | WindZone:
703 | m_ObjectHideFlags: 0
704 | m_CorrespondingSourceObject: {fileID: 0}
705 | m_PrefabInstance: {fileID: 0}
706 | m_PrefabAsset: {fileID: 0}
707 | m_GameObject: {fileID: 298043554}
708 | m_Enabled: 1
709 | m_Mode: 0
710 | m_Radius: 20
711 | m_WindMain: 1
712 | m_WindTurbulence: 1
713 | m_WindPulseMagnitude: 0.5
714 | m_WindPulseFrequency: 0.01
715 | --- !u!4 &298043558
716 | Transform:
717 | m_ObjectHideFlags: 0
718 | m_CorrespondingSourceObject: {fileID: 0}
719 | m_PrefabInstance: {fileID: 0}
720 | m_PrefabAsset: {fileID: 0}
721 | m_GameObject: {fileID: 298043554}
722 | m_LocalRotation: {x: -0, y: -0.7782817, z: -0, w: 0.6279153}
723 | m_LocalPosition: {x: 19.46, y: 6.3, z: 7.72}
724 | m_LocalScale: {x: 1, y: 1, z: 1}
725 | m_ConstrainProportionsScale: 0
726 | m_Children: []
727 | m_Father: {fileID: 0}
728 | m_RootOrder: 10
729 | m_LocalEulerAnglesHint: {x: 0, y: -102.207, z: 0}
730 | --- !u!1 &403969857
731 | GameObject:
732 | m_ObjectHideFlags: 0
733 | m_CorrespondingSourceObject: {fileID: 0}
734 | m_PrefabInstance: {fileID: 0}
735 | m_PrefabAsset: {fileID: 0}
736 | serializedVersion: 6
737 | m_Component:
738 | - component: {fileID: 403969860}
739 | - component: {fileID: 403969859}
740 | - component: {fileID: 403969858}
741 | m_Layer: 5
742 | m_Name: FPS Counter
743 | m_TagString: Untagged
744 | m_Icon: {fileID: 0}
745 | m_NavMeshLayer: 0
746 | m_StaticEditorFlags: 0
747 | m_IsActive: 1
748 | --- !u!114 &403969858
749 | MonoBehaviour:
750 | m_ObjectHideFlags: 0
751 | m_CorrespondingSourceObject: {fileID: 0}
752 | m_PrefabInstance: {fileID: 0}
753 | m_PrefabAsset: {fileID: 0}
754 | m_GameObject: {fileID: 403969857}
755 | m_Enabled: 1
756 | m_EditorHideFlags: 0
757 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
758 | m_Name:
759 | m_EditorClassIdentifier:
760 | m_Material: {fileID: 0}
761 | m_Color: {r: 0, g: 0, b: 0, a: 1}
762 | m_RaycastTarget: 1
763 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
764 | m_Maskable: 1
765 | m_OnCullStateChanged:
766 | m_PersistentCalls:
767 | m_Calls: []
768 | m_FontData:
769 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
770 | m_FontSize: 14
771 | m_FontStyle: 0
772 | m_BestFit: 0
773 | m_MinSize: 10
774 | m_MaxSize: 40
775 | m_Alignment: 5
776 | m_AlignByGeometry: 0
777 | m_RichText: 1
778 | m_HorizontalOverflow: 0
779 | m_VerticalOverflow: 0
780 | m_LineSpacing: 1
781 | m_Text: 'FPS: '
782 | --- !u!222 &403969859
783 | CanvasRenderer:
784 | m_ObjectHideFlags: 0
785 | m_CorrespondingSourceObject: {fileID: 0}
786 | m_PrefabInstance: {fileID: 0}
787 | m_PrefabAsset: {fileID: 0}
788 | m_GameObject: {fileID: 403969857}
789 | m_CullTransparentMesh: 1
790 | --- !u!224 &403969860
791 | RectTransform:
792 | m_ObjectHideFlags: 0
793 | m_CorrespondingSourceObject: {fileID: 0}
794 | m_PrefabInstance: {fileID: 0}
795 | m_PrefabAsset: {fileID: 0}
796 | m_GameObject: {fileID: 403969857}
797 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
798 | m_LocalPosition: {x: 0, y: 0, z: 0}
799 | m_LocalScale: {x: 1, y: 1, z: 1}
800 | m_ConstrainProportionsScale: 0
801 | m_Children: []
802 | m_Father: {fileID: 1277680943}
803 | m_RootOrder: 1
804 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
805 | m_AnchorMin: {x: 1, y: 0}
806 | m_AnchorMax: {x: 1, y: 0}
807 | m_AnchoredPosition: {x: -63.0186, y: 64.40802}
808 | m_SizeDelta: {x: 126.0372, y: 128.816}
809 | m_Pivot: {x: 0.5, y: 0.5}
810 | --- !u!1 &751761738
811 | GameObject:
812 | m_ObjectHideFlags: 0
813 | m_CorrespondingSourceObject: {fileID: 0}
814 | m_PrefabInstance: {fileID: 0}
815 | m_PrefabAsset: {fileID: 0}
816 | serializedVersion: 6
817 | m_Component:
818 | - component: {fileID: 751761742}
819 | - component: {fileID: 751761744}
820 | - component: {fileID: 751761745}
821 | - component: {fileID: 751761740}
822 | - component: {fileID: 751761747}
823 | - component: {fileID: 751761746}
824 | m_Layer: 0
825 | m_Name: Projectile
826 | m_TagString: Untagged
827 | m_Icon: {fileID: 0}
828 | m_NavMeshLayer: 0
829 | m_StaticEditorFlags: 0
830 | m_IsActive: 0
831 | --- !u!54 &751761740
832 | Rigidbody:
833 | m_ObjectHideFlags: 0
834 | m_CorrespondingSourceObject: {fileID: 0}
835 | m_PrefabInstance: {fileID: 0}
836 | m_PrefabAsset: {fileID: 0}
837 | m_GameObject: {fileID: 751761738}
838 | serializedVersion: 2
839 | m_Mass: 1
840 | m_Drag: 0
841 | m_AngularDrag: 0.05
842 | m_UseGravity: 1
843 | m_IsKinematic: 0
844 | m_Interpolate: 0
845 | m_Constraints: 0
846 | m_CollisionDetection: 0
847 | --- !u!4 &751761742
848 | Transform:
849 | m_ObjectHideFlags: 0
850 | m_CorrespondingSourceObject: {fileID: 0}
851 | m_PrefabInstance: {fileID: 0}
852 | m_PrefabAsset: {fileID: 0}
853 | m_GameObject: {fileID: 751761738}
854 | m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
855 | m_LocalPosition: {x: 17.79, y: 4.657934, z: 0.14}
856 | m_LocalScale: {x: 1, y: 1, z: 1}
857 | m_ConstrainProportionsScale: 0
858 | m_Children: []
859 | m_Father: {fileID: 0}
860 | m_RootOrder: 8
861 | m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
862 | --- !u!33 &751761744
863 | MeshFilter:
864 | m_ObjectHideFlags: 0
865 | m_CorrespondingSourceObject: {fileID: 0}
866 | m_PrefabInstance: {fileID: 0}
867 | m_PrefabAsset: {fileID: 0}
868 | m_GameObject: {fileID: 751761738}
869 | m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
870 | --- !u!23 &751761745
871 | MeshRenderer:
872 | m_ObjectHideFlags: 0
873 | m_CorrespondingSourceObject: {fileID: 0}
874 | m_PrefabInstance: {fileID: 0}
875 | m_PrefabAsset: {fileID: 0}
876 | m_GameObject: {fileID: 751761738}
877 | m_Enabled: 1
878 | m_CastShadows: 1
879 | m_ReceiveShadows: 1
880 | m_DynamicOccludee: 1
881 | m_StaticShadowCaster: 0
882 | m_MotionVectors: 1
883 | m_LightProbeUsage: 1
884 | m_ReflectionProbeUsage: 1
885 | m_RayTracingMode: 2
886 | m_RayTraceProcedural: 0
887 | m_RenderingLayerMask: 1
888 | m_RendererPriority: 0
889 | m_Materials:
890 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
891 | m_StaticBatchInfo:
892 | firstSubMesh: 0
893 | subMeshCount: 0
894 | m_StaticBatchRoot: {fileID: 0}
895 | m_ProbeAnchor: {fileID: 0}
896 | m_LightProbeVolumeOverride: {fileID: 0}
897 | m_ScaleInLightmap: 1
898 | m_ReceiveGI: 1
899 | m_PreserveUVs: 0
900 | m_IgnoreNormalsForChartDetection: 0
901 | m_ImportantGI: 0
902 | m_StitchLightmapSeams: 1
903 | m_SelectedEditorRenderState: 3
904 | m_MinimumChartSize: 4
905 | m_AutoUVMaxDistance: 0.5
906 | m_AutoUVMaxAngle: 89
907 | m_LightmapParameters: {fileID: 0}
908 | m_SortingLayerID: 0
909 | m_SortingLayer: 0
910 | m_SortingOrder: 0
911 | m_AdditionalVertexStreams: {fileID: 0}
912 | --- !u!114 &751761746
913 | MonoBehaviour:
914 | m_ObjectHideFlags: 0
915 | m_CorrespondingSourceObject: {fileID: 0}
916 | m_PrefabInstance: {fileID: 0}
917 | m_PrefabAsset: {fileID: 0}
918 | m_GameObject: {fileID: 751761738}
919 | m_Enabled: 1
920 | m_EditorHideFlags: 0
921 | m_Script: {fileID: 11500000, guid: 49df814edf10eda419221794ab9a80c1, type: 3}
922 | m_Name:
923 | m_EditorClassIdentifier:
924 | isTrigger: 1
925 | maxCollisions: 50
926 | requiredTags: []
927 | ignoredColliders: []
928 | enterEvent:
929 | m_PersistentCalls:
930 | m_Calls:
931 | - m_Target: {fileID: 751761746}
932 | m_TargetAssemblyTypeName: Kitbashery.Gameplay.Projectile, Assembly-CSharp
933 | m_MethodName: Impact
934 | m_Mode: 1
935 | m_Arguments:
936 | m_ObjectArgument: {fileID: 0}
937 | m_ObjectArgumentAssemblyTypeName:
938 | m_IntArgument: 0
939 | m_FloatArgument: 0
940 | m_StringArgument:
941 | m_BoolArgument: 0
942 | m_CallState: 2
943 | exitEvent:
944 | m_PersistentCalls:
945 | m_Calls: []
946 | stayEvent:
947 | m_PersistentCalls:
948 | m_Calls: []
949 | lastContact: {fileID: 0}
950 | colliders: []
951 | eventCollider: {fileID: 0}
952 | rigid: {fileID: 751761740}
953 | applyForceOnImpact: 1
954 | impactForce: 1
955 | velocity: 50
956 | modifyHealthOnImpact: 0
957 | healthEffect:
958 | name:
959 | modifier: 0
960 | amount: 1
961 | times: 1
962 | interval: 0
963 | disableOnImpact: 1
964 | ricochets: 0
965 | onRicochet:
966 | m_PersistentCalls:
967 | m_Calls: []
968 | useLifeTime: 1
969 | lifeTime: 10
970 | seekTarget: 0
971 | target: {fileID: 0}
972 | targetMode: 0
973 | layerMask:
974 | serializedVersion: 2
975 | m_Bits: 0
976 | triggerInteraction: 1
977 | targetTag:
978 | searchRange: 10
979 | seekSpeed: 10
980 | --- !u!135 &751761747
981 | SphereCollider:
982 | m_ObjectHideFlags: 0
983 | m_CorrespondingSourceObject: {fileID: 0}
984 | m_PrefabInstance: {fileID: 0}
985 | m_PrefabAsset: {fileID: 0}
986 | m_GameObject: {fileID: 751761738}
987 | m_Material: {fileID: 0}
988 | m_IsTrigger: 0
989 | m_Enabled: 1
990 | serializedVersion: 2
991 | m_Radius: 0.5000001
992 | m_Center: {x: 0, y: 0, z: 0}
993 | --- !u!1 &1277680942
994 | GameObject:
995 | m_ObjectHideFlags: 0
996 | m_CorrespondingSourceObject: {fileID: 0}
997 | m_PrefabInstance: {fileID: 0}
998 | m_PrefabAsset: {fileID: 0}
999 | serializedVersion: 6
1000 | m_Component:
1001 | - component: {fileID: 1277680943}
1002 | - component: {fileID: 1277680947}
1003 | - component: {fileID: 1277680946}
1004 | - component: {fileID: 1277680945}
1005 | - component: {fileID: 1277680944}
1006 | m_Layer: 5
1007 | m_Name: Canvas
1008 | m_TagString: Untagged
1009 | m_Icon: {fileID: 0}
1010 | m_NavMeshLayer: 0
1011 | m_StaticEditorFlags: 0
1012 | m_IsActive: 1
1013 | --- !u!224 &1277680943
1014 | RectTransform:
1015 | m_ObjectHideFlags: 0
1016 | m_CorrespondingSourceObject: {fileID: 0}
1017 | m_PrefabInstance: {fileID: 0}
1018 | m_PrefabAsset: {fileID: 0}
1019 | m_GameObject: {fileID: 1277680942}
1020 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
1021 | m_LocalPosition: {x: 0, y: 0, z: 0}
1022 | m_LocalScale: {x: 0, y: 0, z: 0}
1023 | m_ConstrainProportionsScale: 0
1024 | m_Children:
1025 | - {fileID: 1655496403}
1026 | - {fileID: 403969860}
1027 | m_Father: {fileID: 2059835720}
1028 | m_RootOrder: 3
1029 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1030 | m_AnchorMin: {x: 0, y: 0}
1031 | m_AnchorMax: {x: 0, y: 0}
1032 | m_AnchoredPosition: {x: 0, y: 0}
1033 | m_SizeDelta: {x: 0, y: 0}
1034 | m_Pivot: {x: 0, y: 0}
1035 | --- !u!222 &1277680944
1036 | CanvasRenderer:
1037 | m_ObjectHideFlags: 0
1038 | m_CorrespondingSourceObject: {fileID: 0}
1039 | m_PrefabInstance: {fileID: 0}
1040 | m_PrefabAsset: {fileID: 0}
1041 | m_GameObject: {fileID: 1277680942}
1042 | m_CullTransparentMesh: 1
1043 | --- !u!114 &1277680945
1044 | MonoBehaviour:
1045 | m_ObjectHideFlags: 0
1046 | m_CorrespondingSourceObject: {fileID: 0}
1047 | m_PrefabInstance: {fileID: 0}
1048 | m_PrefabAsset: {fileID: 0}
1049 | m_GameObject: {fileID: 1277680942}
1050 | m_Enabled: 1
1051 | m_EditorHideFlags: 0
1052 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
1053 | m_Name:
1054 | m_EditorClassIdentifier:
1055 | m_IgnoreReversedGraphics: 1
1056 | m_BlockingObjects: 0
1057 | m_BlockingMask:
1058 | serializedVersion: 2
1059 | m_Bits: 4294967295
1060 | --- !u!114 &1277680946
1061 | MonoBehaviour:
1062 | m_ObjectHideFlags: 0
1063 | m_CorrespondingSourceObject: {fileID: 0}
1064 | m_PrefabInstance: {fileID: 0}
1065 | m_PrefabAsset: {fileID: 0}
1066 | m_GameObject: {fileID: 1277680942}
1067 | m_Enabled: 1
1068 | m_EditorHideFlags: 0
1069 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
1070 | m_Name:
1071 | m_EditorClassIdentifier:
1072 | m_UiScaleMode: 1
1073 | m_ReferencePixelsPerUnit: 100
1074 | m_ScaleFactor: 1
1075 | m_ReferenceResolution: {x: 800, y: 600}
1076 | m_ScreenMatchMode: 0
1077 | m_MatchWidthOrHeight: 0.5
1078 | m_PhysicalUnit: 3
1079 | m_FallbackScreenDPI: 96
1080 | m_DefaultSpriteDPI: 96
1081 | m_DynamicPixelsPerUnit: 1
1082 | m_PresetInfoIsWorld: 0
1083 | --- !u!223 &1277680947
1084 | Canvas:
1085 | m_ObjectHideFlags: 0
1086 | m_CorrespondingSourceObject: {fileID: 0}
1087 | m_PrefabInstance: {fileID: 0}
1088 | m_PrefabAsset: {fileID: 0}
1089 | m_GameObject: {fileID: 1277680942}
1090 | m_Enabled: 1
1091 | serializedVersion: 3
1092 | m_RenderMode: 0
1093 | m_Camera: {fileID: 0}
1094 | m_PlaneDistance: 100
1095 | m_PixelPerfect: 0
1096 | m_ReceivesEvents: 1
1097 | m_OverrideSorting: 0
1098 | m_OverridePixelPerfect: 0
1099 | m_SortingBucketNormalizedSize: 0
1100 | m_AdditionalShaderChannelsFlag: 0
1101 | m_SortingLayerID: 0
1102 | m_SortingOrder: 0
1103 | m_TargetDisplay: 0
1104 | --- !u!1 &1394021188
1105 | GameObject:
1106 | m_ObjectHideFlags: 0
1107 | m_CorrespondingSourceObject: {fileID: 0}
1108 | m_PrefabInstance: {fileID: 0}
1109 | m_PrefabAsset: {fileID: 0}
1110 | serializedVersion: 6
1111 | m_Component:
1112 | - component: {fileID: 1394021190}
1113 | - component: {fileID: 1394021189}
1114 | m_Layer: 0
1115 | m_Name: Object Pools
1116 | m_TagString: Untagged
1117 | m_Icon: {fileID: 0}
1118 | m_NavMeshLayer: 0
1119 | m_StaticEditorFlags: 0
1120 | m_IsActive: 0
1121 | --- !u!114 &1394021189
1122 | MonoBehaviour:
1123 | m_ObjectHideFlags: 0
1124 | m_CorrespondingSourceObject: {fileID: 0}
1125 | m_PrefabInstance: {fileID: 0}
1126 | m_PrefabAsset: {fileID: 0}
1127 | m_GameObject: {fileID: 1394021188}
1128 | m_Enabled: 1
1129 | m_EditorHideFlags: 0
1130 | m_Script: {fileID: 11500000, guid: 0106a81881bee9248bb49427003b5364, type: 3}
1131 | m_Name:
1132 | m_EditorClassIdentifier:
1133 | pools:
1134 | - prefab: {fileID: 8584135303632376971, guid: 4a4d317d41134a94f8ca594bd9c5f6f3, type: 3}
1135 | amount: 50
1136 | hideFlags: 0
1137 | sequencialNaming: 1
1138 | pooledObjects: []
1139 | --- !u!4 &1394021190
1140 | Transform:
1141 | m_ObjectHideFlags: 0
1142 | m_CorrespondingSourceObject: {fileID: 0}
1143 | m_PrefabInstance: {fileID: 0}
1144 | m_PrefabAsset: {fileID: 0}
1145 | m_GameObject: {fileID: 1394021188}
1146 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
1147 | m_LocalPosition: {x: 0, y: 0, z: 0}
1148 | m_LocalScale: {x: 1, y: 1, z: 1}
1149 | m_ConstrainProportionsScale: 0
1150 | m_Children: []
1151 | m_Father: {fileID: 0}
1152 | m_RootOrder: 7
1153 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1154 | --- !u!1 &1402257230
1155 | GameObject:
1156 | m_ObjectHideFlags: 0
1157 | m_CorrespondingSourceObject: {fileID: 0}
1158 | m_PrefabInstance: {fileID: 0}
1159 | m_PrefabAsset: {fileID: 0}
1160 | serializedVersion: 6
1161 | m_Component:
1162 | - component: {fileID: 1402257232}
1163 | - component: {fileID: 1402257231}
1164 | m_Layer: 0
1165 | m_Name: Directional Light
1166 | m_TagString: Untagged
1167 | m_Icon: {fileID: 0}
1168 | m_NavMeshLayer: 0
1169 | m_StaticEditorFlags: 0
1170 | m_IsActive: 1
1171 | --- !u!108 &1402257231
1172 | Light:
1173 | m_ObjectHideFlags: 0
1174 | m_CorrespondingSourceObject: {fileID: 0}
1175 | m_PrefabInstance: {fileID: 0}
1176 | m_PrefabAsset: {fileID: 0}
1177 | m_GameObject: {fileID: 1402257230}
1178 | m_Enabled: 1
1179 | serializedVersion: 10
1180 | m_Type: 1
1181 | m_Shape: 0
1182 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
1183 | m_Intensity: 1
1184 | m_Range: 10
1185 | m_SpotAngle: 30
1186 | m_InnerSpotAngle: 21.80208
1187 | m_CookieSize: 10
1188 | m_Shadows:
1189 | m_Type: 2
1190 | m_Resolution: -1
1191 | m_CustomResolution: -1
1192 | m_Strength: 1
1193 | m_Bias: 0.05
1194 | m_NormalBias: 0.4
1195 | m_NearPlane: 0.2
1196 | m_CullingMatrixOverride:
1197 | e00: 1
1198 | e01: 0
1199 | e02: 0
1200 | e03: 0
1201 | e10: 0
1202 | e11: 1
1203 | e12: 0
1204 | e13: 0
1205 | e20: 0
1206 | e21: 0
1207 | e22: 1
1208 | e23: 0
1209 | e30: 0
1210 | e31: 0
1211 | e32: 0
1212 | e33: 1
1213 | m_UseCullingMatrixOverride: 0
1214 | m_Cookie: {fileID: 0}
1215 | m_DrawHalo: 0
1216 | m_Flare: {fileID: 0}
1217 | m_RenderMode: 0
1218 | m_CullingMask:
1219 | serializedVersion: 2
1220 | m_Bits: 4294967295
1221 | m_RenderingLayerMask: 1
1222 | m_Lightmapping: 4
1223 | m_LightShadowCasterMode: 0
1224 | m_AreaSize: {x: 1, y: 1}
1225 | m_BounceIntensity: 1
1226 | m_ColorTemperature: 6570
1227 | m_UseColorTemperature: 0
1228 | m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
1229 | m_UseBoundingSphereOverride: 0
1230 | m_UseViewFrustumForShadowCasterCull: 1
1231 | m_ShadowRadius: 0
1232 | m_ShadowAngle: 0
1233 | --- !u!4 &1402257232
1234 | Transform:
1235 | m_ObjectHideFlags: 0
1236 | m_CorrespondingSourceObject: {fileID: 0}
1237 | m_PrefabInstance: {fileID: 0}
1238 | m_PrefabAsset: {fileID: 0}
1239 | m_GameObject: {fileID: 1402257230}
1240 | m_LocalRotation: {x: 0.99904823, y: -0, z: -0, w: 0.0436195}
1241 | m_LocalPosition: {x: -27.888596, y: 14.617004, z: -4.2418156}
1242 | m_LocalScale: {x: 1, y: 1, z: 1}
1243 | m_ConstrainProportionsScale: 0
1244 | m_Children: []
1245 | m_Father: {fileID: 2059835720}
1246 | m_RootOrder: 0
1247 | m_LocalEulerAnglesHint: {x: 175, y: 0, z: 0}
1248 | --- !u!1 &1594541299
1249 | GameObject:
1250 | m_ObjectHideFlags: 0
1251 | m_CorrespondingSourceObject: {fileID: 0}
1252 | m_PrefabInstance: {fileID: 0}
1253 | m_PrefabAsset: {fileID: 0}
1254 | serializedVersion: 6
1255 | m_Component:
1256 | - component: {fileID: 1594541300}
1257 | - component: {fileID: 1594541302}
1258 | - component: {fileID: 1594541301}
1259 | m_Layer: 0
1260 | m_Name: EventSystem
1261 | m_TagString: Untagged
1262 | m_Icon: {fileID: 0}
1263 | m_NavMeshLayer: 0
1264 | m_StaticEditorFlags: 0
1265 | m_IsActive: 1
1266 | --- !u!4 &1594541300
1267 | Transform:
1268 | m_ObjectHideFlags: 0
1269 | m_CorrespondingSourceObject: {fileID: 0}
1270 | m_PrefabInstance: {fileID: 0}
1271 | m_PrefabAsset: {fileID: 0}
1272 | m_GameObject: {fileID: 1594541299}
1273 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
1274 | m_LocalPosition: {x: -27.888596, y: -5.382996, z: -4.2418156}
1275 | m_LocalScale: {x: 1, y: 1, z: 1}
1276 | m_ConstrainProportionsScale: 0
1277 | m_Children: []
1278 | m_Father: {fileID: 2059835720}
1279 | m_RootOrder: 4
1280 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1281 | --- !u!114 &1594541301
1282 | MonoBehaviour:
1283 | m_ObjectHideFlags: 0
1284 | m_CorrespondingSourceObject: {fileID: 0}
1285 | m_PrefabInstance: {fileID: 0}
1286 | m_PrefabAsset: {fileID: 0}
1287 | m_GameObject: {fileID: 1594541299}
1288 | m_Enabled: 1
1289 | m_EditorHideFlags: 0
1290 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
1291 | m_Name:
1292 | m_EditorClassIdentifier:
1293 | m_HorizontalAxis: Horizontal
1294 | m_VerticalAxis: Vertical
1295 | m_SubmitButton: Submit
1296 | m_CancelButton: Cancel
1297 | m_InputActionsPerSecond: 10
1298 | m_RepeatDelay: 0.5
1299 | m_ForceModuleActive: 0
1300 | --- !u!114 &1594541302
1301 | MonoBehaviour:
1302 | m_ObjectHideFlags: 0
1303 | m_CorrespondingSourceObject: {fileID: 0}
1304 | m_PrefabInstance: {fileID: 0}
1305 | m_PrefabAsset: {fileID: 0}
1306 | m_GameObject: {fileID: 1594541299}
1307 | m_Enabled: 1
1308 | m_EditorHideFlags: 0
1309 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
1310 | m_Name:
1311 | m_EditorClassIdentifier:
1312 | m_FirstSelected: {fileID: 0}
1313 | m_sendNavigationEvents: 1
1314 | m_DragThreshold: 10
1315 | --- !u!1 &1655496402
1316 | GameObject:
1317 | m_ObjectHideFlags: 0
1318 | m_CorrespondingSourceObject: {fileID: 0}
1319 | m_PrefabInstance: {fileID: 0}
1320 | m_PrefabAsset: {fileID: 0}
1321 | serializedVersion: 6
1322 | m_Component:
1323 | - component: {fileID: 1655496403}
1324 | - component: {fileID: 1655496405}
1325 | - component: {fileID: 1655496404}
1326 | m_Layer: 5
1327 | m_Name: Text
1328 | m_TagString: Untagged
1329 | m_Icon: {fileID: 0}
1330 | m_NavMeshLayer: 0
1331 | m_StaticEditorFlags: 0
1332 | m_IsActive: 1
1333 | --- !u!224 &1655496403
1334 | RectTransform:
1335 | m_ObjectHideFlags: 0
1336 | m_CorrespondingSourceObject: {fileID: 0}
1337 | m_PrefabInstance: {fileID: 0}
1338 | m_PrefabAsset: {fileID: 0}
1339 | m_GameObject: {fileID: 1655496402}
1340 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
1341 | m_LocalPosition: {x: 0, y: 0, z: 0}
1342 | m_LocalScale: {x: 1, y: 1, z: 1}
1343 | m_ConstrainProportionsScale: 0
1344 | m_Children: []
1345 | m_Father: {fileID: 1277680943}
1346 | m_RootOrder: 0
1347 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1348 | m_AnchorMin: {x: 0, y: 1}
1349 | m_AnchorMax: {x: 1, y: 1}
1350 | m_AnchoredPosition: {x: 0, y: -64.40802}
1351 | m_SizeDelta: {x: 0, y: 128.81601}
1352 | m_Pivot: {x: 0.5, y: 0.5}
1353 | --- !u!114 &1655496404
1354 | MonoBehaviour:
1355 | m_ObjectHideFlags: 0
1356 | m_CorrespondingSourceObject: {fileID: 0}
1357 | m_PrefabInstance: {fileID: 0}
1358 | m_PrefabAsset: {fileID: 0}
1359 | m_GameObject: {fileID: 1655496402}
1360 | m_Enabled: 1
1361 | m_EditorHideFlags: 0
1362 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
1363 | m_Name:
1364 | m_EditorClassIdentifier:
1365 | m_Material: {fileID: 0}
1366 | m_Color: {r: 0, g: 0, b: 0, a: 1}
1367 | m_RaycastTarget: 1
1368 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
1369 | m_Maskable: 1
1370 | m_OnCullStateChanged:
1371 | m_PersistentCalls:
1372 | m_Calls: []
1373 | m_FontData:
1374 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
1375 | m_FontSize: 14
1376 | m_FontStyle: 0
1377 | m_BestFit: 0
1378 | m_MinSize: 10
1379 | m_MaxSize: 40
1380 | m_Alignment: 0
1381 | m_AlignByGeometry: 0
1382 | m_RichText: 1
1383 | m_HorizontalOverflow: 0
1384 | m_VerticalOverflow: 0
1385 | m_LineSpacing: 1
1386 | m_Text: 'Take a look at each GameObject in the hierarchy and examine the scripts.
1387 |
1388 | For
1389 | in depth documentation & scripting examples visit kitbashery.com'
1390 | --- !u!222 &1655496405
1391 | CanvasRenderer:
1392 | m_ObjectHideFlags: 0
1393 | m_CorrespondingSourceObject: {fileID: 0}
1394 | m_PrefabInstance: {fileID: 0}
1395 | m_PrefabAsset: {fileID: 0}
1396 | m_GameObject: {fileID: 1655496402}
1397 | m_CullTransparentMesh: 1
1398 | --- !u!1 &1799891581
1399 | GameObject:
1400 | m_ObjectHideFlags: 0
1401 | m_CorrespondingSourceObject: {fileID: 0}
1402 | m_PrefabInstance: {fileID: 0}
1403 | m_PrefabAsset: {fileID: 0}
1404 | serializedVersion: 6
1405 | m_Component:
1406 | - component: {fileID: 1799891582}
1407 | - component: {fileID: 1799891586}
1408 | - component: {fileID: 1799891585}
1409 | - component: {fileID: 1799891584}
1410 | - component: {fileID: 1799891583}
1411 | m_Layer: 0
1412 | m_Name: Collision Events Example
1413 | m_TagString: Untagged
1414 | m_Icon: {fileID: 0}
1415 | m_NavMeshLayer: 0
1416 | m_StaticEditorFlags: 0
1417 | m_IsActive: 0
1418 | --- !u!4 &1799891582
1419 | Transform:
1420 | m_ObjectHideFlags: 0
1421 | m_CorrespondingSourceObject: {fileID: 0}
1422 | m_PrefabInstance: {fileID: 0}
1423 | m_PrefabAsset: {fileID: 0}
1424 | m_GameObject: {fileID: 1799891581}
1425 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
1426 | m_LocalPosition: {x: 35, y: 0, z: 0}
1427 | m_LocalScale: {x: 5, y: 1, z: 5}
1428 | m_ConstrainProportionsScale: 0
1429 | m_Children: []
1430 | m_Father: {fileID: 0}
1431 | m_RootOrder: 4
1432 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1433 | --- !u!114 &1799891583
1434 | MonoBehaviour:
1435 | m_ObjectHideFlags: 0
1436 | m_CorrespondingSourceObject: {fileID: 0}
1437 | m_PrefabInstance: {fileID: 0}
1438 | m_PrefabAsset: {fileID: 0}
1439 | m_GameObject: {fileID: 1799891581}
1440 | m_Enabled: 1
1441 | m_EditorHideFlags: 0
1442 | m_Script: {fileID: 11500000, guid: cb65b08cef889c14eb78493d5ae0aee8, type: 3}
1443 | m_Name:
1444 | m_EditorClassIdentifier:
1445 | isTrigger: 0
1446 | maxCollisions: 50
1447 | requiredTags: []
1448 | ignoredColliders: []
1449 | enterEvent:
1450 | m_PersistentCalls:
1451 | m_Calls:
1452 | - m_Target: {fileID: 1799891583}
1453 | m_TargetAssemblyTypeName: Kitbashery.core.CollisionEvents, Assembly-CSharp
1454 | m_MethodName: DebugLastCollision
1455 | m_Mode: 1
1456 | m_Arguments:
1457 | m_ObjectArgument: {fileID: 0}
1458 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
1459 | m_IntArgument: 0
1460 | m_FloatArgument: 0
1461 | m_StringArgument: test
1462 | m_BoolArgument: 0
1463 | m_CallState: 2
1464 | exitEvent:
1465 | m_PersistentCalls:
1466 | m_Calls: []
1467 | stayEvent:
1468 | m_PersistentCalls:
1469 | m_Calls: []
1470 | lastContact: {fileID: 0}
1471 | colliders: []
1472 | eventCollider: {fileID: 0}
1473 | --- !u!65 &1799891584
1474 | BoxCollider:
1475 | m_ObjectHideFlags: 0
1476 | m_CorrespondingSourceObject: {fileID: 0}
1477 | m_PrefabInstance: {fileID: 0}
1478 | m_PrefabAsset: {fileID: 0}
1479 | m_GameObject: {fileID: 1799891581}
1480 | m_Material: {fileID: 0}
1481 | m_IsTrigger: 0
1482 | m_Enabled: 1
1483 | serializedVersion: 2
1484 | m_Size: {x: 1, y: 1, z: 1}
1485 | m_Center: {x: 0, y: 0, z: 0}
1486 | --- !u!23 &1799891585
1487 | MeshRenderer:
1488 | m_ObjectHideFlags: 0
1489 | m_CorrespondingSourceObject: {fileID: 0}
1490 | m_PrefabInstance: {fileID: 0}
1491 | m_PrefabAsset: {fileID: 0}
1492 | m_GameObject: {fileID: 1799891581}
1493 | m_Enabled: 1
1494 | m_CastShadows: 1
1495 | m_ReceiveShadows: 1
1496 | m_DynamicOccludee: 1
1497 | m_StaticShadowCaster: 0
1498 | m_MotionVectors: 1
1499 | m_LightProbeUsage: 1
1500 | m_ReflectionProbeUsage: 1
1501 | m_RayTracingMode: 2
1502 | m_RayTraceProcedural: 0
1503 | m_RenderingLayerMask: 1
1504 | m_RendererPriority: 0
1505 | m_Materials:
1506 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
1507 | m_StaticBatchInfo:
1508 | firstSubMesh: 0
1509 | subMeshCount: 0
1510 | m_StaticBatchRoot: {fileID: 0}
1511 | m_ProbeAnchor: {fileID: 0}
1512 | m_LightProbeVolumeOverride: {fileID: 0}
1513 | m_ScaleInLightmap: 1
1514 | m_ReceiveGI: 1
1515 | m_PreserveUVs: 0
1516 | m_IgnoreNormalsForChartDetection: 0
1517 | m_ImportantGI: 0
1518 | m_StitchLightmapSeams: 1
1519 | m_SelectedEditorRenderState: 3
1520 | m_MinimumChartSize: 4
1521 | m_AutoUVMaxDistance: 0.5
1522 | m_AutoUVMaxAngle: 89
1523 | m_LightmapParameters: {fileID: 0}
1524 | m_SortingLayerID: 0
1525 | m_SortingLayer: 0
1526 | m_SortingOrder: 0
1527 | m_AdditionalVertexStreams: {fileID: 0}
1528 | --- !u!33 &1799891586
1529 | MeshFilter:
1530 | m_ObjectHideFlags: 0
1531 | m_CorrespondingSourceObject: {fileID: 0}
1532 | m_PrefabInstance: {fileID: 0}
1533 | m_PrefabAsset: {fileID: 0}
1534 | m_GameObject: {fileID: 1799891581}
1535 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
1536 | --- !u!1 &1800656260
1537 | GameObject:
1538 | m_ObjectHideFlags: 0
1539 | m_CorrespondingSourceObject: {fileID: 0}
1540 | m_PrefabInstance: {fileID: 0}
1541 | m_PrefabAsset: {fileID: 0}
1542 | serializedVersion: 6
1543 | m_Component:
1544 | - component: {fileID: 1800656262}
1545 | - component: {fileID: 1800656261}
1546 | m_Layer: 0
1547 | m_Name: Time Manager
1548 | m_TagString: Untagged
1549 | m_Icon: {fileID: 0}
1550 | m_NavMeshLayer: 0
1551 | m_StaticEditorFlags: 0
1552 | m_IsActive: 1
1553 | --- !u!114 &1800656261
1554 | MonoBehaviour:
1555 | m_ObjectHideFlags: 0
1556 | m_CorrespondingSourceObject: {fileID: 0}
1557 | m_PrefabInstance: {fileID: 0}
1558 | m_PrefabAsset: {fileID: 0}
1559 | m_GameObject: {fileID: 1800656260}
1560 | m_Enabled: 1
1561 | m_EditorHideFlags: 0
1562 | m_Script: {fileID: 11500000, guid: d286f65bd2844b8498ac95cfbd8de857, type: 3}
1563 | m_Name:
1564 | m_EditorClassIdentifier:
1565 | togglePauseKey: 27
1566 | k__BackingField: 1
1567 | k__BackingField: 1
1568 | k__BackingField: 1
1569 | onPause:
1570 | m_PersistentCalls:
1571 | m_Calls: []
1572 | onUnPause:
1573 | m_PersistentCalls:
1574 | m_Calls: []
1575 | paused: 0
1576 | modifyingTimeScale: 0
1577 | currentTimeDuration: 0
1578 | currentTimeMultiplier: 0
1579 | debugFPS: 1
1580 | fpsCounter: {fileID: 403969858}
1581 | fpsCounterTMP: {fileID: 0}
1582 | targetFPS: 60
1583 | currentFPS: 0
1584 | onBelowTargetFPS:
1585 | m_PersistentCalls:
1586 | m_Calls: []
1587 | onAboveTargetFPS:
1588 | m_PersistentCalls:
1589 | m_Calls: []
1590 | --- !u!4 &1800656262
1591 | Transform:
1592 | m_ObjectHideFlags: 0
1593 | m_CorrespondingSourceObject: {fileID: 0}
1594 | m_PrefabInstance: {fileID: 0}
1595 | m_PrefabAsset: {fileID: 0}
1596 | m_GameObject: {fileID: 1800656260}
1597 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
1598 | m_LocalPosition: {x: 8.36747, y: -6.7522144, z: 12.91202}
1599 | m_LocalScale: {x: 1, y: 1, z: 1}
1600 | m_ConstrainProportionsScale: 0
1601 | m_Children: []
1602 | m_Father: {fileID: 0}
1603 | m_RootOrder: 2
1604 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1605 | --- !u!1 &1856537689
1606 | GameObject:
1607 | m_ObjectHideFlags: 0
1608 | m_CorrespondingSourceObject: {fileID: 0}
1609 | m_PrefabInstance: {fileID: 0}
1610 | m_PrefabAsset: {fileID: 0}
1611 | serializedVersion: 6
1612 | m_Component:
1613 | - component: {fileID: 1856537693}
1614 | - component: {fileID: 1856537692}
1615 | - component: {fileID: 1856537691}
1616 | - component: {fileID: 1856537690}
1617 | m_Layer: 0
1618 | m_Name: Plane
1619 | m_TagString: Untagged
1620 | m_Icon: {fileID: 0}
1621 | m_NavMeshLayer: 0
1622 | m_StaticEditorFlags: 0
1623 | m_IsActive: 1
1624 | --- !u!64 &1856537690
1625 | MeshCollider:
1626 | m_ObjectHideFlags: 0
1627 | m_CorrespondingSourceObject: {fileID: 0}
1628 | m_PrefabInstance: {fileID: 0}
1629 | m_PrefabAsset: {fileID: 0}
1630 | m_GameObject: {fileID: 1856537689}
1631 | m_Material: {fileID: 0}
1632 | m_IsTrigger: 0
1633 | m_Enabled: 1
1634 | serializedVersion: 4
1635 | m_Convex: 0
1636 | m_CookingOptions: 30
1637 | m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
1638 | --- !u!23 &1856537691
1639 | MeshRenderer:
1640 | m_ObjectHideFlags: 0
1641 | m_CorrespondingSourceObject: {fileID: 0}
1642 | m_PrefabInstance: {fileID: 0}
1643 | m_PrefabAsset: {fileID: 0}
1644 | m_GameObject: {fileID: 1856537689}
1645 | m_Enabled: 1
1646 | m_CastShadows: 0
1647 | m_ReceiveShadows: 1
1648 | m_DynamicOccludee: 1
1649 | m_StaticShadowCaster: 0
1650 | m_MotionVectors: 1
1651 | m_LightProbeUsage: 1
1652 | m_ReflectionProbeUsage: 1
1653 | m_RayTracingMode: 2
1654 | m_RayTraceProcedural: 0
1655 | m_RenderingLayerMask: 1
1656 | m_RendererPriority: 0
1657 | m_Materials:
1658 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
1659 | m_StaticBatchInfo:
1660 | firstSubMesh: 0
1661 | subMeshCount: 0
1662 | m_StaticBatchRoot: {fileID: 0}
1663 | m_ProbeAnchor: {fileID: 0}
1664 | m_LightProbeVolumeOverride: {fileID: 0}
1665 | m_ScaleInLightmap: 1
1666 | m_ReceiveGI: 1
1667 | m_PreserveUVs: 0
1668 | m_IgnoreNormalsForChartDetection: 0
1669 | m_ImportantGI: 0
1670 | m_StitchLightmapSeams: 1
1671 | m_SelectedEditorRenderState: 3
1672 | m_MinimumChartSize: 4
1673 | m_AutoUVMaxDistance: 0.5
1674 | m_AutoUVMaxAngle: 89
1675 | m_LightmapParameters: {fileID: 0}
1676 | m_SortingLayerID: 0
1677 | m_SortingLayer: 0
1678 | m_SortingOrder: 0
1679 | m_AdditionalVertexStreams: {fileID: 0}
1680 | --- !u!33 &1856537692
1681 | MeshFilter:
1682 | m_ObjectHideFlags: 0
1683 | m_CorrespondingSourceObject: {fileID: 0}
1684 | m_PrefabInstance: {fileID: 0}
1685 | m_PrefabAsset: {fileID: 0}
1686 | m_GameObject: {fileID: 1856537689}
1687 | m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
1688 | --- !u!4 &1856537693
1689 | Transform:
1690 | m_ObjectHideFlags: 0
1691 | m_CorrespondingSourceObject: {fileID: 0}
1692 | m_PrefabInstance: {fileID: 0}
1693 | m_PrefabAsset: {fileID: 0}
1694 | m_GameObject: {fileID: 1856537689}
1695 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
1696 | m_LocalPosition: {x: -27.888596, y: -5.882996, z: -4.2418156}
1697 | m_LocalScale: {x: 10, y: 1, z: 1}
1698 | m_ConstrainProportionsScale: 0
1699 | m_Children: []
1700 | m_Father: {fileID: 2059835720}
1701 | m_RootOrder: 2
1702 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1703 | --- !u!1 &2059835719
1704 | GameObject:
1705 | m_ObjectHideFlags: 0
1706 | m_CorrespondingSourceObject: {fileID: 0}
1707 | m_PrefabInstance: {fileID: 0}
1708 | m_PrefabAsset: {fileID: 0}
1709 | serializedVersion: 6
1710 | m_Component:
1711 | - component: {fileID: 2059835720}
1712 | m_Layer: 0
1713 | m_Name: Demo Environment---------------------------------
1714 | m_TagString: Untagged
1715 | m_Icon: {fileID: 0}
1716 | m_NavMeshLayer: 0
1717 | m_StaticEditorFlags: 0
1718 | m_IsActive: 1
1719 | --- !u!4 &2059835720
1720 | Transform:
1721 | m_ObjectHideFlags: 0
1722 | m_CorrespondingSourceObject: {fileID: 0}
1723 | m_PrefabInstance: {fileID: 0}
1724 | m_PrefabAsset: {fileID: 0}
1725 | m_GameObject: {fileID: 2059835719}
1726 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
1727 | m_LocalPosition: {x: 27.888596, y: 5.382996, z: 4.2418156}
1728 | m_LocalScale: {x: 1, y: 1, z: 1}
1729 | m_ConstrainProportionsScale: 0
1730 | m_Children:
1731 | - {fileID: 1402257232}
1732 | - {fileID: 137633618}
1733 | - {fileID: 1856537693}
1734 | - {fileID: 1277680943}
1735 | - {fileID: 1594541300}
1736 | m_Father: {fileID: 0}
1737 | m_RootOrder: 1
1738 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1739 | --- !u!1 &2065983280
1740 | GameObject:
1741 | m_ObjectHideFlags: 0
1742 | m_CorrespondingSourceObject: {fileID: 0}
1743 | m_PrefabInstance: {fileID: 0}
1744 | m_PrefabAsset: {fileID: 0}
1745 | serializedVersion: 6
1746 | m_Component:
1747 | - component: {fileID: 2065983282}
1748 | - component: {fileID: 2065983281}
1749 | m_Layer: 0
1750 | m_Name: Spawner
1751 | m_TagString: Untagged
1752 | m_Icon: {fileID: 0}
1753 | m_NavMeshLayer: 0
1754 | m_StaticEditorFlags: 0
1755 | m_IsActive: 0
1756 | --- !u!114 &2065983281
1757 | MonoBehaviour:
1758 | m_ObjectHideFlags: 0
1759 | m_CorrespondingSourceObject: {fileID: 0}
1760 | m_PrefabInstance: {fileID: 0}
1761 | m_PrefabAsset: {fileID: 0}
1762 | m_GameObject: {fileID: 2065983280}
1763 | m_Enabled: 1
1764 | m_EditorHideFlags: 0
1765 | m_Script: {fileID: 11500000, guid: a746ef034d374934ca8e42907c796477, type: 3}
1766 | m_Name:
1767 | m_EditorClassIdentifier:
1768 | k__BackingField: 1
1769 | k__BackingField: 0
1770 | k__BackingField: 0
1771 | spawnOffset: {x: 0, y: 0, z: 0}
1772 | waves:
1773 | - interval: 1
1774 | spawnAmount: 50
1775 | onSpawn:
1776 | m_PersistentCalls:
1777 | m_Calls:
1778 | - m_Target: {fileID: 2065983281}
1779 | m_TargetAssemblyTypeName: Kitbashery.core.Spawner, Assembly-CSharp
1780 | m_MethodName: RandomizeSpawnOffset
1781 | m_Mode: 4
1782 | m_Arguments:
1783 | m_ObjectArgument: {fileID: 0}
1784 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
1785 | m_IntArgument: 0
1786 | m_FloatArgument: 2
1787 | m_StringArgument:
1788 | m_BoolArgument: 0
1789 | m_CallState: 2
1790 | onWaveComplete:
1791 | m_PersistentCalls:
1792 | m_Calls: []
1793 | poolIdentifiers:
1794 | - poolIndex: 0
1795 | prefabName:
1796 | - poolIndex: 0
1797 | prefabName:
1798 | - poolIndex: 0
1799 | prefabName:
1800 | - poolIndex: 0
1801 | prefabName:
1802 | - poolIndex: 0
1803 | prefabName:
1804 | - poolIndex: 0
1805 | prefabName:
1806 | - poolIndex: 0
1807 | prefabName:
1808 | - poolIndex: 0
1809 | prefabName:
1810 | - poolIndex: 0
1811 | prefabName:
1812 | - poolIndex: 0
1813 | prefabName:
1814 | - poolIndex: 0
1815 | prefabName:
1816 | - poolIndex: 0
1817 | prefabName:
1818 | - poolIndex: 0
1819 | prefabName:
1820 | - poolIndex: 0
1821 | prefabName:
1822 | - poolIndex: 0
1823 | prefabName:
1824 | - poolIndex: 0
1825 | prefabName:
1826 | - poolIndex: 0
1827 | prefabName:
1828 | - poolIndex: 0
1829 | prefabName:
1830 | - poolIndex: 0
1831 | prefabName:
1832 | - poolIndex: 0
1833 | prefabName:
1834 | - poolIndex: 0
1835 | prefabName:
1836 | - poolIndex: 0
1837 | prefabName:
1838 | - poolIndex: 0
1839 | prefabName:
1840 | - poolIndex: 0
1841 | prefabName:
1842 | - poolIndex: 0
1843 | prefabName:
1844 | - poolIndex: 0
1845 | prefabName:
1846 | - poolIndex: 0
1847 | prefabName:
1848 | - poolIndex: 0
1849 | prefabName:
1850 | - poolIndex: 0
1851 | prefabName:
1852 | - poolIndex: 0
1853 | prefabName:
1854 | - poolIndex: 0
1855 | prefabName:
1856 | - poolIndex: 0
1857 | prefabName:
1858 | - poolIndex: 0
1859 | prefabName:
1860 | - poolIndex: 0
1861 | prefabName:
1862 | - poolIndex: 0
1863 | prefabName:
1864 | - poolIndex: 0
1865 | prefabName:
1866 | - poolIndex: 0
1867 | prefabName:
1868 | - poolIndex: 0
1869 | prefabName:
1870 | - poolIndex: 0
1871 | prefabName:
1872 | - poolIndex: 0
1873 | prefabName:
1874 | - poolIndex: 0
1875 | prefabName:
1876 | - poolIndex: 0
1877 | prefabName:
1878 | - poolIndex: 0
1879 | prefabName:
1880 | - poolIndex: 0
1881 | prefabName:
1882 | - poolIndex: 0
1883 | prefabName:
1884 | - poolIndex: 0
1885 | prefabName:
1886 | - poolIndex: 0
1887 | prefabName:
1888 | - poolIndex: 0
1889 | prefabName:
1890 | - poolIndex: 0
1891 | prefabName:
1892 | - poolIndex: 0
1893 | prefabName:
1894 | randomizeWaves: 0
1895 | randomPools:
1896 | lastSpawned: {fileID: 0}
1897 | currentWave: 0
1898 | currentWaveSpawns: 0
1899 | --- !u!4 &2065983282
1900 | Transform:
1901 | m_ObjectHideFlags: 0
1902 | m_CorrespondingSourceObject: {fileID: 0}
1903 | m_PrefabInstance: {fileID: 0}
1904 | m_PrefabAsset: {fileID: 0}
1905 | m_GameObject: {fileID: 2065983280}
1906 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
1907 | m_LocalPosition: {x: 34.3, y: 6.134, z: -0.58}
1908 | m_LocalScale: {x: 1, y: 1, z: 1}
1909 | m_ConstrainProportionsScale: 0
1910 | m_Children: []
1911 | m_Father: {fileID: 0}
1912 | m_RootOrder: 9
1913 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1914 |
--------------------------------------------------------------------------------
/Samples~/Demo/Game Kit Demo.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4d45633fa6fda2a4e99780910cdcfff3
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "com.kitbashery.game-kit",
3 | "version": "1.1.1",
4 | "displayName": "Game Kit",
5 | "description": "A collection of feature rich gameplay systems.",
6 | "unity": "2021.3",
7 | "unityRelease": "0f1",
8 | "documentationUrl": "https://kitbashery.com/docs/game-kit",
9 | "changelogUrl": "https://github.com/Kitbashery/Game-Kit/commits/Latest",
10 | "licensesUrl": "https://github.com/Kitbashery/Game-Kit/blob/main/.github/LICENSE",
11 | "keywords": [
12 | "Gameplay",
13 | "Physics",
14 | "Events"
15 | ],
16 | "author": {
17 | "name": "Kitbashery",
18 | "email": "kitbashery@gmail.com",
19 | "url": "https://www.kitbashery.com"
20 | },
21 | "type": "tool",
22 | "samples": [
23 | {
24 | "displayName": "Demo Scene(s)",
25 | "description": "Game Kit Demo scene(s).",
26 | "path": "Samples~/Demo"
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/package.json.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 78c0764e80e7b634bb16be5b3fac7e30
3 | PackageManifestImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------