- Home /
Issue with calling a function from another script on trigger. Using JavaScript.
So I'm making a simple weapon pickup at the start of a level, and I'm aiming to have the new weapon become the active weapon once it's been picked up. Removing it and giving it to my character were simple enough, however the switching automatically has become a bit of a problem.
//M4A1Pickup.js
function OnTriggerEnter (col : Collider)
{
print("Player picked up M4A1!");
Destroy(gameObject);
PlayerWeapons.hasPrimary = true;
PlayerWeapons.SelectWeapon(0); //This here is the problem
}
The function I'm trying to call is from the fps tutorial in the asset store and is as follows
//PlayerWeapons.js
function SelectWeapon (index : int)
{
for (var i=0;i<transform.childCount;i++)
{
// Activate the selected weapon
if (i == index)
transform.GetChild(i).gameObject.SetActiveRecursively(true);
// Deactivate all other weapons
else
transform.GetChild(i).gameObject.SetActiveRecursively(false);
}
}
Obviously I get an error stating that an instance of type PlayerWeapons is required to access the non static variable SelectWeapon. Most of the previously answered questions I've found have said to use getComponent or make the variable/function static. When I try to make the function static I can no longer use transform and getComponent doesn't seem to work here either.
Some guidance would be much appreciated.
Answer by whydoidoit · Mar 29, 2013 at 02:44 PM
The collider hit is presumably the player, if not then let me know how it is related. I'd suggest that you either:
Get the component from the collider:
collider.GetComponent(PlayerWeapons).SelectWeapon(0);
Put the pickup script on the player not the item
Using statics here is a bad idea if you ever want to have multiplayer. So I'd suggest you get rid of them and do this instead:
var weapons = collider.GetComponent(PlayerWeapons);
weapons.hasPrimary = true;
weapons.SelectWeapon(0);