0; NewRotation.Roll = 0; // Set the rotation so that I look at the enemy SetRotation(NewRotation); // Set my velocity, so I move towards the enemy Velocity = Normal(Enemy.Location - Location) * UserGroundSpeed; // Set my acceleration, so I move towards the enemy Acceleration = Velocity; }}Quando um robo colide com o jogador a funcao Bump() e executada. Para mais informacoes sobre colisao leia o artigo: "Colisao em UnrealScript".O jogador, que e representado pela variavel Other nesta funcao, recebe o dano cujo valor esta definido na variavel ExplosionDamage. Na imagem do Archetype podemos ver que o valor padrao desta variavel e 5.O efeito com particulas que representa a explosao e acionado e e reproduzido o som da explosao armazenado na variavel ExplosionSoundCue. Para mais informacoes sobre SoundCue, leia o artigo: "Tocando Sons em UnrealScript".event Bump(Actor Other, PrimitiveComponent OtherComp, Vector HitNormal){ Super.Bump(Other, OtherComp, HitNormal); if (SPG_PlayerPawn(Other) != None) { // Apply damage to the bumped pawn Other.TakeDamage(ExplosionDamage, None, Location, Vect(0, 0, 0), class'DamageType'); // Play the particle effect if (ExplosionParticleTemplate != None) { WorldInfo.MyEmitterPool.SpawnEmitter(ExplosionParticleTemplate, Location); } // Play the explosion sound if (ExplosionSoundCue != None) { PlaySound(ExplosionSoundCue); } // Destroy the pawn Destroy(); }}Quando um robo e eliminado pelo jogador, a funcao PlayDying() e executada. Nesta funcao a fisica do robo e definida como PHYS_RigidBody para que ele caia no chao.E verificada a possibilidade de o robo deixar cair um item de energia, que e representada pela classe SPG_HealthPickup. Este teste e feito com a expressao: "FRand() <= ChanceToDropPickup". FRand() e uma funcao do UnrealScript que retorna um valor aleatorio entre 0.0 e 1.0. A variavel ChanceToDropPickup esta definida no Archetype com o valor "0.3". Isto significa que existe 30% de chance de que um item de energia caia do robo.simulated function PlayDying(class<DamageType> DamageType, vector HitLoc){ local DroppedPickup DroppedPickup; Mesh.MinDistFactorForKinematicUpdate = 0.0; Mesh.ForceSkelUpdate(); Mesh.SetTickGroup(TG_PostAsyncWork); CollisionComponent = Mesh; CylinderComponent.SetActorCollision(false, false); Mesh.SetActorCollision(true, false); Mesh.SetTraceBlocking(true, true); SetPawnRBChannels(true); SetPhysics(PHYS_RigidBody); Mesh.PhysicsWeight = 1.f; if (Mesh.bNotUpdatingKinematicDueToDistance) { Mesh.UpdateRBBonesFromSpaceBases(true, true); } Mesh.PhysicsAssetInstance.SetAllBodiesFixed(false); Mesh.bUpdateKinematicBonesFromAnimation = false; Mesh.WakeRigidBody(); // Set the actor to automatically destroy in ten seconds. LifeSpan = 10.f; // Chance to drop a pick up if (ArchetypedPickup != None && FRand() <= ChanceToDropPickup) { // Spawn a dropped pickup DroppedPickup = Spawn(ArchetypedPickup.Class,,, Location,, ArchetypedPickup); if (DroppedPickup != None) { // Set the dropped pick up to falling DroppedPickup.SetPhysics(PHYS_Falling); // Set the velocity of the dropped pickup to the toss velocity DroppedPickup.Velocity.X = 0; DroppedPickup.Velocity.Y = 0; DroppedPickup.Velocity.Z = RandRange(200.f, 250.f); } }}