Cheo
Active member
Hello, following an exchange with @RainerWahnsinn on Discord here are a few issues I have to report about the Deathmatch AI Kit :
-The Explosion prefab is missing on the Rocket prefab in Projectile -> Destruction -> Spawned Objects On Destruction.
-Dying with the Rocket Launcher equipped creates this error :
-Even on Easy difficulty enemies have too good aim - this would be the perfect opportunity to introduce something I've been thinking about for a long time but never implemented, a task for making enemies miss on purpose ! Like have them shoot at a point near the player. Or at least just decrease their fire rates, they're too deadly at the moment and prevent experimentation.
-I don't think using layers to separate character by team is good practice (especially considering the 32 layers limit), tags and string and int IDs are better used for that purpose, characters should have the Character layer assigned to their root object.
Also, team members all have the same colour layer but it may not match their actual colour, for example I once got the green team characters all having the RedTeam layer assigned.
-The Explosion prefab is missing on the Rocket prefab in Projectile -> Destruction -> Spawned Objects On Destruction.
-Dying with the Rocket Launcher equipped creates this error :
C#:
[Exception] ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
System.Collections.Generic.List`1[T].get_Item() at <eef08f56e2e042f1b3027eca477293d9>:0
ItemSetGroup.UpdateActiveItemSet() at /Opsive/UltimateCharacterController/Scripts/Inventory/ItemSetGroup.cs:625
623: // In some cases the ItemSet that had to be activated was disabled during the equip/unequip animation.
624: // If that's the case set the newActive index to -1.
--> 625: newItemSet = ItemSetList[newActiveIndex];
626: if (newItemSet.Enabled == false) {
627: newActiveIndex = -1;
ItemSetManagerBase.UpdateActiveItemSet() at /Opsive/UltimateCharacterController/Scripts/Inventory/ItemSetManagerBase.cs:587
585: #endif
--> 587: itemSetGroup.UpdateActiveItemSet(itemSetIndex);
588: }
EquipUnequip.AbilityStopped() at /Opsive/UltimateCharacterController/Scripts/Character/Abilities/Items/EquipUnequip.cs:1119
1118: UpdateItemAbilityAnimatorParameters();
-->1119: m_ItemSetManager.UpdateActiveItemSet(m_ItemSetGroupIndex, m_ActiveItemSetIndex);
1120: }
Ability.StopAbility() at /Opsive/UltimateCharacterController/Scripts/Character/Abilities/Ability.cs:708
706: m_ActiveIndex = -1;
--> 708: AbilityStopped(force);
710: return true;
UltimateCharacterLocomotion.TryStopAbility() at /Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:1071
1069: m_ActiveItemAbilities[m_ActiveItemAbilityCount] = null;
-->1071: ability.StopAbility(force, true);
1073: // Let others know that the ability has stopped.
Ability.StopAbility() at /Opsive/UltimateCharacterController/Scripts/Character/Abilities/Ability.cs:703
701: // If the ability wasn't stopped from the character controller then call the controller's stop ability method. The controller must be aware of the stopping.
702: if (!fromController) {
--> 703: return m_CharacterLocomotion.TryStopAbility(this, force);
704: }
Ability.StopAbility() at /Opsive/UltimateCharacterController/Scripts/Character/Abilities/Ability.cs:680
678: public bool StopAbility()
679: {
--> 680: return StopAbility(false, false);
681: }
EquipUnequip.Update() at /Opsive/UltimateCharacterController/Scripts/Character/Abilities/Items/EquipUnequip.cs:540
538: var isItemSetValid = m_ItemSetManager.IsItemSetValid(m_ItemSetGroupIndex, m_ActiveItemSetIndex, false);
539: if (m_ActiveItemSetIndex != -1 && !isItemSetValid) {
--> 540: StopAbility();
541: return;
542: }
UltimateCharacterLocomotion.UpdateAbilities() at /Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:654
652: }
653: if (abilities[i].IsActive) {
--> 654: abilities[i].Update();
655: } else if (abilities[i].Enabled) {
656: abilities[i].InactiveUpdate();
UltimateCharacterLocomotion.UpdateCharacter() at /Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:577
575: // Start and update the abilities.
576: UpdateAbilities(m_Abilities);
--> 577: UpdateAbilities(m_ItemAbilities);
579: // Update the effects.
CharacterLocomotion.Move() at /Opsive/UltimateCharacterController/Scripts/Character/CharacterLocomotion.cs:561
559: EnableColliderCollisionLayer(false);
--> 561: UpdateCharacter();
563: EnableColliderCollisionLayer(true);
SimulationManager+SmoothedCharacter.Move() at /Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:169
167: }
--> 169: m_Locomotion.Move(horizontalMovement, forwardMovement, deltaYaw);
170: AssignFixedLocation();
171: }
SimulationManager.MoveCharacters() at /Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:723
721: for (int i = 0; i < m_Characters.Count; ++i) {
722: if (interpAmount == -1) {
--> 723: m_Characters[i].Move(preMove);
724: } else {
725: if (!m_Characters[i].Locomotion.Interpolate) {
SimulationManager.FixedUpdate() at /Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:671
669: MoveCharacters(true, -1);
670: RotateCameras();
--> 671: MoveCharacters(false, -1);
672: MoveCameras(-1);
-Even on Easy difficulty enemies have too good aim - this would be the perfect opportunity to introduce something I've been thinking about for a long time but never implemented, a task for making enemies miss on purpose ! Like have them shoot at a point near the player. Or at least just decrease their fire rates, they're too deadly at the moment and prevent experimentation.
-I don't think using layers to separate character by team is good practice (especially considering the 32 layers limit), tags and string and int IDs are better used for that purpose, characters should have the Character layer assigned to their root object.
Also, team members all have the same colour layer but it may not match their actual colour, for example I once got the green team characters all having the RedTeam layer assigned.