Strange bug related to melee collision

Hi all,

So I came across this bug, but I don't know what triggers it. It's something to do with melee collision and I get this error in the console:
NullReferenceException: Object reference not set to an instance of an object
Opsive.UltimateCharacterController.Items.Actions.Modules.Melee.MeleeHitbox.Reset (System.Boolean startUse) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/Modules/Melee/CollisionModule.cs:145)
Opsive.UltimateCharacterController.Items.Actions.Modules.Melee.HitboxCollision.StartItemUse (Opsive.UltimateCharacterController.Character.Abilities.Items.Use itemAbility) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/Modules/Melee/CollisionModule.cs:635)
Opsive.UltimateCharacterController.Items.Actions.UsableAction+<>c.<StartItemUse>b__128_0 (Opsive.UltimateCharacterController.Items.Actions.Modules.IModuleStartItemUse module, Opsive.UltimateCharacterController.Character.Abilities.Items.Use i1) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/UsableAction.cs:473)
Opsive.UltimateCharacterController.Items.Actions.CharacterItemAction.InvokeOnModulesWithType[Tm,T1] (T1 i1, System.Action`2[T1,T2] action) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/CharacterItemAction.cs:335)
Opsive.UltimateCharacterController.Items.Actions.UsableAction.StartItemUse (Opsive.UltimateCharacterController.Character.Abilities.Items.Use useAbility) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/UsableAction.cs:472)
Opsive.UltimateCharacterController.Items.Actions.UsableAction.UseItemUpdateInternal (Opsive.UltimateCharacterController.Character.Abilities.Items.Use useItemAbility) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/UsableAction.cs:694)
Opsive.UltimateCharacterController.Items.Actions.UsableAction.UseItemUpdate (Opsive.UltimateCharacterController.Character.Abilities.Items.Use useItemAbility) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/UsableAction.cs:635)
Opsive.UltimateCharacterController.Character.Abilities.Items.Use.LateUpdate () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/Abilities/Items/Use.cs:459)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion.LateUpdateActiveAbilities (Opsive.UltimateCharacterController.Character.Abilities.Ability[] abilities, System.Int32& abilityCount) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:648)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion.UpdateCharacter () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:574)
Opsive.UltimateCharacterController.Character.CharacterLocomotion.Move (System.Single horizontalMovement, System.Single forwardMovement, System.Single deltaYawRotation) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/CharacterLocomotion.cs:479)
Opsive.UltimateCharacterController.SimulationManager+CharacterComponents.Move () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:55)
Opsive.UltimateCharacterController.SimulationManager.MoveCharacters () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:259)
Opsive.UltimateCharacterController.SimulationManager.FixedUpdate () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:228)
I also get this error at the same time:
NullReferenceException: Object reference not set to an instance of an object
Opsive.UltimateCharacterController.Items.Actions.Modules.Melee.MeleeHitbox.CanUse () (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/Modules/Melee/CollisionModule.cs:164)
Opsive.UltimateCharacterController.Items.Actions.Modules.Melee.HitboxCollision.CheckCollisions (Opsive.UltimateCharacterController.Items.Actions.MeleeUseDataStream dataStream) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/Modules/Melee/CollisionModule.cs:654)
Opsive.UltimateCharacterController.Items.Actions.MeleeAction.CheckForCollision (Opsive.UltimateCharacterController.Items.Actions.Modules.Melee.MeleeAttackData attackData) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/MeleeAction.cs:299)
Opsive.UltimateCharacterController.Items.Actions.Modules.Melee.SimpleAttack.UseItemUpdate () (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/Modules/Melee/AttackModule.cs:235)
Opsive.UltimateCharacterController.Items.Actions.UsableAction+<>c.<UseItemUpdate>b__137_0 (Opsive.UltimateCharacterController.Items.Actions.Modules.IModuleUseItemUpdate module) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/UsableAction.cs:640)
Opsive.UltimateCharacterController.Items.Actions.CharacterItemAction.InvokeOnModulesWithType[Tm] (System.Action`1[T] action) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/CharacterItemAction.cs:315)
Opsive.UltimateCharacterController.Items.Actions.UsableAction.UseItemUpdate (Opsive.UltimateCharacterController.Character.Abilities.Items.Use useItemAbility) (at Assets/Opsive/UltimateCharacterController/Scripts/Items/Actions/UsableAction.cs:640)
Opsive.UltimateCharacterController.Character.Abilities.Items.Use.LateUpdate () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/Abilities/Items/Use.cs:459)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion.LateUpdateActiveAbilities (Opsive.UltimateCharacterController.Character.Abilities.Ability[] abilities, System.Int32& abilityCount) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:648)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion.UpdateCharacter () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:574)
Opsive.UltimateCharacterController.Character.CharacterLocomotion.Move (System.Single horizontalMovement, System.Single forwardMovement, System.Single deltaYawRotation) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/CharacterLocomotion.cs:479)
Opsive.UltimateCharacterController.SimulationManager+CharacterComponents.Move () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:55)
Opsive.UltimateCharacterController.SimulationManager.MoveCharacters () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:259)
Opsive.UltimateCharacterController.SimulationManager.FixedUpdate () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:228)
The best way to try to reproduce it is to set up a blank project with deathmatch, add the 2 demo scenes to the build settings and join a team match with the default settings. Go around and kill the enemies until you eventually get this bug. I'm not sure at what point it actually occurs, but every time I run the demo, it will eventually occur. It also happens in the free-for-all mode as well, you'll notice the player starts to stutter as soon as it happens.
 
Last edited:
Tagging @Sangemdoko for any ideas. My guess is that it looks like one of the modules can't find a collider. I will add an error message to see if it helps with identifying the module.
 
That's an odd one.
It's as if there is a collider but that collider does not have a transform.
Perhaps the collider is destoryed so the transform becomes null half way through.

I will add some null checks, at least that should prevent those errors from happening
 
I think this problem is now fixed in 3.0.6 of UFPS. I haven't experienced any errors, I do get lots of Null log messages though coming from DamagePreprocessor I think.
 
Could you send us the full error stack of those Null log messages?
Also could you check the hitboxes of the relevant weapon. Perhaps one of the hitboxes doesn't have a collider set in the inspector
 
Could you send us the full error stack of those Null log messages?
Also could you check the hitboxes of the relevant weapon. Perhaps one of the hitboxes doesn't have a collider set in the inspector
Here you go mate op is referring to line 217 in DamageProcessor

C#:
  public GameObject SourceOwner  { get => m_SourceOwner; set { m_SourceOwner = value; Debug.Log(value); } }
 
I am very sorry, I must have left that there by mistake.
Please remove the debug.log,
Code:
public GameObject SourceOwner  { get => m_SourceOwner; set { m_SourceOwner = value; } }

I was using it to debug some weird error
 
Top