- Home /
How To Assign An Animation When Firing Weapon?
Hello All, I'm trying to adapt the FPS tutorial to a third person shooter and am having a problem: I've managed to equip the player with the machine and the bazooka by binding the Weapons game.object to it's hand and this works well - Pressing 1 brings up the machineGun and 2 the bazooka, and I can cycle through all the player's animations while holding the weapon - great. My problem is attaching my draw, aim, shoot, holster animations to the fire() function. The RocketLauncher js component looks like this:
var projectile : Rigidbody;
var initialSpeed = 20.0;
var reloadTime = 0.5;
var ammoCount = 20;
private var lastShot = -10.0;
function Fire () {
// Did the time exceed the reload time? if (Time.time > reloadTime + lastShot && ammoCount > 0) { // create a new projectile, use the same position and rotation as the Launcher. var instantiatedProjectile : Rigidbody = Instantiate (projectile, transform.position, transform.rotation);
// Give it an initial forward velocity. The direction is along the z-axis of the missile launcher's transform.
instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, 0, initialSpeed));
// Ignore collisions between the missile and the character controller
Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);
lastShot = Time.time;
ammoCount--;
}
}
When I add:
animation.CrossFade("draw_rifle");
animation.Blend("aim_rifle");
within function Fire(), I receive an error message: "There is no 'Animation' attached to the "RocketLauncher" game object, but a script is trying to access it. You probably need to add a Animation to the game object "RocketLauncher". Or your script needs to check if the component is attached before using it."
Now, I dont think I want to add animations to the RocketLauncher component(or Weapons.object) as I want to keep each players animations contained and separate for multi-player.(besides, adding the animations to RocketLauncher did get the error to go away but the animations still wont play) So, how in js do I tell Unity that the animations are located within the player character? Or, am I adding the animation.Play code into the wrong component? Sorry to ramble, Thank you for your time.
Answer by GameCherry · Feb 26, 2011 at 04:45 AM
I received some help for this problem via the irc chat. GabrielR(I think that was his nick) directed me to this link: starting the animation from a different game object and that was the answer, thanks Gabriel. Just for clarification the code now looks like this.
var projectile : Rigidbody;
var initialSpeed = 20.0;
var reloadTime = 0.5;
var ammoCount = 20;
private var lastShot = -10.0;
var target : GameObject;
function Fire ()
{
target = GameObject.Find("player01");
target.animation.CrossFade("shoot_rifle");
if (Time.time > reloadTime + lastShot && ammoCount > 0) {
var instantiatedProjectile : Rigidbody = Instantiate (projectile, transform.position, transform.rotation);
instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, 0, initialSpeed));
Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);
lastShot = Time.time;
ammoCount--;
}
}