Hello guys!
I have been playing with Physical Materials and footstep sounds.
For each material on my map I am adding a physical material (on the material editor) to get custom footstep sounds for things like Wood, Metal, Rocks, and so on.
Everything works like a charm, however, I am trying to get custom hit sounds whenever the player shoots at static meshes.
In example, I have a small house on my map, which is a single static mesh with various materials applied (3dsmax multi material/sub object). As I said, each material has a different physical material applied. In example, the floor is wooden, and the staircase on the entrance is of metal. So it works perfectly for the footstep.
However, I wanted that whenever the player shoots at the wooden part, it plays a wooden hit bullet sound effect.
By seeing the wood physical material propeties, there is a field for Impact Sound. I already added my custom wooden bullet impact sound there (and saved the package).
However, nothing happens whenever I shoot the wooden part of the house, it does not play the impact sound effect. As my guns are all projectile guns, the impact sound I hear is the Projectile ExplosionSound (I also have a custom sound cue for this), but the wooden physical material impact sound (which I already added the sound cue there), does not play.
By searching on the classes, I have found this function of UTWeap_PhysicsGun
simulated function StartFire(byte FireModeNum)
{
local vector StartShot, EndShot, PokeDir;
local vector HitLocation, HitNormal, Extent;
local actor HitActor;
local float HitDistance;
local Quat PawnQuat, InvPawnQuat, ActorQuat;
local TraceHitInfo HitInfo;
local SkeletalMeshComponent SkelComp;
local Rotator Aim;
local PhysAnimTestActor PATActor;
local StaticMeshComponent HitComponent;
local KActorFromStatic NewKActor;
if ( Role < ROLE_Authority )
return;
// Do ray check and grab actor
StartShot = Instigator.GetWeaponStartTraceLocation();
Aim = GetAdjustedAim( StartShot );
EndShot = StartShot + (10000.0 * Vector(Aim));
Extent = vect(0,0,0);
HitActor = Trace(HitLocation, HitNormal, EndShot, StartShot, True, Extent, HitInfo, TRACEFLAG_Bullet);
HitDistance = VSize(HitLocation - StartShot);
HitComponent = StaticMeshComponent(HitInfo.HitComponent);
if ( (HitComponent != None) )
{
if(HitInfo.PhysMaterial != none)
{
if(HitInfo.PhysMaterial.ImpactSound != none)
{
PlaySound(HitInfo.PhysMaterial.ImpactSound,,,,HitLocation);
}
if(HitInfo.PhysMaterial.ImpactEffect != none)
{
WorldInfo.MyEmitterPool.SpawnEmitter(HitInfo.PhysMaterial.ImpactEffect, HitLocation, rotator(HitNormal), none);
}
}
if( HitComponent.CanBecomeDynamic() )
{
NewKActor = class'KActorFromStatic'.Static.MakeDynamic(HitComponent);
if ( NewKActor != None )
{
HitActor = NewKActor;
}
}
}
So I tried to add this function inside the UTProjectile class function
simulated function SpawnExplosionEffects(vector HitLocation, vector HitNormal)
local TraceHitInfo HitInfo;
local StaticMeshComponent HitComponent;
HitComponent = StaticMeshComponent(HitInfo.HitComponent);
.
.
.
.
.
.
.
.
.
if (ExplosionSound != None && !bSuppressSounds)
{
PlaySound(ExplosionSound, true);
if ( (HitComponent != None) )
{
if(HitInfo.PhysMaterial != none)
{
if(HitInfo.PhysMaterial.ImpactSound != none)
{
PlaySound(HitInfo.PhysMaterial.ImpactSound,,,,HitLocation);
}
if(HitInfo.PhysMaterial.ImpactEffect != none)
{
WorldInfo.MyEmitterPool.SpawnEmitter(HitInfo.PhysMaterial.ImpactEffect, HitLocation, rotator(HitNormal), none);
}
}
if( HitComponent.CanBecomeDynamic() )
{
NewKActor = class'KActorFromStatic'.Static.MakeDynamic(HitComponent);
if ( NewKActor != None )
{
HitActor = NewKActor;
}
}
}
}
But the only sound I hear is the Projectile Explosion Sound, not the Physical Material Impact Sound.
Any help?