- Home /
Particles are off when I shoot
My particles are off when I shoot
var range = 100.0;
var fireRate = 0.05;
var force = 10.0;
var damage = 5.0;
var bulletsPerClip = 30;
var clips = 20;
var reloadTime = 0.5;
private var hitParticles : ParticleEmitter;
var muzzleFlash : Renderer;
private var bulletsLeft : int = 0;
private var nextFireTime = 0.0;
private var m_LastFrameShot = -1;
function Start () {
hitParticles = GetComponentInChildren(ParticleEmitter);
// We don't want to emit particles all the time, only when we hit something.
if (hitParticles)
hitParticles.emit = false;
bulletsLeft = bulletsPerClip;
}
function LateUpdate() {
if (muzzleFlash) {
// We shot this frame, enable the muzzle flash
if (m_LastFrameShot == Time.frameCount) {
muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward);
muzzleFlash.enabled = true;
if (audio) {
if (!audio.isPlaying)
audio.Play();
audio.loop = true;
}
} else {
// We didn't, disable the muzzle flash
muzzleFlash.enabled = false;
enabled = false;
// Play sound
if (audio)
{
audio.loop = false;
}
}
}
}
function Fire () {
if (bulletsLeft == 0)
return;
// If there is more than one bullet between the last and this frame
// Reset the nextFireTime
if (Time.time - fireRate > nextFireTime)
nextFireTime = Time.time - Time.deltaTime;
// Keep firing until we used up the fire time
while( nextFireTime < Time.time && bulletsLeft != 0) {
FireOneShot();
nextFireTime += fireRate;
}
}
function FireOneShot () {
var direction = transform.TransformDirection(Vector3.forward);
var hit : RaycastHit;
// Did we hit anything?
if (Physics.Raycast (transform.position, direction, hit, range)) {
// Apply a force to the rigidbody we hit
if (hit.rigidbody)
hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
// Place the particle system for spawing out of place where we hit the surface!
// And spawn a couple of particles
if (hitParticles) {
hitParticles.transform.position = hit.point;
hitParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
hitParticles.Emit();
}
// Send a damage message to the hit object
hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}
bulletsLeft--;
// Register that we shot this frame,
// so that the LateUpdate function enabled the muzzleflash renderer for one frame
m_LastFrameShot = Time.frameCount;
enabled = true;
// Reload gun in reload Time
if (bulletsLeft == 0)
Reload();
}
function Reload () {
// Wait for reload time first - then add more bullets!
yield WaitForSeconds(reloadTime);
// We have a clip left reload
if (clips > 0) {
clips--;
bulletsLeft = bulletsPerClip;
}
}
function GetBulletsLeft () {
return bulletsLeft;
}
are those particles co$$anonymous$$g from your muzzle flash or it's supposed to be where you hit?
The muzzle flash particles should just be setup to emit from the tip of your gun, so I don't see how complicated that could be, just move the emitter there.
If it's supposed to go to where you shot you might need a raycast to deter$$anonymous$$e where that cursor is going. Not much of an expert on it though, you might have to look raycasting up.
The sparks in the picture is the effect of the bullet hitting the ground, I have a muzzle flash but I stop shooting when I took the pic so it didn't display
Ok, so you need to raycast the position to where your bullet is supposed to be hitting. Then emit from there.
Or you can fire a bullet prefab and then when it collides with an object (the ground in this picture), you can destroy the bullet and instantiate your hitParticles.
Instantiate the bullet, add force to it so it goes in the trajectory you want, then OnCollisionEnter to trigger the function that instantiates the particles. Don't forget to destroy your prefabs after a certain amount of time to not clutter your game.
Answer by $$anonymous$$ · Apr 01, 2013 at 09:03 AM
if your gun shoots at your mouse Position, then use
var direction = Camera.main.ScreenPointToRay(Input.mousePosition);
instead of
var direction = transform.TransformDirection(Vector3.forward);
this requirers your camera to be tagges as "main Camera"
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
FPS tutorial HELP!! 1 Answer
Unity particles are off 2 Answers
How to display Gui for Ammo and ammo left 0 Answers
raycast spawn problem 0 Answers