Uploaded April 2023 | Updated September 2026, 24 minutes ago
Create a dynamic gun modifier system to enable runtime property changes of your guns! We'll also cover how to prevent ScriptableObjects from persisting these changes in the editor.
In this video we'll set up a modifier system and implement 2 popular modifiers:
1. Damage Modifier, which allows us to raise or lower the damage of any gun when it's applied.
2. Vector3Modifier, which allows us to apply a percentage offset to any Vector3, such as the Bullet Spread amount.
🔶 ALL THINGS LlamAcademy now available at: https://llamacademy.dev/support including latest tutorials, courses, ways to support, and more! Check it out 🙂
👨💻 Get the FULL FREE PROJECT on GitHub: github.com/llamacademy/scriptable-object-based-guns
🏷️Save 25% on the ultimate C# IDE: JetBrains Rider with code LLAMACADEMY: jetbrains.com/store/?section=personal&billing=yearly
📚 Resources:
🟠 Reflection: learn.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/reflection
🟠 Type Class: learn.microsoft.com/en-us/dotnet/api/system.type?view=net-7.0
🟠 FieldInfo: learn.microsoft.com/en-us/dotnet/api/system.reflection.fieldinfo?view=net-7.0
🟠 ICloneable: learn.microsoft.com/en-us/dotnet/api/system.icloneable?view=net-7.0
🟠 Use Git with Unity: youtu.be/vq5zuXBzlW8?si=YQbrVPMdsy0Z6Kvo
Some links may be affiliate links, which at no additional cost to you, gives me a small portion of the purchase.
Chapters:
00:00 Topic Introduction
00:41 Concepts & What to Expect
02:35 Cloning ScriptableObjects to Prevent Runtime Modification - GunScriptableObject.cs
03:00 Cloning ScriptableObjects to Prevent Runtime Modification - DamageConfigScriptableObject.cs
03:25 Cloning ShootConfigScriptableObject.cs
03:46 Reusable way to copy all values on a ScriptableObject
05:30 Set up cloning on the rest of the ScriptableObjects using Reflection
06:17 Clone GunScriptableObject.cs - This one is different!
07:23 Modifiers setup
07:54 Base IModifier - the AbstractValueModifier.cs
11:37 Throw a Custom Exception
11:58 Finish AbstractValueModifier
13:06 Create our first Modifier - The DamageModifier.cs
14:59 Another, more generic example - Vector3Modifier.cs
15:48 Applying modifiers - GunModifierApplier.cs
16:41 Clone the ActiveGun in PlayerGunSelector.cs
17:05 Set up and Demo
17:58 Closing Thoughts & Support LlamAcademy
Create a dynamic gun modifier system to enable runtime property changes of your guns! We'll also cover how to prevent ScriptableObjects from persisting these changes in the editor.
In this video we'll set up a modifier system and implement 2 popular modifiers:
1. Damage Modifier, which allows us to raise or lower the damage of any gun when it's applied.
2. Vector3Modifier, which allows us to apply a percentage offset to any Vector3, such as the Bullet Spread amount.
🔶 ALL THINGS LlamAcademy now available at: https://llamacademy.dev/support including latest tutorials, courses, ways to support, and more! Check it out 🙂
👨💻 Get the FULL FREE PROJECT on GitHub: github.com/llamacademy/scriptable-object-based-guns
🏷️Save 25% on the ultimate C# IDE: JetBrains Rider with code LLAMACADEMY: jetbrains.com/store/?section=personal&billing=yearly
📚 Resources:
🟠 Reflection: learn.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/reflection
🟠 Type Class: learn.microsoft.com/en-us/dotnet/api/system.type?view=net-7.0
🟠 FieldInfo: learn.microsoft.com/en-us/dotnet/api/system.reflection.fieldinfo?view=net-7.0
🟠 ICloneable: learn.microsoft.com/en-us/dotnet/api/system.icloneable?view=net-7.0
🟠 Use Git with Unity: youtu.be/vq5zuXBzlW8?si=YQbrVPMdsy0Z6Kvo
Some links may be affiliate links, which at no additional cost to you, gives me a small portion of the purchase.
Chapters:
00:00 Topic Introduction
00:41 Concepts & What to Expect
02:35 Cloning ScriptableObjects to Prevent Runtime Modification - GunScriptableObject.cs
03:00 Cloning ScriptableObjects to Prevent Runtime Modification - DamageConfigScriptableObject.cs
03:25 Cloning ShootConfigScriptableObject.cs
03:46 Reusable way to copy all values on a ScriptableObject
05:30 Set up cloning on the rest of the ScriptableObjects using Reflection
06:17 Clone GunScriptableObject.cs - This one is different!
07:23 Modifiers setup
07:54 Base IModifier - the AbstractValueModifier.cs
11:37 Throw a Custom Exception
11:58 Finish AbstractValueModifier
13:06 Create our first Modifier - The DamageModifier.cs
14:59 Another, more generic example - Vector3Modifier.cs
15:48 Applying modifiers - GunModifierApplier.cs
16:41 Clone the ActiveGun in PlayerGunSelector.cs
17:05 Set up and Demo
17:58 Closing Thoughts & Support LlamAcademy










