- Home /
play animation doesn't work
Hi guys I've got a question... Since I've got two animations on one machinegun and in one code only on can be played. Does anybody of you got an idea?
animation.Play("Shotanimation");
and the second one in the reload function:
animation.Play("ReloadAnimation");
Can you give more details? What happens? Does one play and the other doesn't? None of the animations play?
Answer by StephanK · Apr 21, 2011 at 10:58 AM
Why would you play those two animations together? If you want fade them over you should use animation.CrossFade if you want to play one after the other you can use animation.PlayQueued if you want to play both of them at the same time you'll have to look at animation layers and weights.
Answer by bubblegumsoldier · Apr 21, 2011 at 11:42 AM
hi,
thx for your answer... I only know the animation.Play() code for starting an animation at one time. Can you tell me how to use the crossfade code... So I have two animations one for reloading and one for shooting (I could do this in one... as u said) and how yould I go on now? Here's my full code:
var range = 100.0; var fireRate = 0.05; var force = 10.0; var damage = 5.0; var bulletsPerClip = 40; 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) { animation.Play("shotmachine"); // 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 animation//
Reload();
}
} function Reload () { animation.Play("reloadanimation"); // 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; }
So please help me and just tell me what to do and correct my code...
Please...
THX
Henry